Ngăn máy ngủ khi kết nối SSH được bật


13

Tôi đang cố gắng tiết kiệm năng lượng bằng cách chuyển máy tính để bàn sang chế độ treo khi chúng không hoạt động. Nhưng nhiều máy tính để bàn cũng được truy cập thông qua SSH bởi chủ sở hữu của họ. Có một giải pháp Wakeonlan được triển khai để cho phép chủ sở hữu bật máy, nhưng vấn đề là máy sẽ tự động treo lại sau 10 phút, ngay cả khi kết nối SSH được bật.

Những gì tôi đang cố gắng làm là bao gồm các phiên SSH hoạt động trong định nghĩa "hoạt động".

Câu hỏi là nó có thể được thực hiện thông qua việc thiết lập quy tắc polkit không? Nó có thể được thực hiện thông qua việc đặt một tập lệnh chạy trước khi tạm ngưng thực tế và hủy bỏ nó nếu các phiên SSH được tìm thấy không? Tôi cần một cách hợp pháp sạch sẽ để làm điều này. Nếu không, thì cách hacky cũng được hoan nghênh.

Giải pháp hacky ngây thơ hiện tại: chỉnh sửa /usr/sbin/pm-suspend:

#check for SSH sessions, and prevent suspending:
if [ "$(who | grep -cv "(:")" -gt 0 ]; then
    echo "SSH session(s) are on. Not suspending."
    exit 1
fi

Điều này phục vụ mục đích. Nhưng tôi không biết khi nào bản cập nhật sẽ ghi đè lên tệp /usr/sbin/pm-suspend. Tôi cũng không biết làm thế nào điều này sẽ làm việc với các triển khai đình chỉ khác như tuxonice.


2
Tôi có thể đề nghị sử dụng grep -cv :0thay vì đi qua wc?
terdon

1
Một ý tưởng khác cho sự thanh lịch hơn: Bạn có thể bỏ yêu cầu [nếu bạn viết if who | grep -qv :0; then(giả sử bạn có POSIX tuân thủ grepnhư GNU grep).
David Foerster

Câu trả lời:


19

Cho đến Ubuntu 14.10 (dựa trên khởi động)

Có một cái nhìn pm-action(8)và tìm kiếm /etc/pm/sleep.dtrong phần PHIM PHIM. Nếu một trong các tập lệnh này trả về với trạng thái thoát khác không, việc tạm dừng sẽ bị ngăn chặn.

Hướng dẫn cập nhật cho rõ ràng:

  1. Vì vậy, tạo một tập tin /etc/pm/sleep.d/05_ssh_keepawake.

  2. Đặt một shebang ( #!/bin/sh) và mã được đề cập trong câu hỏi trong tệp này.

  3. Đặt quyền thực thi trên nó:

    chmod +x /etc/pm/sleep.d/05_ssh_keepawake
    

Kể từ Ubuntu 15.04 (dựa trên hệ thống)

systemd không sử dụng pm-utils để quản lý các hook trạng thái năng lượng của nó nhưng có cơ sở hạ tầng riêng đến cùng. Công cụ kiểm tra chất ức chế giấc ngủ không còn được thực hiện khi ngủ mà phải được đặt bằng hành động ức chế giấc ngủ (xem 1 ).

Vì vậy, bạn phải thêm các lệnh vào đăng nhập và đăng xuất phiên SSH đăng ký một chất ức chế giấc ngủ với systemd (ví dụ: thông qua systemd-inhibit(1) ) và sau đó giải phóng chất ức chế. Nếu ai đó biết cách đăng nhập và đăng xuất SSH, tôi hoan nghênh nhận xét hoặc chỉnh sửa để chúng tôi có thể thực hiện các bước và lệnh có liên quan.

Phần sau đây đang được tiến hành - Chỉ sử dụng nó khi bạn biết bạn đang làm gì!

Bạn có thể có thể viết một đơn vị systemd /etc/systemd/system/ssh-inhibt-sleep.servicekhiến nó trở thành một phụ thuộc của sleep.targetviệc sử dụng RequiredBytùy chọn. Nếu đơn vị mới của bạn không thành công (với trạng thái thoát khác không từ quy trình được gọi), nó sẽ thực hiện sleep.targetvà do đó hành động ngủ tiếp theo.

[Unit]
Description=Check for running SSH sessions and, if any, inhibit sleep
Before=sleep.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '! who | grep -qv :0'`

[Install]
RequiredBy=sleep.target

Như mọi khi, bạn cần kích hoạt các đơn vị systemd để chúng có hiệu lực:

sudo systemctl enable ssh-inhibt-sleep.service

Để biết thêm thông tin xem systemd.unit(5)systemd.service(5).


điều này dường như không hoạt động trong 18.04. Đây không còn là giải pháp?
Michael Jarret

1
@MichaelJarret: Thật vậy. Tôi đã cập nhật câu hỏi của tôi với một số thông tin về tình hình với systemd.
David Foerster

Tôi đã tìm thấy những điều sau đây trong khi cố gắng sắp xếp điều này vào ngày hôm qua, nhưng không thể sửa đổi kịch bản trước đó để thực hiện công việc ở đây
Michael Jarret

Tôi không thể chỉnh sửa nhận xét của mình, nhưng điều này cũng có vẻ phù hợp
Michael Jarret

1
@MichaelJarret: Tôi có một ý tưởng khác mà bạn có thể thử. Xem bản cập nhật cho câu trả lời của tôi.
David Foerster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.