如何将 sudo 命令添加到键盘快捷键?

Jas*_*son 10 keyboard shortcut-keys backlight

我在具有键盘背光功能的 Sony Vaio 笔记本电脑上运行 Ubuntu 16.04。我可以在终端中输入这个命令,用“0”代替*value*关闭背光,用“2”打开它。

sudo su -c "echo *value* > /sys/devices/platform/sony-laptop/kbd_backlight"
Run Code Online (Sandbox Code Playgroud)

当我转到设置应用程序以创建自定义键盘快捷键并将其绑定到简单的 ctrl 键绑定时,它不起作用。

Byt*_*der 9

你有三个选择。选择其中一个你最喜欢的:

  • gksu如果尚未完成,请安装该软件包并用于gksudo获取 GUI 密码输入对话框弹出窗口,而不是像sudo这样在终端控制台上被询问(当您将其作为键盘快捷方式运行时不存在,因此不起作用)。

    sudo apt install gksu
    
    Run Code Online (Sandbox Code Playgroud)

    您需要绑定到快捷方式的命令是:

    gksudo -- bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用pkexec代替sudo。它的工作原理类似于gksudo并且应该预先安装,但它仅适用于终端命令,如果您想以 root 身份运行 GUI 应用程序,则需要特殊配置。但是对于您的命令来说就足够了。

    您需要绑定到快捷方式的命令是:

    pkexec bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
    Run Code Online (Sandbox Code Playgroud)
  • 编写一个简短的脚本来更改亮度,然后配置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
      
      Run Code Online (Sandbox Code Playgroud)

      上面的脚本将一个大于零的整数作为命令行参数,并在执行基本完整性检查后将其写入背光控制文件。你也可以修改该检查只允许值02,如果你想要的,但我会离开,给你。

      此外,它会检查它正在运行的用户,并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
      
      Run Code Online (Sandbox Code Playgroud)
    4. 现在您可以配置sudo为允许在没有密码的情况下以 root 身份运行此脚本:

      通过运行以下命令来编辑您的sudo配置文件/etc/sudoers(不是任何其他方式!):

      sudo visudo
      
      Run Code Online (Sandbox Code Playgroud)

      现在在包含includedir /etc/sudoers.d文件末尾附近的行之前追加以下行,替换USERNAME为正确的用户名,您将授予无密码执行作为 root 的权限:

      USERNAME ALL=(root) NOPASSWD: /usr/local/bin/set-kbd-backlight
      
      Run Code Online (Sandbox Code Playgroud)

      visudoCtrl+ X,然后Y(或在您的语言环境中表示“是”的任何键)退出编辑器,然后按Enter

    5. 通过首先运行sudo -k以撤销您的缓存密码来验证它是否正常工作,以防万一您在当前 shell 会话的最后 15 分钟内输入它。这不是脚本工作所必需的,它只是测试您是否配置NOPASSWD正确。

      然后运行下面的命令来打开和关闭背光,不带sudo. 不应要求您提供密码。

      set-kbd-backlight 0
      set-kbd-backlight 2
      
      Run Code Online (Sandbox Code Playgroud)
    6. 将命令(set-kbd-backlight 0关灯、开灯)绑定set-kbd-backlight 2到相应的键盘快捷键。