Saya mencoba menghemat daya dengan mengalihkan desktop ke mode menangguhkan saat tidak aktif. Tetapi banyak desktop juga diakses melalui SSH oleh pemiliknya. Ada solusi wakeonlan yang digunakan untuk memungkinkan pemilik menghidupkan mesin, tetapi masalahnya adalah bahwa mesin akan ditangguhkan lagi secara otomatis dalam 10 menit, meskipun koneksi SSH aktif.
Apa yang saya coba lakukan adalah memasukkan sesi SSH aktif dalam definisi "aktivitas".
Pertanyaannya, dapatkah hal ini dilakukan melalui pengaturan aturan polkit? Bisakah itu dilakukan dengan meletakkan skrip yang berjalan sebelum penangguhan yang sebenarnya, dan membatalkannya jika sesi SSH ditemukan? Saya perlu cara yang sah dan bersih untuk melakukan ini. Jika tidak, maka cara hack juga diterima.
Solusi peretasan naif saat ini: edit /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
Ini melayani tujuan. Tapi saya tidak tahu kapan pembaruan akan menimpa file /usr/sbin/pm-suspend
. Saya juga tidak tahu bagaimana ini akan bekerja dengan implementasi menangguhkan lainnya seperti tuxonice.
sumber
grep -cv :0
daripada melewatiwc
?[
jika Anda menulisif who | grep -qv :0; then
(dengan asumsi Anda memiliki POSIX yang sesuaigrep
seperti GNU grep).Jawaban:
Hingga Ubuntu 14.10 (Berbasis pemula)
Lihat
pm-action(8)
dan cari/etc/pm/sleep.d
di bagian "FILES". Jika salah satu skrip ini kembali dengan status keluar non-nol, penangguhan dicegah.Petunjuk yang diperbarui untuk kejelasan:
Jadi buat file
/etc/pm/sleep.d/05_ssh_keepawake
.Letakkan shebang (
#!/bin/sh
) dan kode yang disebutkan dalam pertanyaan di file ini.Tetapkan eksekusi izin di atasnya:
Sejak Ubuntu 15.04 (berbasis sistemd)
systemd tidak menggunakan pm-utils untuk mengelola hook-nya, tetapi memiliki infrastruktur sendiri untuk tujuan yang sama. Checker inhibitor tidur tidak lagi dijalankan saat tidur tetapi harus diatur oleh tindakan yang menghambat tidur (lihat 1 ).
Karena itu, Anda harus menambahkan perintah ke sesi SSH masuk dan keluar yang mendaftarkan sleep inhibitor dengan systemd (misalnya via
systemd-inhibit(1)
) dan kemudian melepaskan inhibitor. Jika ada yang tahu cara menghubungkan ke SSH masuk dan keluar, saya akan menyambut komentar atau edit sehingga kami bisa mengetahui langkah-langkah dan perintah yang relevan.Bagian berikut sedang dalam proses - Hanya gunakan saat Anda tahu apa yang Anda lakukan!
Anda mungkin bisa menulis unit systemd
/etc/systemd/system/ssh-inhibt-sleep.service
yang menjadikan dirinya ketergantungansleep.target
menggunakanRequiredBy
opsi. Jika unit baru Anda gagal (dengan status keluar non-nol dari proses yang diminta), itu akan membuatsleep.target
dan dengan demikian tindakan tidur berikutnya.Seperti biasa Anda perlu mengaktifkan unit systemd agar mereka berlaku:
Untuk info lebih lanjut, lihat
systemd.unit(5)
dansystemd.service(5)
.sumber