Como alterar o mapeamento da tecla «PowerOff» no teclado?

15

Comprei o laptop ROG G551JM Asus, que provou ser compatível com o Ubuntu. O teclado do computador é mal projetado, com a tecla "Poweroff" sendo uma tecla comum, colocada no local, onde geralmente se encontra a tecla "End". Caso contrário, o computador está bom, então eu o comprei com a suposição de que seria capaz de "corrigir" o problema, ou seja, remapear o botão PowerOff na tecla "Finalizar".

O botão PowerOff cometeu um erro (ASUS G551JM): ASUS G551JM

Normalmente, existe uma tecla «Fim» (ASUS N56VZ): ASUS N56VZ

Os "Poweroff" eventos de botão são produzidos pelo /dev/input/event2: Power Buttondispositivo (como relatado por evtest) com código 116 (exemplo de linha evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

A chave também é visível para o servidor X e, finalmente, o Ubuntu pode identificar as teclas pressionadas como uma PowerOfftecla e inicia a caixa de diálogo semitransparente "Adeus usuário Adam ..." que confirma minha vontade de desligar o computador.

O problema é que a ligação que liga a tecla PowerOff pressiona com a rotina que exibe que a caixa de diálogo de confirmação não é visível no dconf-editor e não tenho idéia de onde encontrá-la.

Alguém pode me dizer, onde alterar (ou excluir) a ligação padrão da chave PowerOff ???

Deve ser algo fácil.


editar 21.IX.2016:

Existe uma maneira de desativar permanentemente a caixa de diálogo, consulte Como modificar as opções do botão liga / desliga? . Espero que, depois de desativar o botão liga / desliga, seja possível atribuí-lo novamente a outra coisa.

Adam Ryczkowski
fonte
Você resolveu o problema? Seria muito útil se você postar uma resposta aqui.
Ezze
11
@ Ezze Na verdade não (eu estou usando um computador diferente por causa deste problema). Mas consegui desabilitar permanentemente a caixa de diálogo de desligamento produzida após pressionar a tecla. OK, vou atualizar a resposta.
Adam Ryczkowski
Pergunta relacionada no Unix e Linux StackExchange.
Ezze
2
Eu odeio tanto a ASUS por remover essa chave. Homee Endsão as teclas "meta" que eu mais uso ... :(
Matthieu

Respostas:

10

Consegui fazê-lo funcionar no meu ASUS N751JK no Ubuntu 18.04 LTS e Ubuntu 16.04 LTS (testado com o ambiente de desktop Unity nos dois casos e com o KDE Plasma no 18.04):

  1. Primeiro, defina a ação do botão "Desligar" para nothing.

    Unidade

    Como mencionado na resposta de Johano Fierra :

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

    ou alternativamente, sudo apt install dconf-toolse use dconf-editorpara alterar a org.gnome.settings-daemon.plugins.powerpropriedade (como descrito aqui ). É necessário reiniciar ou fazer logout para fazê-lo funcionar.

    KDE

    Vá para "Configurações do sistema" , selecione a guia "Gerenciamento de energia" na seção "Hardware" e selecione a guia "Economia de energia" , role para baixo, localize a lista suspensa "Quando o botão liga / desliga pressiona" e altera seu valor para "Não fazer nada" . Clique no botão "Aplicar" para que as alterações tenham efeito.

    Economia de energia

  2. Instale o xdotool :

    sudo apt install xdotool
    

    Este nos permitirá acionar os principais eventos.

  3. O próximo passo é acionar a tecla "Finalizar" pressionando a tecla "Desligar" .

    Ubuntu 18.04

    Crie um /etc/acpi/events/powerarquivo com o seguinte conteúdo:

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

    e crie um /etc/acpi/power.shscript com o seguinte conteúdo:

    #!/bin/sh
    xdotool key End
    

    e adicione permissões de execução a ele:

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

    Ubuntu 16.04

    Script ACPI de backup usado para manipular o evento do botão "Desligar" :

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

    Em seguida, edite-o e encontre o seguinte:

    # 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 modifique o código abaixo para que fique assim:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Para aplicar essas alterações, deve-se executar:

    sudo acpid restart
    

    Graças a Adam , é possível reiniciar acpidautomaticamente quando um usuário faz login (na inicialização do sistema). Portanto, em vez de manual sudo acpid restartno terminal sempre que após a reinicialização, adicione a seguinte linha:

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

    até o final do /etc/pam.d/common-sessionarquivo.

Ezze
fonte
Que tal em sudo acpid reloadvez de reiniciar? Isso funcionaria?
Byte Commander
11
O que resolve o acpid restartproblema é adicionar uma linha session optional pam_exec.so /usr/sbin/acpid restartno final de /etc/pam.d/common-session. Dessa forma, o acpid será reiniciado logo após o login do usuário e isso é suficiente para mim. Problema resolvido finalmente !!
Adam Ryczkowski 4/12/16
11
@ Rindindru, você deve, em gsettings setvez de gsettings get.
Ezze
11
Para fazer isso funcionar no Kubuntu 18.04, tive que dar permissões de execução ao power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, talvez você possa atualizar sua resposta para incluir isso.
LGenzelis 12/03/19
11
@LGenzelis, obrigado. Atualizado a resposta.
Ezze
4

Isso deve fazer o truque.

Entre no terminal:

gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
Johano Fierra
fonte
2
SIM!!! Mas há outra coisa: como mapeá-lo para a chave «fim»?
Adam Ryczkowski
11
Entrando em território não mapeado aqui, mas acho que você pode simplesmente criar uma configuração de arquivo xmodmap ($ {HOME} /. Xmodmap) e depois colocar isso: keycode 116 = End , ou digite o terminal: xmodmap -e "keycode 116 = End "
Johano Fierra
Infelizmente, isso não ajuda. Desativa a captura do botão "Desligar" como visto por xevcomando e evita xmodmapremapear. A propósito, o código da tecla "Desligar" pode ser diferente (124 para o meu ASUS N751JK).
Ezze
Não deve desativar a capacidade de capturar o botão ... mas e quanto a isso. Entre no terminal: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(pressionando o botão é capturado), edite /etc/acpi/events/powerbtne comente a linha #action=/etc/acpi/powerbtn.she entre no terminal: xmodmap -e "keycode 124 = End"Isso deve impedir o botão liga / desliga de fazer qualquer coisa e, ao mesmo tempo, mapeá-lo para a tecla Encerrar.
Johano Fierra 22/09
11
Isso também não ajuda, porque o evento "Desligar" é tratado não apenas pelo powerbtn.shscript, mas também pelo (pelo menos) systemd-logindserviço (provavelmente, ele usa a button-powerconfiguração mencionada na sua resposta). Você pode encontrar if pidof systemd-logind >/dev/null; then... exit 0linha na powerbtn.shqual o script permite systemd-logindmanipular o evento "Desligar" sozinho quando a sessão da área de trabalho está ativa. Uma coisa que você tem razão: alterar o button-powervalor não afeta a capacidade de capturar a chave, mas ela já é capturada por algum processo ( systemd-logindou outro).
Ezze