Jak ustawić przycisk zasilania, aby wyłączał się zamiast zawieszać?

17

Używam GNOME 3.18.1 na Arch Linux 4.2.5-1-ARCH x86_64 na laptopie Dell E6530. Od czasu zainstalowania tego systemu operacyjnego wiele lat temu przycisk zasilania na moim laptopie zawsze doprowadzał mój system do całkowitego wyłączenia.

Jednak w ciągu ostatnich kilku tygodni to zachowanie się zmieniło, dlatego naciśnięcie przycisku zasilania przełącza teraz mój laptop w tryb oszczędzania energii. Nie zmieniłem ustawień mocy. Zawsze pacman -Syyujednak aktualizuję swój system , więc podejrzewam, że aktualizacja zmieniła tę funkcjonalność.

W ustawieniach mocy nie ma takiej opcji.

Jak mogę przywrócić początkowe zachowanie, aby naciśnięcie tego przycisku wyłączało system?

Konrad Höffner
źródło
2
@Konrad Drugim krokiem może być sprawdzenie, czy winowajcą jest Gnome. To jest założenie. Jeśli spróbujesz zmienić powłoki, możesz się czegoś nauczyć. Czy możesz również wymienić kroki, które podjąłeś w celu debugowania tego problemu?
Sarah Weinberger,
1
Co się zmieniło? Czy coś zaktualizowałeś? Z jakiego systemu operacyjnego (w tym wersji) korzystasz? Na jakim sprzęcie? Co biegłeś, kiedy to działało?
Gilles „SO- przestań być zły”
Przepraszamy za brakujące informacje, zaktualizowałem swój post.
Konrad Höffner,

Odpowiedzi:

16

Jest to spowodowane najnowszymi gnome-settings-daemonaktualizacjami ...
Nie ma takiej opcji w ustawieniach zasilania, ponieważ została ona usunięta przez twórców GNOME ( shutdown/power offakcja jest uważana za „zbyt destrukcyjną” ).
Podsumowując: nie można już wyłączyć laptopa, naciskając przycisk wyłączania .


Możesz jednak dodać nową dconf/ gsettingsopcję (tj. shutdown) Do wtyczki zasilania demona ustawień, jeśli chcesz załatać i odbudować gnome-settings-daemon:

--- gnome-settings-daemon-3.18.2/data/gsd-enums.h   2015-11-10 09:07:12.000000000 -0500
+++ gnome-settings-daemon-3.18.2/data/gsd-enums.h   2015-11-11 18:43:43.240794875 -0500
@@ -114,7 +114,8 @@
 {
   GSD_POWER_BUTTON_ACTION_NOTHING,
   GSD_POWER_BUTTON_ACTION_SUSPEND,
-  GSD_POWER_BUTTON_ACTION_HIBERNATE
+  GSD_POWER_BUTTON_ACTION_HIBERNATE,
+  GSD_POWER_BUTTON_ACTION_SHUTDOWN
 } GsdPowerButtonActionType;

 typedef enum
