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

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

我在一台带有键盘背光的 Sony Vaio 笔记本电脑上运行 Ubuntu 16.04。我可以将此命令输入到终端中,输入“0”以*value*关闭背光,输入“2”以打开背光。

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

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

答案1

您有三个选择。选择其中之一你最喜欢哪一个:

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

    sudo apt install gksu
    

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

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

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

    pkexec bash -c 'echo VALUE > /sys/devices/platform/sony-laptop/kbd_backlight'
    
  • 编写一个简短的脚本来改变亮度,然后配置sudo选项NOPASSWD,以便您可以以 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
      

      上述脚本将大于零的整数作为命令行参数,并在执行基本健全性检查后将其写入背光控制文件。您也可以修改检查以仅允许值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
      
    4. 现在您可以配置sudo以允许以 root 身份运行此脚本而无需密码:

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

      sudo visudo
      

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

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

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

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

      然后运行下面的命令来打开和关闭背光,无需sudo。您不应被要求输入密码。

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

相关内容