•9 min read

Khắc phục độ trễ đăng nhập 2 phút trên Ubuntu (Hành trình gỡ lỗi thực tế)

Khắc phục độ trễ đăng nhập 2 phút trên Ubuntu (Hành trình gỡ lỗi thực tế)

Tôi đã ngồi nhìn chằm chằm vào màn hình đóng băng trong hai phút sau khi gõ mật khẩu. Mỗi sáng. Suốt ba ngày liên tiếp.

Audio Briefing
0:00 / 0:00
Thông tin chính

Thời gian khởi động và thời gian đăng nhập là hai vấn đề hoàn toàn khác nhau. systemd-analyze đo tốc độ khởi động — không phải những gì xảy ra sau khi bạn gõ mật khẩu.

Đây là phần tiếp theo của bài viết gốc về sự cố chậm đăng nhập Ubuntu của tôi, nơi một vấn đề NVIDIA/Xorg đã gây ra triệu chứng tương tự. Lần này máy không có GPU NVIDIA — nhưng tình trạng đóng băng hai phút tương tự đã quay trở lại. Nguyên nhân gốc rễ khác, cách khắc phục khác.


Bộ công cụ chẩn đoán

Trước khi chạm vào bất cứ thứ gì, hãy thu thập bằng chứng. Đoán mò chỉ tốn thời gian.

Phân tích thời gian khởi động (những gì tải trước màn hình đăng nhập):

systemd-analyze blame | head -20
systemd-analyze critical-chain
systemd-analyze plot > boot.svg

Phân tích phiên người dùng (những gì tải sau khi bạn gõ mật khẩu):

systemd-analyze --user blame | head -20
systemd-analyze --user critical-chain

Quét nhật ký (tìm các sự kiện hết thời gian chờ và lỗi):

# All errors since last boot
journalctl -b -p err

# Everything, with timestamps
journalctl -b --output=short-precise | less

# Filter for common culprits
journalctl -b | grep -iE "timeout|timed out|failed|refused|killed"

Thông tin quan trọng: systemd-analyze blame chỉ hiển thị thời gian khởi động (trước khi đăng nhập). Đối với các trường hợp đóng băng sau khi đăng nhập, bạn cần --user và journalctl -b.


Advertisement

Manh mối đầu tiên: NetworkManager

systemd-analyze blame cho thấy NetworkManager-wait-online.service mất 5,7 giây. Không phải là thủ phạm gây đóng băng khi đăng nhập, nhưng đáng để khắc phục.

NetworkManager-wait-online làm gì

Dịch vụ này chặn chuỗi khởi động cho đến khi kết nối mạng hoàn chỉnh được thiết lập. Trên máy chủ, điều này quan trọng — các dịch vụ systemd như cơ sở dữ liệu cần mạng trước khi khởi động. Trên máy tính để bàn, điều này thường vô nghĩa.

sudo systemctl disable NetworkManager-wait-online.service

Kiểm tra xem nó đã thực sự bị vô hiệu hóa chưa:

systemctl is-enabled NetworkManager-wait-online.service
# Should output: disabled

Khởi động nhanh hơn 5 giây. Tình trạng đóng băng khi đăng nhập không thay đổi.

Tại sao điều này an toàn trên máy tính để bàn: Các ứng dụng máy tính để bàn không phụ thuộc vào việc mạng đã sẵn sàng khi khởi động — chúng tự xử lý. Các dịch vụ duy nhất cần NetworkManager-wait-online thành công là những dịch vụ được After=network-online.target rõ ràng, điều này hiếm khi xảy ra trên máy tính để bàn.


Manh mối thứ hai: Keyring trùng lặp

journalctl -b | grep -iE "failed|error" cho thấy một loạt lỗi chính xác vào thời điểm hai phút sau khi đăng nhập:

Failed to start app-gnome-gnome-keyring-secrets.scope
systemd[1423]: Failed to start gnome-keyring-secrets.scope
cgroup: Failed to create /user.slice/user-1000.slice/session-2.scope/app.slice/app-gnome-keyring

Dấu thời gian rất chính xác: những lỗi này xuất hiện 120 giây sau khi đăng nhập — chính xác bằng thời gian đóng băng.

Hiểu vấn đề

GNOME đang khởi động daemon keyring hai lần — một lần thông qua các dịch vụ người dùng systemd, và một lần nữa thông qua các tệp tự động khởi động .desktop trong /etc/xdg/autostart/. Lần thử thứ hai phát hiện socket đã được sử dụng, bị lỗi và khiến systemd chờ dịch vụ bị lỗi trước khi nó có thể tuyên bố phiên đã sẵn sàng.

Xác nhận trùng lặp

Kiểm tra xem các tệp tự động khởi động có tồn tại không:

ls /etc/xdg/autostart/ | grep keyring
# gnome-keyring-pkcs11.desktop
# gnome-keyring-secrets.desktop
# gnome-keyring-ssh.desktop

Kiểm tra xem dịch vụ người dùng systemd cũng đang hoạt động không:

systemctl --user status gnome-keyring-daemon.service

Nếu cả hai đều có mặt và dịch vụ đang hoạt động, bạn có bản sao trùng lặp.

Cách khắc phục

Chỉ vô hiệu hóa các mục tự động khởi động cho người dùng của bạn (không sửa đổi các tệp toàn hệ thống):

mkdir -p ~/.config/autostart
for f in gnome-keyring-pkcs11.desktop gnome-keyring-secrets.desktop gnome-keyring-ssh.desktop; do
    cp /etc/xdg/autostart/$f ~/.config/autostart/$f
    echo "X-GNOME-Autostart-enabled=false" >> ~/.config/autostart/$f
