SSH bağlantıları açıkken makinenin uyumasını önleyin


13

Etkin olmadıklarında masaüstü bilgisayarları askıya alma moduna geçirerek güç tasarrufu yapmaya çalışıyorum. Ancak birçok masaüstüne SSH aracılığıyla sahipleri tarafından erişilir. Sahiplerin makineyi açmasını sağlamak için dağıtılmış bir wakeonlan çözümü var, ancak sorun, SSH bağlantısı açık olsa bile makinelerin 10 dakika içinde otomatik olarak askıya alınması.

Ne yapmaya çalışıyorum aktif SSH oturumları "aktivite" tanımlarına dahil etmektir.

Soru, bir polkit kuralı yapılarak yapılabilir mi? Gerçek askıya alınmadan önce çalışan ve SSH oturumları bulunursa iptal edilen bir komut dosyası koyarak yapılabilir mi? Bunu yapmanın temiz ve yasal bir yoluna ihtiyacım var. Değilse, o zaman hacky yolları da kabul edilir.

Mevcut saf hacky çözümü: düzenlemek /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

Bu amaca hizmet eder. Ancak bir güncellemenin dosyanın üzerine ne zaman yazılacağını bilmiyorum /usr/sbin/pm-suspend. Bunun smokinice gibi diğer askıya alma uygulamalarıyla nasıl çalışacağını da bilmiyorum.


2
Geçmek grep -cv :0yerine kullanmayı önerebilir miyim wc?
terdon

1
Daha fazla zarafet için başka bir fikir: Sen çağrılmasına bırakabilirsiniz [yazarsanız if who | grep -qv :0; then(bir POSIX uyumlu varsayarak grepGNU grep gibi).
David Foerster

Yanıtlar:


19

Ubuntu 14.10'a kadar (Upstart tabanlı)

“DOSYALAR” bölümünde bir göz atın pm-action(8)ve arayın /etc/pm/sleep.d. Bu komut dosyalarından biri sıfır dışında bir çıkış durumuyla dönerse askıya alma önlenir.

Netlik için güncellenmiş talimatlar:

  1. Yani bir dosya oluşturun /etc/pm/sleep.d/05_ssh_keepawake.

  2. Bu dosyaya bir shebang ( #!/bin/sh) ve soruda belirtilen kodu koyun .

  3. Üzerinde yürütme izinleri ayarlayın:

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

Ubuntu 15.04'ten beri (sistemd tabanlı)

systemd , güç durumu kancalarını yönetmek için pm-utils kullanmaz , ancak aynı amaçla kendi altyapısına sahiptir. Uyku inhibitörü denetleyicileri artık uyku durumunda yürütülmez, ancak uykuyu engelleyen eylemle ayarlanmalıdır (bkz. 1 ).

Bu nedenle, SSH oturum oturum açma ve oturum kapatma işlemine sistemd (örn. Yoluyla systemd-inhibit(1)) ile bir uyku inhibitörü kaydeden ve daha sonra inhibitörü serbest bırakan komutlar eklemeniz gerekir . Birisi SSH giriş ve çıkışına nasıl bağlanacağını biliyorsa, ilgili adımları ve komutları çözebilmemiz için bir yorum veya düzenlemeyi memnuniyetle karşılarım.

Aşağıdaki bölüm devam etmekte - Yalnızca ne yaptığınızı bildiğinizde kullanın!

Seçeneği kullanmaya /etc/systemd/system/ssh-inhibt-sleep.servicebağımlı hale getiren bir systemd birimi yazabilirsiniz . Yeni üniteniz arızalanırsa (çağrıldığı işlemden sıfır olmayan bir çıkış durumu ile), bunu yapar ve böylece sonraki uyku eylemini gerçekleştirir.sleep.targetRequiredBysleep.target

[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

Her zaman olduğu gibi, etkili olabilmeleri için systemd birimlerini etkinleştirmeniz gerekir:

sudo systemctl enable ssh-inhibt-sleep.service

Daha fazla bilgi için bkz. systemd.unit(5)Ve systemd.service(5).


bu 18.04'te işe yaramıyor gibi görünüyor. Bu artık çözüm değil mi?
Michael Jarret

1
@MichaelJarret: Gerçekten. Sorumu systemd ile ilgili bazı bilgilerle güncelledim.
David Foerster

Dün bunu halletmeye çalışırken aşağıdakileri buldum, ancak önceki işi burada
Michael Jarret


1
@MichaelJarret: Deneyebileceğiniz başka bir fikrim vardı. Cevabımın güncellenmesine bakın.
David Foerster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.