Jak zmienić mapowanie klawisza «PowerOff» na klawiaturze?

15

Kupiłem laptopa Asus ROG G551JM, który okazał się kompatybilny z Ubuntu. Klawiatura komputera jest źle zaprojektowana, a klawisz „Poweroff” jest zwykłym klawiszem umieszczonym w miejscu, w którym zwykle znajduje się klawisz „End”. W przeciwnym razie komputer jest w porządku, więc kupiłem go z założeniem, że będę w stanie jakoś „naprawić” problem, tj. Ponownie przypisać przycisk PowerOff do klawisza „End”.

Niepoprawny przycisk PowerOff (ASUS G551JM): ASUS G551JM

Zwykle jest klawisz «End» (ASUS N56VZ): ASUS N56VZ

W „poweroff przycisk” wydarzenia są wytwarzane przez /dev/input/event2: Power Buttonurządzenie (jak donosi evtest) z kodem 116 (przykład linii od evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

Klucz jest również widoczny dla serwera X, a ostatecznie Ubuntu może zidentyfikować naciśnięcia klawiszy jako PowerOffklucz i uruchamia półprzezroczyste okno dialogowe „Pożegnaj użytkownika Adam ...”, które potwierdza moją wolę wyłączenia komputera.

Problem polega na tym, że powiązanie, które wiąże klawisz PowerOff, naciska na procedurę wyświetlającą, że okno dialogowe potwierdzenia nie jest widoczne w edytorze dconf i nie mam żadnej wskazówki, gdzie go znaleźć.

Czy ktoś może mi powiedzieć, gdzie zmienić (lub usunąć) domyślne powiązanie dla klucza PowerOff?

To powinno być coś łatwego.


edycja 21.IX.2016:

Istnieje sposób, aby trwale wyłączyć okno dialogowe, zobacz Jak zmodyfikować opcje przycisku zasilania? . Mam nadzieję, że po wyłączeniu przycisku zasilania możliwe będzie ponowne przypisanie go do czegoś innego.

Adam Ryczkowski
źródło
Czy rozwiązałeś problem? Byłoby bardzo przydatne, jeśli opublikujesz odpowiedź tutaj.
ezze
1
@Ezze Niezupełnie (używam innego komputera z powodu tego problemu). Ale udało mi się trwale wyłączyć okno dialogowe zamykania utworzone po naciśnięciu klawisza. OK, zaktualizuję odpowiedź.
Adam Ryczkowski
Powiązane pytanie dotyczące Unix i Linux StackExchange.
ezze
2
Nienawidzę ASUS-a za usunięcie tego klucza. Homei Endsą to klawisze „meta”, których najczęściej używam ... :(
Matthieu,

Odpowiedzi:

10

Udało mi się uruchomić go na moim ASUS N751JK w Ubuntu 18.04 LTS i Ubuntu 16.04 LTS (przetestowany w środowisku stacjonarnym Unity w obu przypadkach i KDE Plasma w 18.04):

  1. Przede wszystkim ustaw działanie przycisku „Wyłącz” na nothing.

    Jedność

    Jak wspomniano w odpowiedzi Johano Fierry :

    gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
    

    lub alternatywnie sudo apt install dconf-toolsi użyj, dconf-editoraby zmienić org.gnome.settings-daemon.plugins.powerwłaściwość (jak opisano tutaj ). Ponowne uruchomienie lub wylogowanie jest wymagane, aby działało.

    KDE

    Przejdź do „Ustawień systemu” , wybierz zakładkę „Zarządzanie energią” w sekcji „Sprzęt”, a następnie wybierz zakładkę „Oszczędzanie energii” , przewiń w dół, znajdź listę rozwijaną „Po naciśnięciu przycisku zasilania” i zmień jej wartość na „Nie rób nic” . Kliknij przycisk „Zastosuj” , aby zastosować zmiany.

    Oszczędzanie energii

  2. Zainstaluj xdotool :

    sudo apt install xdotool
    

    Ten pozwoli nam uruchomić kluczowe wydarzenia.

  3. Następnym krokiem jest uruchomienie przycisku „End” po naciśnięciu przycisku „Power off” .

    Ubuntu 18.04

    Utwórz /etc/acpi/events/powerplik o następującej treści:

    event=button/power
    action=/etc/acpi/power.sh "%e"
    

    i utwórz /etc/acpi/power.shskrypt o następującej treści:

    #!/bin/sh
    xdotool key End
    

    i dodaj do niego uprawnienia do wykonywania:

    sudo chmod +x /etc/acpi/power.sh
    

    Ubuntu 16.04

    Kopia zapasowa skryptu ACPI używana do obsługi zdarzenia przycisku „Wyłącz” :

    sudo cp /etc/acpi/powerbtn.sh /etc/acpi/powerbtn.sh.backup
    

    Następnie edytuj go, znajdź:

    # If logind is running, it already handles power button presses; desktop
    # environments put inhibitors to logind if they want to handle the key
    # themselves.
    

    i zmodyfikuj poniższy kod, aby wyglądał następująco:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Aby zastosować te zmiany, należy uruchomić:

    sudo acpid restart
    

    Dzięki Adamowi możliwe jest acpidautomatyczne ponowne uruchomienie po zalogowaniu się użytkownika (podczas uruchamiania systemu). Dlatego zamiast ręcznego uruchamiania sudo acpid restartw terminalu za każdym razem po ponownym uruchomieniu dodaj następujący wiersz:

    session optional    pam_exec.so /usr/sbin/acpid restart
    

    do końca /etc/pam.d/common-sessionpliku.

ezze
źródło
Co powiesz na sudo acpid reloadzamiast restartu? Czy to zadziała?
Bajt Dowódca
1
Co rozwiązuje acpid restartproblemu jest dodanie linii session optional pam_exec.so /usr/sbin/acpid restartna końcu /etc/pam.d/common-session. W ten sposób acpid zostanie zrestartowany zaraz po zalogowaniu użytkownika i to mi wystarczy. W końcu problem rozwiązany !!
Adam Ryczkowski,
1
@rtindru, powinieneś gsettings setzamiast gsettings get.
ezze
1
Aby ta funkcja działała w Kubuntu 18.04, musiałem udzielić uprawnień do wykonywania power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, być może możesz zaktualizować swoją odpowiedź, aby to uwzględnić.
LGenzelis,
1
@LGenzelis, dzięki. Zaktualizowałem odpowiedź.
ezze
4

To powinno załatwić sprawę.

Wpisz w terminalu:

gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
Johano Fierra
źródło
2
TAK!!! Ale jest jeszcze jedna rzecz: jak zamapować go na klawisz «end»?
Adam Ryczkowski
1
Wchodzę tutaj na niezbadane terytorium, ale myślę, że możesz po prostu utworzyć konfigurację pliku xmodmap ($ {HOME} /. Xmodmap), a następnie umieścić w nim to: keycode 116 = End lub wpisać w terminalu: xmodmap -e "keycode 116 = End „
Johano Fierra
Niestety to nie pomaga. Wyłącza przechwytywanie przycisku „Wyłącz”, tak jak jest to widoczne w xevpoleceniu, i zapobiega ponownemu xmodmapmapowaniu. Nawiasem mówiąc, kod przycisku „Wyłącz” może być inny (124 dla mojego ASUS N751JK).
ezze
Nie powinno to wyłączać możliwości przechwytywania przycisku ... ale co z tym. Wejdź do terminalu: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(więc naciśnięcie przycisku jest przechwytywane), następnie edytuj /etc/acpi/events/powerbtni skomentuj linię #action=/etc/acpi/powerbtn.sh, a następnie wejdź do terminalu: xmodmap -e "keycode 124 = End"To powinno zapobiec działaniu przycisku zasilania i jednocześnie zmapować go do klawisza End.
Johano Fierra
1
Nie pomaga też, ponieważ zdarzenie „Wyłącz” jest obsługiwane nie tylko przez powerbtn.shskrypt, ale także przez (przynajmniej) systemd-logindusługę (prawdopodobnie korzysta z button-powerustawień wymienionych w odpowiedzi). Możesz znaleźć if pidof systemd-logind >/dev/null; then... exit 0linię, powerbtn.shco oznacza, że ​​skrypt pozwala systemd-logindsamodzielnie obsługiwać zdarzenie „Wyłącz”, gdy sesja pulpitu jest aktywna. Jedno masz rację - zmiana button-powerwartości nie wpływa na zdolność do przechwycenia klucza, ale jest już przechwycona przez jakiś proces ( systemd-logindlub inny).
ezze