Come cambiare il mapping per il tasto «PowerOff» sulla tastiera?


15

Ho comprato il laptop Asus ROG G551JM che si è dimostrato compatibile con Ubuntu. La tastiera del computer è mal progettata con il tasto "Poweroff" come un normale tasto, posizionato nel punto in cui di solito si trova il tasto "Fine". Il computer va bene altrimenti, quindi l'ho comprato supponendo che sarei in grado in qualche modo di "risolvere" il problema, ovvero rimappare il pulsante PowerOff nel tasto "Fine".

Il pulsante PowerOff ha sbagliato (ASUS G551JM): ASUS G551JM

Normalmente esiste un tasto «Fine» (ASUS N56VZ): ASUS N56VZ

Gli eventi pulsante "spegnimento" sono prodotti dal /dev/input/event2: Power Buttondispositivo (come riportato da evtest) con il codice 116 (esempio linea da evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

La chiave è anche visibile al server X, e alla fine Ubuntu può identificare la pressione dei tasti come PowerOffchiave e avvia la finestra di dialogo semitrasparente "Addio utente Adam ..." che conferma la mia volontà di spegnere il computer.

Il problema è che l'associazione che lega il tasto PowerOff preme con la routine che mostra che la finestra di dialogo di conferma non è visibile in dconf-editor e non ho idea di dove trovarla.

Qualcuno può dirmi dove cambiare (o eliminare) l'associazione predefinita per la chiave PowerOff ???

Dovrebbe essere qualcosa di facile.


modifica 21.IX.2016:

C'è un modo per disabilitare definitivamente la finestra di dialogo, vedi Come posso modificare le opzioni per il pulsante di accensione? . Spero che dopo aver disabilitato il pulsante di accensione, sia possibile riassegnarlo a qualcos'altro.


Hai risolto il problema? Sarebbe molto utile se pubblichi una risposta qui.
Ezze,

1
@Ezze Non proprio (sto usando un computer diverso a causa di questo problema). Ma sono riuscito a disattivare definitivamente la finestra di dialogo di spegnimento prodotta dopo aver premuto il tasto. OK, aggiornerò la risposta.
Adam Ryczkowski,

Domanda correlata su Unix e Linux StackExchange.
Ezze,

2
Odio così tanto ASUS per aver rimosso quella chiave. Homee Endsono le chiavi "meta" che uso di più ... :(
Matthieu,

Risposte:


10

Sono stato in grado di farlo funzionare sul mio ASUS N751JK in Ubuntu 18.04 LTS e Ubuntu 16.04 LTS (testato con l'ambiente desktop Unity in entrambi i casi e KDE Plasma in 18.04):

  1. Prima di tutto, imposta l'azione del pulsante "Spegni" su nothing.

    Unità

    Come menzionato nella risposta di Johano Fierra :

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

    o in alternativa sudo apt install dconf-toolse utilizzare dconf-editorper modificare la org.gnome.settings-daemon.plugins.powerproprietà (come descritto qui ). È necessario riavviare o disconnettersi per farlo funzionare.

    KDE

    Vai su "Impostazioni di sistema" , seleziona la scheda "Risparmio energia" nella sezione "Hardware" , quindi seleziona la scheda "Risparmio energia" , scorri verso il basso, trova l' elenco a discesa "Quando viene premuto il pulsante di accensione" e cambia il suo valore in "Non fare nulla" . Fai clic su "Applica" pulsante per rendere effettive le modifiche.

    Risparmio energetico

  2. Installare xdotool :

    sudo apt install xdotool
    

    Questo ci consentirà di attivare eventi chiave.

  3. Il prossimo passo è attivare "Fine" tasto premere il tasto "Spegnimento" .

    Ubuntu 18.04

    Creare un /etc/acpi/events/powerfile con i seguenti contenuti:

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

    e creare /etc/acpi/power.sh script con i seguenti contenuti:

    #!/bin/sh
    xdotool key End
    

    e aggiungere i permessi di esecuzione ad esso:

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

    Ubuntu 16.04

    Script ACPI di backup utilizzato per gestire l'evento del pulsante "Spegni" :

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

    Quindi modificalo, trova quanto segue:

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

    e modifica il codice seguente in modo che assomigli a:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Per applicare queste modifiche è necessario eseguire:

    sudo acpid restart
    

    Grazie ad Adam è possibile riavviare acpidautomaticamente quando un utente accede (all'avvio del sistema). Quindi, al posto del manuale sudo acpid restartnel terminale ogni volta dopo il riavvio, aggiungere la seguente riga:

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

    fino alla fine del /etc/pam.d/common-sessionfile.


Che dire sudo acpid reloadinvece di riavviare? Funzionerebbe?
Byte Commander

1
Ciò che risolve il acpid restartproblema è aggiungere una riga session optional pam_exec.so /usr/sbin/acpid restartalla fine di /etc/pam.d/common-session. In questo modo acpid verrà riavviato subito dopo l'accesso dell'utente e questo è sufficiente per me. Finalmente risolto il problema !!
Adam Ryczkowski il

1
@rtindru, dovresti gsettings setinvece di gsettings get.
Ezze,

1
Per farlo funzionare in Kubuntu 18.04, ho dovuto dare i permessi di esecuzione a power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, forse potresti aggiornare la tua risposta per includerlo.
LGenzelis,

1
@LGenzelis, grazie. Aggiornato la risposta.
Ezze,

4

Questo dovrebbe fare il trucco.

Entra nel terminal:

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

2
SÌ!!! Ma poi c'è un'altra cosa: come mapparlo nel tasto «fine»?
Adam Ryczkowski il

1
Inserendo qui un territorio inesplorato, ma penso che potresti semplicemente creare una configurazione di file xmodmap ($ {HOME} /. Xmodmap) e inserirla qui: keycode 116 = End , oppure inserire nel terminale: xmodmap -e "keycode 116 = End "
Johano Fierra,

Sfortunatamente, non aiuta. Disabilita la cattura del pulsante "Spegni" come visto dal xevcomando e impedisce xmodmapdi rimappare. A proposito, il codice tasto del pulsante "Spegni" potrebbe essere diverso (124 per il mio ASUS N751JK).
Ezze,

Non dovrebbe disabilitare la possibilità di catturare il pulsante ... ma che ne dici. Inserisci nel terminale: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(quindi premendo il pulsante viene acquisito), quindi modifica /etc/acpi/events/powerbtne commenta la linea #action=/etc/acpi/powerbtn.sh, quindi entra nel terminale: xmodmap -e "keycode 124 = End"questo dovrebbe impedire al pulsante di accensione di fare qualsiasi cosa e allo stesso tempo mapparlo sul tasto Fine.
Johano Fierra,

1
Non aiuta troppo perché l'evento "Spegni" è gestito non solo dallo powerbtn.shscript ma anche dal systemd-logindservizio ( almeno) (probabilmente, utilizza le button-powerimpostazioni menzionate nella risposta). È possibile trovare if pidof systemd-logind >/dev/null; then... exit 0riga in powerbtn.shcui significa che lo script consente systemd-loginddi gestire l'evento "Spegni" da solo quando la sessione desktop è attiva. Una cosa su cui hai ragione: la modifica del button-powervalore non influisce sulla capacità di acquisire la chiave ma è già acquisita da un processo ( systemd-logindo altro).
Ezze,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.