Người dùng Linux tranh luận về các giải pháp thay thế tốt hơn cho systemd-inhibit để ngăn hệ thống ngủ trong các phiên SSH

Nhóm Cộng đồng BigGo
Người dùng Linux tranh luận về các giải pháp thay thế tốt hơn cho systemd-inhibit để ngăn hệ thống ngủ trong các phiên SSH

Một cuộc thảo luận gần đây về việc sử dụng systemd-inhibit để ngăn các hệ thống Linux ngủ trong các phiên SSH từ xa đã gây ra tranh luận giữa người dùng về những cách tiếp cận tốt nhất để xử lý quản lý nguồn điện trên các hệ thống desktop được sử dụng cho công việc phát triển.

Cuộc trò chuyện tập trung xung quanh một vấn đề phổ biến mà các nhà phát triển gặp phải khi sử dụng máy tính desktop từ xa. Khi làm việc thông qua kết nối SSH , các cài đặt ngủ tự động của hệ thống có thể làm gián đoạn phiên làm việc, buộc người dùng phải đánh thức máy và kết nối lại. Trong khi một giải pháp liên quan đến việc sử dụng systemd-inhibit với các tiến trình chạy nền, các thành viên cộng đồng đã nêu lên mối quan ngại về cách tiếp cận này và đề xuất các giải pháp thay thế.

Giải pháp tạm bợ so với Giải pháp đúng đắn

Một số người dùng chỉ ra rằng giải pháp tạm thời systemd-inhibit đại diện cho một bản vá - một sửa chữa nhanh chóng thay vì giải quyết nguyên nhân gốc rễ. Vấn đề thực sự nằm ở logic không hoàn chỉnh của systemd-logind trong việc xử lý các phiên SSH . Trong khi systemd đã theo dõi các phiên SSH thông qua cơ sở dữ liệu đăng nhập của nó, nó không xem xét đúng cách các phiên từ xa đang hoạt động khi đưa ra quyết định tạm ngừng. Điều này có nghĩa là hệ thống xử lý một phiên SSH đang hoạt động giống như một desktop không hoạt động, dẫn đến việc tạm ngừng không mong muốn.

Lưu ý: systemd-logind là dịch vụ hệ thống quản lý đăng nhập người dùng và các quyết định quản lý nguồn điện

Các Thành Phần Kỹ Thuật Liên Quan:

  • systemd-logind: Quản lý phiên người dùng và các quyết định về nguồn điện
  • pam_systemd.so: Mô-đun PAM để theo dõi phiên
  • systemd-inhibit: Công cụ để chặn các hành động quản lý nguồn điện
  • Theo dõi phiên SSH: Nằm trong /run/systemd/users/, /run/systemd/sessions/
  • Power Management Assertions: API cơ bản (tương tự như caffeinate trên macOS)

Các Cách tiếp cận Thay thế Nhận được Sự ủng hộ

Các thành viên cộng đồng đã đề xuất một số giải pháp sạch sẽ hơn. Một giải pháp thay thế phổ biến liên quan đến việc cấu hình laptop không bao giờ tạm ngừng khi được kết nối với nguồn điện, loại bỏ nhu cầu can thiệp thủ công trong các tác vụ chạy dài như biên dịch hoặc kiểm tra. Những người khác khuyến nghị sử dụng autossh , tự động kết nối lại các phiên SSH sau khi gián đoạn mạng hoặc sự kiện đánh thức hệ thống.

Tôi chỉ sử dụng autossh từ CLI và nó kết nối lại nếu laptop của tôi (hoặc máy từ xa) thức dậy lại.

Một số người dùng ủng hộ việc hoàn toàn vô hiệu hóa các tính năng ngủ tự động, ưa thích quản lý nguồn điện thủ công. Cách tiếp cận này xử lý máy tính như hoàn toàn hoạt động hoặc hoàn toàn tắt, tránh sự phức tạp của việc quản lý các trạng thái nguồn điện khác nhau.

Các Giải Pháp Thay Thế Được Thảo Luận:

  • autossh: Tự động kết nối lại các phiên SSH sau khi bị gián đoạn
  • Thay đổi chính sách nguồn điện: Cấu hình không bao giờ tạm ngưng khi sử dụng nguồn điện AC
  • Dịch vụ người dùng systemd: Chuyển đổi lệnh ngăn chặn thành dịch vụ phù hợp
  • Vô hiệu hóa hoàn toàn chế độ ngủ: Chỉ quản lý nguồn điện thủ công
  • D-Bus API: Gọi hệ thống trực tiếp thay vì sử dụng công cụ dòng lệnh

Cải tiến Kỹ thuật và Giải pháp Tạm thời

Cuộc thảo luận đã tiết lộ một số cải tiến kỹ thuật cho cách tiếp cận ban đầu. Người dùng đề xuất chuyển đổi lệnh systemd-inhibit thành một dịch vụ người dùng systemd thích hợp, điều này sẽ loại bỏ nhu cầu theo dõi ID tiến trình thủ công. Điều này sẽ cho phép các lệnh khởi động và dừng đơn giản thông qua systemctl thay vì quản lý các tiến trình chạy nền.

Một đề xuất khác liên quan đến việc viết một chương trình chuyên dụng gọi API D-Bus trực tiếp, tránh sự phức tạp của các tiến trình lồng nhau. Cách tiếp cận này sẽ cung cấp quản lý tài nguyên sạch sẽ hơn và hoạt động đáng tin cậy hơn.

Lưu ý: D-Bus là một hệ thống giao tiếp giữa các tiến trình được sử dụng bởi nhiều môi trường desktop Linux

Cấu trúc lệnh systemd-inhibit:

  • --no-ask-password: Bỏ qua lời nhắc xác thực
  • --what=idle: Chỉ định những gì cần ngăn chặn (idle, sleep, shutdown)
  • --who="username": Xác định người dùng hoặc ứng dụng
  • --why="reason": Cung cấp mô tả cho việc ngăn chặn
  • Thực thi lệnh: sh & disown tạo ra tiến trình chạy nền

Thách thức Quản lý Nguồn điện Rộng lớn hơn

Cuộc tranh luận làm nổi bật những căng thẳng đang diễn ra trong quản lý nguồn điện Linux giữa các trường hợp sử dụng khác nhau. Trong khi ngủ tự động hoạt động tốt cho việc sử dụng laptop điển hình, nó tạo ra vấn đề cho người dùng cần hệ thống của họ có sẵn để truy cập từ xa. Cuộc thảo luận cho thấy rằng tích hợp tốt hơn giữa các dịch vụ SSH và quản lý nguồn điện của systemd có thể giải quyết những vấn đề này mà không cần giải pháp tạm thời của người dùng.

Một số người tham gia lưu ý rằng vấn đề này phản ánh sự khác biệt triết lý rộng lớn hơn giữa các cách tiếp cận Unix truyền thống và các hệ thống dựa trên systemd hiện đại. Thách thức nằm ở việc cân bằng quản lý nguồn điện tự động với tính linh hoạt cần thiết cho các mẫu sử dụng đa dạng.

Cuộc thảo luận cộng đồng chứng minh rằng trong khi các giải pháp tạm thời kỹ thuật tồn tại, vấn đề cơ bản đòi hỏi sự phối hợp tốt hơn giữa các dịch vụ SSH và hệ thống quản lý nguồn điện để cung cấp truy cập từ xa liền mạch mà không hy sinh hiệu quả năng lượng.

Tham khảo: Keeping sessions alive with systemd-inhibit