Ban đầu, tất cả các tập lệnh trong /etc/pm/sleep.d
sẽ được thực thi trước khi chuyển sang chế độ ngủ và nếu bất kỳ tập lệnh nào trả về chế độ ngủ trạng thái khác không sẽ không được nhập.
Vì vậy, bạn có thể đặt một tập lệnh ở đó tìm kiếm tất cả các quy trình mà bạn sẽ không được nhận ra là 'PC vẫn đang được sử dụng' và chỉ cần trả về 1 nếu bất kỳ trong số này vẫn đang chạy - hoặc bất kỳ điều kiện nào khác bạn có thể tạo tập lệnh.
Đối với ssh, bạn có thể sử dụng netstat -tnpa | grep ESTABLISHED.*sshd
để kiểm tra các kết nối mở và đối với samba, bạn có thể phân tích đầu ra củasmbstatus
Chỉnh sửa:
Nếu bạn đang sử dụng
systemd : tạo /etc/systemd/system/dontsleep.service
như thế này
[Unit]
Description=Inhibit suspend in case of [some] activity
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "some command that that returns an failure exit status if you don't want the pc to go into sleep mode (e.g exit 1)"
[Install]
RequiredBy=sleep.target
Giờ đây, tính năng RequiredBy= & Before=sleep.target
mới của bạn dontsleep.service
đã trở thành một phần phụ thuộc cho sleep.target
và systemd không thể chuyển sang chế độ ngủ cho đến khi dịch vụ này thực thi thành công (ví dụ exit 0
)
Đừng quên kích hoạt nó với systemctl enable dontsleep.service
(Ý tưởng bị đánh cắp từ đây: https://bbs.archlinux.org/viewtopic.php?pid=1380080#p1380080 )