Um novo uso para a chave de recuperação onekey da Lenovo

7

Eu tenho um laptop Lenovo G570 com uma pequena chave chamada recuperação onekey ao lado do botão liga / desliga, e desde que chegou ao Linux, ele se tornou inútil.

Existe uma maneira de transformar essa chave em um botão de redefinição, por exemplo? Ou para adicionar uma entrada no Grub para carregar as opções de recuperação?

Eu vi posts parecidos aqui, mas eu não tenho janelas ou um dual boot, meu disco é uma única partição de disco com o Ubuntu Gnome instalado, eu nem tenho espaço SWAP.

    
por Muaad ElSharif 19.04.2017 / 12:55

2 respostas

6

Eu não tenho idéia de como usar este botão com o GRUB, mas existem pelo menos duas abordagens para torná-lo utilizável no Ubuntu. Por exemplo, se você quiser vincular o comando reboot a esse botão, poderá: (1) criar evento acpi ou (2) criar atalho personalizado .

Crie acpi event e ligue o comando reboot a ele

Primeiro, você precisa usar acpi_listen e capturar o evento quando o botão for pressionado. Apenas execute o comando acpi_listen e pressione o botão:

$ acpi_listen 
button/prog1 PROG1 00000080 00000000 K
  • No exemplo acima, button/prog1 PROG1 00000080 00000000 K é o evento em meu sistema quando pressiono o botão discutido.

Então você deve criar um arquivo que manipule este evento. O arquivo deve estar localizado no diretório /etc/acpi/events/ . Chame por exemplo reboot . O conteúdo de /etc/acpi/events/reboot deve ser semelhante como:

# /etc/acpi/events/reboot
# This will reboot the system
event=button/prog1 PROG1 00000080 00000000 K
action=systemctl reboot

Salve o arquivo e reinicie o daemon do acpi:

sudo systemctl restart acpid.service

IMO este é o método mais simples. Isso deve funcionar também quando o usuário não está logado. Aqui estão algumas referências onde você pode encontrar informações adicionais e exemplos:

Crie acpi event e ligue um script a ele

Podemos adicionar um seguro caso você pressione o botão acidentalmente. Aqui, criaremos um script que usará um arquivo tmp como sinalizador e contador, conforme descrito aqui . Assim, a reinicialização do sistema será realizada quando você pressionar o botão três vezes.

  1. Modifique /etc/acpi/events/reboot desta forma:

    # /etc/acpi/events/reboot
    # This will reboot the system
    event=button/prog1 PROG1 00000080 00000000 K
    action=/etc/acpi/reboot.sh
    

    Reinicie o daemon do acpi:

    sudo systemctl restart acpid.service
    
  2. Crie o script /etc/acpi/reboot.sh e coloque as seguintes linhas como conteúdo:

    #!/bin/bash  
    FLAG_FILE="/tmp/sysyem_reboot_flag"
    
    # If the file exists and it is older than 30 seconds, then reset the counter 
    # Else If the file doesn't exist or its 'value' is less than 2, then increment
    # Else (when the file exists, its value is equal or greater than 2, and its age is less than 30 seconds) reboot the system 
    
    if [ -f "${FLAG_FILE}" ] && [[ $(find "${FLAG_FILE}" -newermt '-30 sec') == '' ]]; then
        echo '1' > "$FLAG_FILE"
    elif [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
        touch "$FLAG_FILE"
        NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
    else
        systemctl reboot
    fi
    

    Torne-o executável:

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

Agora, o comando systemctl reboot será executado quando você pressionar o botão três vezes, dentro de 30 segundos.

Crie custom shortcut e ligue um script a ele

  1. Agrupa um script /usr/local/bin/my_rbt (pode ser nomeado e localizado sempre que quiser) e torná-lo executável. Aqui está uma única linha de comando que faz isso:

    $ echo -e '#!/bin/sh\nsudo systemctl reboot' | sudo tee /usr/local/bin/my_rbt && sudo chmod +x /usr/local/bin/my_rbt
    #!/bin/sh
    systemctl reboot
    
  2. O problema é que (dentro dessa abordagem) devemos usar sudo para executar o script e permitir que os usuários façam isso sem senha - aqui são fornecidos mais detalhes sobre esta etapa: Como executo comandos específicos do sudo sem uma senha? deve criar um arquivo localizado em /etc/sudoers.d/ , chamado por exemplo my_rbt . Para este propósito, devemos usar o comando visudo -f :

    sudo visudo -f /etc/sudoers.d/my_rbt
    

    O conteúdo do arquivo deve ser:

    ALL ALL=NOPASSWD: /usr/local/bin/my_rbt
    
  3. Vá para Configurações do sistema Teclado Atalhos (guia) → Atalhos personalizados (seção) → Adicionar novo + .

    • No tipo de janela Atalho personalizado :

    • Nome : reboot

    • Comando : sudo /usr/local/bin/my_rbt
    • Clique em Aplicar
  4. Clique em Disabled na coluna da direita e pressione o botão discutido.

É isso.

    
por pa4080 01.02.2018 / 09:36
2

Parece que para laptops da Lenovo (pelo menos meu G575) a chave OneKey Recovery é outra chave.

Usando o comando xev , você pode descobrir o scancode. xev abrirá uma janela com um quadrado preto, mova o mouse para dentro dela e pressione a tecla OKR.

KeyPress event, serial 51, synthetic NO, window 0x1600001,
    root 0x497, subw 0x1600002, time 1092364, (50,41), root:(52,479),
    state 0x0, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 51, synthetic NO, window 0x1600001,
    root 0x497, subw 0x1600002, time 1092364, (50,41), root:(52,479),
    state 0x0, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Você pode ver o código como keycode 156 .

Depois de encontrar o código-chave, tudo o que você precisa pesquisar é como mapear um código-chave para uma ação específica. Veja algumas perguntas úteis:

por Mark Yisri 19.04.2017 / 13:01