web-dev-qa-db-ja.com

キーボードショートカットにSudoコマンドを追加するにはどうすればよいですか?

私はLinuxが初めてなので、我慢してください。キーボードバックライトを備えたSony VaioラップトップでUbuntu 16.04を実行しています。このコマンドを端末に入力し、*value*の代わりに「0」を入力してバックライトをオフにし、「2」を入力してバックライトをオンにします。

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

設定アプリに行ってカスタムキーボードショートカットを作成し、それを単純なctrlキーバインドにバインドすると、機能しません。どんな助けでも大歓迎です。

6
Jason

3つのオプションがあります。あなたが一番好きなものを選んでください

  • まだインストールされていない場合はgksuパッケージをインストールし、gksudoのように端末コンソールで要求される代わりにSudoを使用してGUIパスワード入力ダイアログポップアップを取得します。キーボードショートカットとして実行するため、機能しません)。

    Sudo apt install gksu
    

    ショートカットにバインドする必要があるコマンドは次のとおりです。

    gksudo -- bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • pkexecの代わりにSudoを使用します。 gksudoと同様に機能し、プリインストールする必要がありますが、ターミナルコマンドでのみ機能します。GUIアプリケーションをルートとして実行する場合は、特別な設定が必要です。しかし、あなたのコマンドにはそれで十分でしょう。

    ショートカットにバインドする必要があるコマンドは次のとおりです。

    pkexec bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • 明るさを変更する短いスクリプトを作成し、SudoNOPASSWDオプションを設定して、パスワードを求められることなくrootとして実行できるようにします。

    関連する質問: パスワードなしで特定のSudoコマンドを実行するにはどうすればよいですか?

    特定の場合に必要なことは次のとおりです。

    1. 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
      

      上記のスクリプトは、コマンドライン引数としてゼロより大きい整数を取り、基本的な健全性チェックを実行した後にバックライト制御ファイルに書き込みます。また、必要に応じて値0および2のみを許可するようにチェックを変更することもできますが、それはあなたにお任せします。

      さらに、実行中のユーザーとしてチェックし、必要に応じてSudoを使用して自分自身を実行することにより、特権をrootに昇格しようとします。つまり、実行時にSudoを省略することもできます。

    2. このスクリプトを/usr/local/bin/set-kbd-backlightとして保存します(別のファイル名を選択することもできますが、ディレクトリは同じままにしてください。この場所への書き込みにはSudoが必要であることに注意してください)

    3. スクリプトファイルの所有権とアクセス許可の設定が正しいことを確認してください。パスワードなしでこのスクリプトをrootとして実行できるようになるため、すべてのユーザーが実行できることを確認する必要がありますが、root以外のユーザーは編集できません。

      Sudo chown root:root /usr/local/bin/set-kbd-backlight
      Sudo chmod 755 /usr/local/bin/set-kbd-backlight
      
    4. これで、Sudoを構成して、このスクリプトをパスワードなしでrootとして実行できるようになります。

      以下のコマンドを実行して、Sudo構成ファイル/etc/sudoersを編集します(他の方法ではありません!):

      Sudo visudo
      

      ファイルの終わり近くでincludedir /etc/sudoers.dを含む行の直前に次の行を追加し、USERNAMEをrootとしてパスワードなしの実行を許可する正しいユーザー名に置き換えます。

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

      を押してvisudoエディターを終了します Ctrl+X、その後 Y (またはロケールで「はい」を表すキー) Enter

    5. 現在のシェルセッションで最後の15分以内にパスワードを入力した場合に備えて、最初にSudo -kを実行してキャッシュされたパスワードを取り消すことにより、機能していることを確認します。これは、スクリプトが機能するために必要ではなく、NOPASSWDを正しく構成したかどうかをテストするだけです。

      次に、以下のコマンドを実行して、Sudoなしでバックライトをオンまたはオフにします。パスワードを要求されるべきではありません。

      set-kbd-backlight 0
      set-kbd-backlight 2
      
    6. コマンド(set-kbd-backlight 0はライトをオフにし、set-kbd-backlight 2はライトをオンにします)をそれぞれのキーボードショートカットにバインドします。

4
Byte Commander