Przycisk power ma nie zamykać systemu - Linux.

26 października, 2008

Zdarza się, że przypadkowe naciśnięcie przycisku power powoduje restart komputera. Szczególnie w laptopie przyciski te są na wierzchu, widoczne, a na dodatek w innym kolorze, co przyciąga dzieci i skłania je do interakcji (jeśli kiedykolwiek ktokolwiek będzie chciał wysadzić pół Europy, to wystarczy zaopatrzyć stosowną walizeczkę nuklearną w czerwony przycisk z napisem "nie dotykać" i zostawić milusińskiego sam na sam z tą walizką na kilkanaście minut...). Zabezpieczenie się przed tym w przypadku Linuksa jest bardzo proste...

Za obsługę zdarzeń ACPI w Debianie odpowiada acpid/, a pliki odpowiedzialne za obsługę poszczególnych zdarzeń znajdują się w katalogu /etc/acpi - czyli tradycyjnie.

Za zdarzenie naciśnięcia przycisku power odpowiedzialny jest skrypt /etc/acpi/powerbtn.sh. W przypadku, kiedy nie mamy zainstalowanego powersaved (nie mam), wystarczy prosta modyfikacja:

# If powersaved is running, let it process the acpi event
if pidof powersaved; then
    exit 0
fi

zmieniamy na:

# If powersaved is running, let it process the acpi event
if pidof powersaved; then
    exit 0
else
    logger "power button pressed - ignored on demand"
    exit 0
fi

Dzięki temu skrypt wrzuci do sysloga informację, że ktoś próbował wciskać power (do celów statystycznych oczywiście) i zakończy działanie.

Oczywiście w ten sposób tracimy możliwość awaryjnego restartu/wyłączenia systemu (TBH nie pamiętam, kiedy jej ostatnio potrzebowałem). Dłuższe przytrzymanie power w celu wyłączenia powinno działać (przetestuję niebawem), ale wypadałoby mieć jakąś alternatywę na "grzeczne" zamknięcie systemu.

Pierwsza metoda to ctrl-alt-del (o ile mamy aktywną obsługę tego). Druga to użycie Magic Key (oczywiście też o ile mamy aktywną obsługę...). "Grzeczny" reboot to (na podstawie powyższej strony):

  • Alt+SysRQ+e (wysłanie sygnału TERM, procesy mogą się poprawnie zamknąć)
  • Alt+SysRQ+u (zamontowanie zasobów w trybie tylko do odczytu)
  • Alt+SysRQ+i (zabicie procesów, które nie zareagowały na sygnał TERM - odpowiednik kill -9)
  • Alt+SysRQ+b (reboot)

Jeśli ktoś ma inne pomysły na zabezpieczenie systemu przed dziećmi i/lub informacje nt. wyłączenia obsługi przycisku power w przypadku korzystania z powersaved - proszę o informacje.

UPDATE: Z wielce irytujących rzeczy jest zabawa przez dziecię klawiszem Caps lock. Rozwiązanie (za tą stroną):

xmodmap -e "remove lock = Caps_Lock"

Entera na razie nie wyłączam... ;)

1. jam łasica napisał(a):
26 października 2008, 09:31:06

Po wciśnięciu przycisku power, mógłby się rozlegać jakiś głośny nieprzyjemny dźwięk. Wtedy dziecko rozpłacze się i ucieknie :P

2. Jazz napisał(a):
26 października 2008, 09:55:13

Kolega „jam łasica” chyba niedzieciaty. Moja córka jakoś tak tuż po skończeniu roku miała zabawę polegającą na podgłaszaniu wieży na maxa i przylatywaniu do mnie, żebym ściszył i tak przez pół godziny.

3. rozie napisał(a):
26 października 2008, 10:10:25

Dokładnie. Jest spora szansa, że się spodoba i dopiero dramat będzie…

4. Jakub Klawiter napisał(a):
26 października 2008, 10:25:57

Hmmm IMO...
1. Jak nacisnąć PowerBttn to wywala się dialog z pytaniem czy zamknąć system, można kliknąć Anuluj i wtedy plan szczwanej bestii spalony

2. Nie wiem jak u Was, ale mój hacker zostawiony sam na sam z komputerem ma gdzieś wciskanie power buttonów, jest zbyt zajęty wyrywaniem klawiszy z klawiatury …

5. RedHand napisał(a):
26 października 2008, 11:07:07

Rozie jak zwykle lubi „ułatwiać” sobie życie. Nie proście wyklikać to w ustawieniach zarządzania zasilaniem w środowisku graficznym? Ja akurat mam Gnoma i tam mogę sobie z rozwijanej listy ustawić co chcę aby się działo po kliknięciu powera… Ale wiem… Lubię sobie uprzykrzać życie klikaniem myszką.

:-)

6. kayo napisał(a):
26 października 2008, 11:12:30

Kajtek zamiast wciskać Power woli zalogować się i oglądać Bolka i Lolka na YT;-)
http://kayo.jogger.pl/2008/09/27/kajtek-i-debian-lenny/

7. rozie napisał(a):
26 października 2008, 11:17:06

Jakub Klawiter: Bez problemu można podpiąć tę akcję, co przy kliknięciu KDE-owego „zamknij”, tym bardziej, że nawet wykrywanie uruchomienia trybu graficznego jest w skrypcie (niżej, nie wklejałem tego fragmentu).

RedHand: W KDE (3.5) nie ma/nie widzę/nie działa. Niestety. Poza tym, takie rozwiązanie jest uniwersalne. ;)

8. Livio napisał(a):
26 października 2008, 12:42:45

O, a w GNOME jest opcja w „kaplecie” zasilania „kiedy został wciśnięty klawisz zasilania” :) .

Nazwa paskudna, no, ale opcja jest i działa ^^ .

9. D4rky napisał(a):
26 października 2008, 13:17:34

rozie demand -> rozie’s demand

A tak w ogóle to interesujące podejście do problemu, ale jeśli dziecko przytrzyma przycisk to jest większy ból :P

Co do MagicSysRQ – najpopularniejsze jest Alt+SysRQ+R-E-I-S-U-B
R – przestawienie klawiatury na tryb domyślny (przydatne jeśli masz np włączonego DVORAKa)
E – prosi procesy o wyłączenie
I – prosi BEJZBOLEM procesy o wyłączenie
S – synchronizuje dyski
U – przemontowuje w trybie ro (wtedy też robi sync, ale lepiej mieć pewność)
B – reboot.

Zamiast B można jeszcze O, wtedy nie zrestartuje, a wyłączy.

10. rozie napisał(a):
26 października 2008, 18:36:44

D4rky: Dzięki. I „ignoring” powinno być. Wywalam „rozie” – nieprzenośne. ;)
Jakby miało przytrzymać, to zdążę zareagować. Naciśnięcie drastycznie taką możliwość reakcji ogranicza. ;)
Co do sysrq – wystarczą te podane. Sync jest robiony i tak…