Ứng dụng VPN khởi chạy từ menu ứng dụng, đường hầm kết nối, và biểu tượng không bao giờ xuất hiện sau khi đăng nhập trên một máy, trong khi cùng gói đó hoạt động đúng trên máy khác. Ba quan sát bị dồn thành một lời phàn nàn: chương trình có khởi chạy không, giao diện có hiển thị không, và đường hầm có hoạt động không. Trình khởi chạy do một mục màn hình nền với các khóa lọc điều khiển, và mục đó không liên quan gì đến giao thức VPN. Hãy làm theo hướng dẫn theo thứ tự và dừng lại khi một trong ba tách ra rõ ràng.

Ba sự thật riêng biệt: khởi chạy, biểu tượng, đường hầm

Một mục màn hình nền khởi chạy một chương trình. Nó không thể cài đặt một hiện thực khay hệ thống, và nó không thể làm một chỉ báo xuất hiện trong bảng điều khiển không hỗ trợ giao thức mà ứng dụng dùng. Nếu tiến trình đã chạy, câu hỏi khởi chạy đã được trả lời và bạn đang nhìn vào một vấn đề tích hợp thay vào đó.

Đường hầm lại là sự thật thứ ba. Một biểu tượng thiếu không phải bằng chứng kết nối đã rớt, và việc giết rồi khởi động lại ứng dụng để «sửa» biểu tượng chính là cách một đường hầm đang hoạt động bị ngắt không có lý do. Người dùng báo biểu tượng thiếu và đường hầm hỏng trong cùng một câu, và đó chính là lý do hai thứ cần được tách ra trên giấy.

Hãy tách chúng trước khi thay đổi bất cứ thứ gì. Kiểm tra tiến trình có tồn tại không, sau đó bảng điều khiển có hỗ trợ chỉ báo không, và cuối cùng giao diện có báo kết nối không. Mỗi câu trả lời chỉ vào một tầng khác và một người phụ trách khác.

Tìm mục mà phiên thực sự đọc

Các mục tự khởi động nằm trong thư mục người dùng và thư mục hệ thống, và khi tên tệp trùng nhau thì bản sao của người dùng thắng. Đọc nhầm mục là lý do phổ biến nhất khiến một thay đổi có vẻ không có tác dụng. Liệt kê cả hai thư mục trước khi chỉnh sửa bất cứ thứ gì, và ghi lại tệp nào phiên sẽ thực sự nạp.

