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:
- Como desativo o touchpad quando a tampa é torcida ou fechada?
- O computador portátil Ubuntu 17.10 não suspende na tampa perto
- A bateria descarrega mesmo após o desligamento
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.
-
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
-
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
-
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
-
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 exemplomy_rbt
. Para este propósito, devemos usar o comandovisudo -f
:sudo visudo -f /etc/sudoers.d/my_rbt
O conteúdo do arquivo deve ser:
ALL ALL=NOPASSWD: /usr/local/bin/my_rbt
-
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
-
-
Clique em
Disabled
na coluna da direita e pressione o botão discutido.
É isso.