Como eu adiciono comandos sudo a um atalho de teclado?

6

Eu sou novo no Linux, então tenha paciência comigo. Eu estou executando o Ubuntu 16.04 em um laptop Sony Vaio, que possui uma luz de fundo do teclado. Eu posso inserir este comando no terminal, colocando um "0" no lugar de *value* para desligar a luz de fundo e um "2" para ligá-lo.

sudo su -c "echo *value* > /sys/devices/platform/sony-laptop/kbd_backlight"

Quando eu fui para o aplicativo de configurações para criar um atalho de teclado personalizado e ligá-lo a uma simples tecla de atalho ctrl, ele não funciona. Qualquer ajuda seria muito apreciada.

    
por Jason 07.09.2016 / 04:15

1 resposta

4

Você tem três opções. Escolha o um deles que você mais gosta:

  • Instale o pacote gksu se ainda não o tiver feito e use gksudo para obter um pop-up de diálogo de entrada de senha da GUI em vez de ser solicitado no terminal como sudo (que não está presente quando você o executa como atalho de teclado e, portanto, não funciona).

    sudo apt install gksu
    

    O comando que você precisa vincular ao seu atalho seria este:

    gksudo -- bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • Use pkexec em vez de sudo . Ele funciona de forma semelhante a gksudo e deve ser pré-instalado, mas só funciona para comandos de terminal. Se você quiser executar um aplicativo de GUI como root, ele precisará de uma configuração especial. Mas, para o seu comando, seria suficiente.

    O comando que você precisa vincular ao seu atalho seria este:

    pkexec bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • Escreva um script curto para alterar o brilho e, em seguida, configure a opção sudo do NOPASSWD para que você possa executá-lo como root sem ser solicitada uma senha.

    Questão relevante: Como executo comandos sudo específicos sem uma senha?

    Veja o que você precisa fazer no seu caso específico:

    1. Escreva um arquivo de script que contenha todos os comandos necessários para alcançar o que você deseja que será executado como root:

      #!/bin/bash
      if test "$(id -u)" -ne 0 ; then
          sudo "$0" "$1"
          exit $?
      fi
      
      if test "$1" -gt 0 ; then
          echo "$1" > /sys/devices/platform/sony-laptop/kbd_backlight
      else
          echo "Invalid argument $1"
          exit 1
      fi
      

      O script acima recebe um número inteiro maior que zero como argumento da linha de comando e o grava no arquivo de controle da luz de fundo após realizar uma verificação básica de sanidade. Você também pode modificar a verificação para permitir apenas os valores 0 e 2 , se desejar, mas deixaremos isso para você.

      Além disso, ele verifica como o usuário está em execução e tenta elevar seus privilégios para root executando-se com sudo , se necessário. Isso significa que você pode até mesmo omitir o sudo ao executá-lo.

    2. Salve este script como /usr/local/bin/set-kbd-backlight (você pode escolher um nome de arquivo diferente, mas o diretório deve permanecer o mesmo; observe que gravar neste local requer sudo )

    3. Verifique se seu arquivo de script tem as configurações corretas de propriedade e permissão. Você será capaz de rodar este script como root sem senha, então devemos ter certeza que ele pode ser executado por todos, mas não ser editado por usuários não-root!

      sudo chown root:root /usr/local/bin/set-kbd-backlight
      sudo chmod 755 /usr/local/bin/set-kbd-backlight
      
    4. Agora você pode configurar sudo para permitir a execução deste script como root sem senha:

      Edite seu arquivo de configuração sudo /etc/sudoers executando o comando abaixo (não de outra forma!):

      sudo visudo
      

      Agora acrescente a seguinte linha antes da linha contendo includedir /etc/sudoers.d próximo ao final do arquivo, substituindo USERNAME pelo nome de usuário correto, que você concederá a execução sem senha como root:

      USERNAME ALL=(root) NOPASSWD: /usr/local/bin/set-kbd-backlight
      

      Saia do editor visudo pressionando Ctrl + X , então Y (ou qualquer tecla que represente "Sim" na sua localidade) e depois Enter .

    5. Verifique se está funcionando primeiro executando sudo -k para revogar sua senha armazenada em cache, caso você a tenha inserido nos últimos 15 minutos na sessão atual do shell. Isso não é necessário para o script funcionar, é apenas para testar se você configurou NOPASSWD corretamente.

      Em seguida, execute os comandos abaixo para ativar e desativar a luz de fundo, sem sudo . Você não deve ser solicitado para sua senha.

      set-kbd-backlight 0
      set-kbd-backlight 2
      
    6. Vincule os comandos ( set-kbd-backlight 0 para desligar a luz, set-kbd-backlight 2 para ativá-lo) para os atalhos de teclado respectivos.

por Byte Commander 07.09.2016 / 04:30