--- gnome-settings-daemon-3.18.2/plugins/media-keys/gsd-media-keys-manager.c    2015-11-10 09:07:12.000000000 -0500
+++ gnome-settings-daemon-3.18.2/plugins/media-keys/gsd-media-keys-manager.c    2015-11-11 18:47:52.388602012 -0500
@@ -1849,6 +1849,9 @@

         action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
         switch (action_type) {
+        case GSD_POWER_BUTTON_ACTION_SHUTDOWN:
+                do_config_power_action (manager, GSD_POWER_ACTION_SHUTDOWN, in_lock_screen);
+                break;
         case GSD_POWER_BUTTON_ACTION_SUSPEND:
                 do_config_power_action (manager, GSD_POWER_ACTION_SUSPEND, in_lock_screen);
                 break;

Po zainstalowaniu poprawionej wersji shutdownbędzie dostępna nowa opcja w dconf-editorobszarze org> gnome> demon ustawień> wtyczki> moc> działanie przycisku zasilania :

wprowadź opis zdjęcia tutaj

więc wybierz to, aby wyłączyć za pomocą przycisku zasilania lub, jeśli wolisz CLI, uruchom terminal:

gsettings set org.gnome.settings-daemon.plugins.power power-button-action shutdown

Oczywiście, aby powyższe działało, potrzebujesz również odpowiednich ustawień w /etc/systemd/logind.conf:

HandlePowerKey=poweroff
PowerKeyIgnoreInhibited=yes

Pamiętaj, że naciśnięcie przycisku zasilania spowoduje wyłączenie systemu bez ostrzeżenia.

don_crissti
źródło
6
To bardzo rozczarowujące, zawsze myślałem, że Linux to system operacyjny, w którym użytkownik decyduje, czego chce, nawet jeśli jest to niebezpieczne. Ale dziękuję bardzo za odkrycie tego, przynajmniej nie tracę wtedy czasu na poszukiwanie nieistniejącej poprawki.
Konrad Höffner,
Dziękuję bardzo za szczegółowe rozwiązanie. Pomimo posiadania gnome-settings-daemon 3.18.2-1, moja instalacja ma inne pliki, jednak: gsd-enums.hznajduje się w folderze /usr/include/gnome-settings-daemon-3.0/gnome-settings-daemon/i w gsd-media-keys-manager.cogóle nie istnieje.
Konrad Höffner,
Dev wycofał swoją decyzję i przywrócił opcję interaktywną w gnome-settings-daemon 3.20 . (Myślę. Nie zaktualizowałem jeszcze tej wersji.)
idbrii 20.09.16
1
@idbrii - cóż, mam dla ciebie złe wieści: korzystam z wersji 3.22 i nie ma opcji wyłączenia.
don_crissti,
6

Jak wyjaśnił @don_crissti, sytuacja jest głupia, ponieważ tak naprawdę nie można po prostu zamknąć bez potwierdzenia przy użyciu normalnych ustawień.

Istnieje jednak obejście: jeśli typ podwozia maszyny jest ustawiony na „vm” (maszyna wirtualna), stare zachowanie natychmiastowego zamknięcia przejmie wszelkie ustawienia. Po prostu wpisz jako root:

hostnamectl set-chassis vm

i uruchom ponownie raz. Nie znam żadnych skutków ubocznych tych ustawień.

Lorenzo Pistone
źródło
1
Mam ten problem, a następnie przycisku zasilania przez dłuższy czas linku Nasza aplikacja posiada keyboardless / konfigurację mouseless „widok tylko” tryb, który musi zostać wyłączony przez personel nietechniczny co noc. Gdy utracono możliwość wyłączenia za pomocą przycisku zasilania, musieliby po prostu wyciągnąć wtyczkę. To rozwiązanie działa świetnie dla nas i jest dla nas zdecydowanie najłatwiejszym rozwiązaniem.
MikeV
4

W Ubuntu 18.04 lub podobnego systemu Linux warianty z ACPI (jeśli nie prawdopodobnie można zainstalować), należy plik o nazwie /etc/acpi/events/powerz

sudo nano /etc/acpi/events/power

i umieścić

event=button/power
action=/sbin/poweroff

następnie zamknij plik

sudo service acpid restart

Jest to prawdopodobnie najprostsze rozwiązanie, które zdecydowanie działa.

Seungmin Kim
źródło
1
To rozwiązanie działa świetnie w mojej sytuacji: serwer Ubuntu 18.04 z zainstalowanym gnome-desktop oraz w trybie bezgłowym (nie jest konieczne, gdy podłączony jest monitor). Dzięki !
M-Jack
3

Alternatywnie możesz otworzyć okno ustawień klawiatury i przypisać niestandardowy skrót klawiaturowy do polecenia gnome-session-quit --power-off, co spowoduje wyświetlenie menu zamykania. Mam go do uruchomienia przez Super+ q.

joelostblom
źródło
2

Pierwszym krokiem jest upewnienie się, że Ustawienia | Zasilanie (przy założeniu Gnome v3) „Suspend & Power Off” / „Automatic Suspend” jest wyłączone. Zasadniczo wyłącz funkcje ustawień zasilania GNOME i po prostu pozwól systemowi przejąć kontrolę.

Sarah Weinberger
źródło
0

Niestandardowy skrót klawiaturowy działa, ustawiłem go gnome-session-quit --power-off --force, naciskając tylko przycisk zasilania, co jest wszystkim, czego chciałem.

xxx
źródło
1
Naprawdę? Dla mnie to nie działa. Przycisk nadal zachowuje się zgodnie z power-button-actionopcją. Mogę jednak ustawić Ctrl+PowerOffjako klawisz skrótu.
Alexey,
Ten sam problem dla mnie. @Alexey
Konrad Höffner,
0

Znalazłem inną opcję, aby to zrobić na Debian Stretch. Zainstalowałem pakiet acpi-support-basei edytowałem plik, /etc/acpi/powerbtn-acpi-support.shdodając następujące wiersze po komentarzu nagłówka i przed jakimkolwiek kodem.

## Bypass logic to force shutdown on power button
/sbin/shutdown -h -P now "Power button pressed"
exit 0

To trochę tępy instrument, ale działa dla mnie na komputerze i powinien działać na laptopie. Pomija także ustawienia Gnome3, ale jest łatwiejszy niż łatanie Gnome i ponowna kompilacja.

Według strony Arch Wiki na acpidten temat można prawdopodobnie zaimplementować modyfikując /etc/acpi/handler.shArch.

HankB
źródło
0

Obejrzałem ten problem na moim serwerze, monitorując dane wyjściowe dziennika w celu systemd-logindudoskonalenia rozwiązań przedstawionych w innych odpowiedziach.

To obejście wymaga dwóch plików. Skrypt, który wyzwala rzeczywiste zdarzenie zamknięcia

$ cat /usr/local/bin/shutdown_button_monitor.sh
#!/bin/sh

# ansible managed

# systemd-logind prints a line of the form 
# Dez 21 11:12:10 box03.yeepa.de systemd-logind[748]: Power key pressed.
# on key press, but doesn't handle the button because gnome3 blocks systemd from doing so.
# See `systemd-inhibit` for that.

# first sleep a minute so we have chance to disable this scritp if it runs amok
sleep 1m

# so we workaround gnome a bit here.
journalctl -u systemd-logind --follow --lines=0 | \
while read line ; do
    if echo "$line" | grep --quiet 'Power key pressed'
    then
        systemctl poweroff
    fi
done

oraz plik usługi, który go uruchamia / uruchamia ponownie

$ cat /etc/systemd/system/shutdown_button_monitor.service
# ansible managed

[Unit]
Description=Power off the machine if the power button is pressed
# Workaround for gnomes block of the shutdown button
# /unix/242129/gnome-3-how-to-set-power-button-to-shutdown-instead-of-suspend#242452
# Monitor these blocks yourself with `systemd-inhibit`

[Service]
User=root
ExecStart=/usr/local/bin/shutdown_button_monitor.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
dwt
źródło