ls -l ~/.config/autostart/ /etc/xdg/autostart/
echo "$XDG_CURRENT_DESKTOP"
grep -H -E '^(OnlyShowIn|NotShowIn|TryExec|Hidden|Exec)=' ~/.config/autostart/*.desktop /etc/xdg/autostart/*.desktop

Biến môi trường in ra tên phiên mà các khóa lọc được so sánh với, và thường đó là danh sách ngăn cách bằng dấu hai chấm. Hãy so sánh nguyên văn với các giá trị trong mục, vì những tên đó là chi tiết cấu hình phân biệt chữ hoa chữ thường chứ không phải mô tả phiên. Một giá trị GNOME không khớp với gnome, và sự im lặng sinh ra từ đó không kèm bất kỳ thông báo lỗi nào. Hãy in nó ra thay vì giả định.

Nếu cùng tên tệp tồn tại trong cả hai thư mục, bản sao của người dùng mới là thứ quan trọng. Chỉnh sửa tệp hệ thống rồi tự hỏi vì sao không có gì thay đổi là một giờ đồng hồ mất đi rất phổ biến.

Đọc các khóa lọc, theo thứ tự

Mục ví dụ dưới đây cho thấy các khóa quyết định phiên có khởi chạy chương trình hay không. Đây là một đoạn, không phải trình khởi chạy đầy đủ, và các giá trị thuộc về một đường dẫn hư cấu.

[Desktop Entry]
Type=Application
Name=Example VPN
Exec=/opt/example-vpn/client --minimized
TryExec=/opt/example-vpn/client
OnlyShowIn=GNOME;

OnlyShowIn giới hạn mục cho các môi trường được liệt kê và NotShowIn loại trừ những môi trường được liệt kê. Đặc tả không định nghĩa hành vi hữu ích khi cả hai xuất hiện trong một mục, vì vậy hãy coi tệp chứa cả hai là khiếm khuyết chứ không phải một kết hợp thông minh. Hãy xóa khóa bạn không cần thay vì thêm khóa thứ hai và hy vọng vào một quy tắc ưu tiên.

TryExec hỏi tệp thực thi có tồn tại trước khi phiên khởi chạy nó hay không. Vì vậy một đường dẫn còn lại từ bản cài cũ sẽ chặn tự khởi động dù gói mới vẫn chạy khi khởi chạy từ menu, và lỗi đó trông giống hệt một bộ lọc màn hình nền.

Ghi đè ở cấp người dùng, không phải cấp hệ thống

Khi bộ lọc thực sự sai cho máy này, hãy sao chép mục hệ thống vào thư mục người dùng và sửa bản sao. Theo các quy tắc tự khởi động của XDG, một mục người dùng cùng tên có quyền ưu tiên, và Hidden=true vô hiệu hóa một mục mà không xóa tệp hệ thống.

mkdir -p ~/.config/autostart
cp /etc/xdg/autostart/example-vpn.desktop ~/.config/autostart/
sed -i '/^OnlyShowIn=/d' ~/.config/autostart/example-vpn.desktop
desktop-file-validate ~/.config/autostart/example-vpn.desktop

Hãy xác thực kết quả trước khi đăng xuất, vì một mục sai định dạng bị bỏ qua trong im lặng và bài kiểm tra tiếp theo không cho bạn biết gì. Cài lại gói sẽ không xóa phần ghi đè của bạn, đó là mục đích và cũng là lý do ghi lại rằng nó tồn tại. Ghi đường dẫn tệp vào phiếu để người tiếp theo tìm thấy phần ghi đè thay vì suy ra lại.

Hãy ưu tiên cách này hơn việc chỉnh sửa trình khởi chạy hệ thống dùng chung, vì nó thay đổi hành vi cho mọi người dùng trên máy và không thể được xem xét theo cùng một cách. Ghi đè ở cấp người dùng hiển thị ở một nơi, có thể hoàn tác bằng cách xóa một tệp, và dễ giải thích trong phiếu. Tệp hệ thống vẫn như nhà cung cấp đã gửi, nên một bản cập nhật gói không âm thầm vô hiệu lý lẽ của bạn.

Xác nhận việc khởi chạy mà không đụng đến đường hầm

Đăng xuất rồi đăng nhập lại, sau đó xác nhận tiến trình tồn tại trước khi nhìn vào bảng điều khiển. Một lần khởi chạy thành công và một biểu tượng hiển thị là hai kết quả khác nhau, và chỉ kết quả thứ hai mới cần công việc tích hợp màn hình nền. Trộn lẫn hai thứ sẽ khiến bạn đi cài lại một gói vốn dĩ vẫn hoạt động suốt thời gian qua.

pgrep -af example-vpn
systemctl --user status example-vpn.service
journalctl --user -b --no-pager | grep -i example-vpn | tail -20

Nếu tiến trình vắng mặt, hãy đọc lại mục để tìm bộ lọc còn sót hoặc một đường dẫn TryExec đã lỗi thời. Nếu nó có mặt, trình khởi chạy đã hoạt động và biểu tượng thiếu là một vấn đề riêng với khả năng hỗ trợ chỉ báo của bảng điều khiển, không phải với mục bạn vừa sửa.

Ghi ba quan sát vào phiếu: đã khởi chạy, hiển thị, đã kết nối. Bản ghi đó ngăn người tiếp theo lặp lại cùng một sự nhầm lẫn ba chiều, và làm rõ tầng nào vẫn cần xử lý.

Bài viết liên quan