web-dev-qa-db-fra.com

Comment ajouter des commandes Sudo à un raccourci clavier?

Je suis nouveau sur Linux, alors supporte-moi. J'utilise Ubuntu 16.04 sur un ordinateur portable Sony Vaio, doté d'un rétroéclairage du clavier. Je peux entrer cette commande dans le terminal, en mettant un "0" à la place de *value* pour éteindre le rétro-éclairage et un "2" pour l'allumer.

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

Lorsque je suis allé dans l'application des paramètres pour créer un raccourci clavier personnalisé et le lier à une simple liaison de touche ctrl, cela ne fonctionnait pas. Toute aide serait très appréciée.

6
Jason

Vous avez trois options. Choisissez celui que vous préférez :

  • Installez le paquetage gksu s'il n'est pas déjà terminé et utilisez gksudo pour obtenir une boîte de dialogue de saisie du mot de passe d'interface graphique au lieu d'être invitée sur la console de terminal comme le fait Sudo (ce qui n'est pas présent lorsque vous l'exécutez comme raccourci clavier et ne fonctionne donc pas) .

    Sudo apt install gksu
    

    La commande que vous devez lier à votre raccourci serait la suivante:

    gksudo -- bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • Utilisez pkexec au lieu de Sudo. Il fonctionne de manière similaire à gksudo et devrait être préinstallé, mais cela ne fonctionne que pour les commandes de terminal. Si vous souhaitez exécuter une application graphique en tant qu’utilisateur root, une configuration spéciale est nécessaire. Mais pour votre commande, cela serait suffisant.

    La commande que vous devez lier à votre raccourci serait la suivante:

    pkexec bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • Écrivez un court script pour modifier la luminosité, puis configurez l'option Sudo de NOPASSWD afin de pouvoir l'exécuter en tant que root sans demander de mot de passe.

    Question pertinente: Comment exécuter des commandes Sudo spécifiques sans mot de passe?

    Voici ce que vous devez faire dans votre cas spécifique:

    1. Ecrivez un fichier de script contenant toutes les commandes nécessaires pour obtenir ce que vous voulez. Il sera ensuite exécuté en tant que 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
      

      Le script ci-dessus prend un nombre entier supérieur à zéro en tant qu'argument de ligne de commande et l'écrit dans le fichier de contrôle de rétroéclairage après avoir effectué une vérification de base. Vous pouvez également modifier le contrôle pour n'autoriser que les valeurs 0 et 2 si vous le souhaitez, mais je vous laisse le soin de le laisser à vous.

      En outre, il vérifie quel utilisateur il est en train d'exécuter et tente d'élever ses privilèges en tant qu'utilisateur root en s'exécutant lui-même avec Sudo si nécessaire. Cela signifie que vous pouvez même omettre le Sudo lors de son exécution.

    2. Enregistrez ce script sous le nom /usr/local/bin/set-kbd-backlight (vous pouvez choisir un nom de fichier différent, mais le répertoire doit rester identique; notez que l'écriture dans cet emplacement nécessite Sudo).

    3. Assurez-vous que votre fichier de script possède les paramètres de propriété et d'autorisation appropriés. Vous allez pouvoir exécuter ce script en tant que root sans mot de passe. Nous devons donc nous assurer qu'il peut être exécuté par tout le monde, sans être édité par des utilisateurs non-root!

      Sudo chown root:root /usr/local/bin/set-kbd-backlight
      Sudo chmod 755 /usr/local/bin/set-kbd-backlight
      
    4. Vous pouvez maintenant configurer Sudo pour autoriser l'exécution de ce script en tant qu'utilisateur root sans mot de passe:

      Modifiez votre fichier de configuration Sudo/etc/sudoers en exécutant la commande ci-dessous (et non autrement!):

      Sudo visudo
      

      Maintenant, ajoutez la ligne suivante juste avant la ligne contenant includedir /etc/sudoers.d près de la fin du fichier, en remplaçant USERNAME par le nom d'utilisateur correct que vous accorderez à l'exécution sans mot de passe en tant que root:

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

      Quittez l'éditeur visudo en appuyant sur Ctrl+X, puis Y (ou quelle que soit la clé représente "Oui" dans votre région) puis Enter.

    5. Vérifiez qu'il fonctionne en exécutant d'abord Sudo -k pour révoquer votre mot de passe mis en cache, au cas où vous l'auriez entré au cours des 15 dernières minutes de la session Shell en cours. Ce n'est pas nécessaire pour que le script fonctionne, c'est juste pour vérifier si vous avez configuré NOPASSWD correctement.

      Ensuite, exécutez les commandes ci-dessous pour allumer et éteindre le rétroéclairage, sans Sudo. Vous ne devriez pas être demandé pour votre mot de passe.

      set-kbd-backlight 0
      set-kbd-backlight 2
      
    6. Reliez les commandes (set-kbd-backlight 0 pour éteindre la lumière, set-kbd-backlight 2 pour l'allumer) aux raccourcis clavier correspondants.

4
Byte Commander