done

Đăng xuất và đăng nhập lại. Các lỗi cgroup sẽ biến mất.

Các lỗi cgroup đã biến mất. Tình trạng đóng băng? Vẫn hai phút, chính xác.


Thủ phạm thực sự: Tính toán của snapd

Sau khi loại bỏ các ứng cử viên rõ ràng, tôi đã chạy một tìm kiếm có mục tiêu cho bất cứ thứ gì trong nhật ký liên quan đến thời gian:

journalctl -b | grep -i "snap\|adjust\|timeout" | head -30

Nó đây rồi:

snapd[2242]: adjusting startup timeout by 2m0s (pessimistic estimate of 30s plus 5s per snap)
snapd[2242]: OsRelease{...} snap name "snapd-desktop-integration" error: service not found
Công thức hết thời gian chờ của Snapd

snapd tính toán thời gian chờ khởi động của nó là 30 giây + 5 giây cho mỗi snap đã cài đặt. Tôi đã cài đặt 18 snap. 30 + (5 × 18) = chính xác 120 giây.

Điều này được mã hóa cứng trong mã nguồn snapd. Bạn không thể cấu hình nó ngắn hơn.

Snap snapd-desktop-integration bị lỗi mỗi khi đăng nhập. snapd đã đợi toàn bộ thời gian chờ được tính toán (120 giây) trước khi từ bỏ và cho phép phiên tiếp tục.

Chẩn đoán Snap nào đang bị lỗi

# Check snap status
snap list

# Check for failing snap services
snap services | grep -v enabled

# Watch snap logs
journalctl -b -u snapd | grep -iE "fail|error|timeout"

Đầu ra cho thấy snapd-desktop-integration liên tục không thể kết nối. Nhiệm vụ của snap là đồng bộ hóa các chủ đề và phông chữ GTK giữa máy chủ và các ứng dụng snap được đóng gói. Hoàn toàn là thẩm mỹ — không có gì bị hỏng nếu nó thất bại, ngoại trừ việc chờ đăng nhập.

Cách khắc phục

sudo snap remove snapd-desktop-integration

Đăng xuất, đăng nhập lại. Màn hình nền tải ngay lập tức.

Thay thế: Giữ Snap, Xóa Dịch vụ

Nếu bạn muốn giữ snap để sử dụng thỉnh thoảng nhưng ngăn nó chạy khi đăng nhập:

sudo snap stop snapd-desktop-integration
sudo snap set snapd-desktop-integration daemon=false

Điều này ngăn dịch vụ tự động khởi động trong khi vẫn giữ snap được cài đặt.


Advertisement

Bức tranh toàn cảnh: Ba lỗi, một triệu chứng

LỗiCông cụ phát hiệnẢnh hưởng đến đăng nhậpCách khắc phục
NetworkManager-wait-onlinesystemd-analyze blame+5 giây khi khởi động (không phải đăng nhập)systemctl disable
gnome-keyring trùng lặpjournalctl -b -p errLỗi cgroup, chậm trễ nhỏVô hiệu hóa các bản sao tự động khởi động
snapd hết thời gian chờjournalctl -b | grep snap+120 giây đóng băng khi đăng nhậpsnap remove snapd-desktop-integration

Mỗi lỗi đều có thật. Không lỗi nào trong số chúng tự gây ra tình trạng đóng băng hai phút cho đến khi vấn đề snapd được tìm thấy.


Kiểm tra phòng ngừa

Nếu bạn muốn kiểm tra những gì đang khởi động chậm trong phiên người dùng của mình mà không cần chờ đợi điều gì đó bị hỏng:

# Slowest user services at startup
systemd-analyze --user blame | head -20

# All snap services and their status
snap services

# Snaps that have autostart behavior
snap list | awk 'NR>1 {print $1}' | xargs -I{} snap info {} 2>/dev/null | grep -A2 "services:"

Đối với các hệ thống có nhiều snap, phép tính trên áp dụng: cứ thêm 6 snap sẽ tăng thêm 30 giây vào thời gian chờ trong trường hợp xấu nhất. Giữ danh sách snap của bạn gọn gàng.


Bảng gian lận chẩn đoán

Phân tích khởi động: systemd-analyze blame | head -20
Phân tích phiên người dùng: systemd-analyze --user blame | head -20
Lỗi đăng nhập: journalctl -b | grep -iE "timeout|timed out|failed"
Cụ thể về Snap: journalctl -b -u snapd | grep -iE "fail|adjust|timeout"
Dịch vụ Snap: snap services | grep -v enabled


Tóm tắt

Ba lỗi riêng biệt. Hai phút chờ đợi. Một lệnh snap remove đã khắc phục nó.

Bài học thực sự: đóng băng khi đăng nhập ≠ chậm khởi động. systemd-analyze blame sẽ không cho bạn thấy điều gì đang xảy ra sau khi bạn gõ mật khẩu. Sử dụng systemd-analyze --user blame và journalctl -b | grep -iE "failed|timeout" để tìm các vấn đề sau khi đăng nhập.

Công thức hết thời gian chờ 30 + 5n của snapd là nguyên nhân phổ biến nhất mà tôi từng thấy gây ra sự chậm trễ đăng nhập bí ẩn 1–2 phút trên các máy Ubuntu có nhiều snap được cài đặt. Nếu máy của bạn bị đóng băng chính xác N×30 giây sau khi đăng nhập, hãy kiểm tra các dịch vụ snap trước.

Bạn cũng có thể thích

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement