Gnome 3 - 以 root 身份运行命令的自定义键盘快捷键?

Gnome 3 - 以 root 身份运行命令的自定义键盘快捷键?

我的键盘背光功能键似乎不起作用,因此我编写了一个脚本来更改键盘亮度,该脚本必须以 root 身份运行。它是这样调用的...

sudo /usr/bin/local/backlight inc
sudo /usr/bin/local/backlight dec 

这在终端上工作得很好,但它不能作为我通过键盘设置创建的自定义键盘快捷键的命令。

只是在这里猜测,但问题可能是,当通过键盘快捷键调用该命令时,该命令实际上并不是在我的用户下运行,而是作为其他人运行,这不会出现在 sudoers 文件中?

答案1

Gnome 3 使用一种称为波尔基特所以以 root 身份运行该可执行文件的正确方法是通过执行程序:

pkexec 允许授权用户以另一个用户的身份执行 PROGRAM。如果未指定用户名,则程序将以管理超级用户 root 的身份执行。

要授权活动会话中的用户以 root 身份运行该命令,您必须通过XML下的文件定义一个新操作(按照上述规范) /usr/share/polkit-1/actions,我们称之为org.fedora.pkexec.kbback.policy

内容/usr/share/polkit-1/actions/org.fedora.pkexec.kbback.policy

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>

  <icon_name>input-keyboard</icon_name>
  <action id="org.fedora.pkexec.kbback">
    <message>Authentication is required to Change Keyboard Backlight</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/local/bin/backlight</annotate>
  </action>

</policyconfig>

下一步是通过 GNOME 键盘设置将命令分配给键盘快捷键:

pkexec /usr/local/bin/backlight inc
pkexec /usr/local/bin/backlight dec 

(注意:我用作/usr/local/bin/backlight可执行文件的路径,如果您的可执行文件路径不同,则必须更改操作文件和两个命令)

答案2

gksudo我认为在这种情况下你需要使用。我引用手册gksudo(1)页:

gksu 是 su 的前端,gksudo 是 sudo 的前端。它们的主要目的是运行需要 root 的图形命令,而不需要运行 X 终端模拟器并直接使用 su

因此,这里的问题似乎是由键盘快捷键启动的命令没有连接到它们的(伪)终端设备,这会导致sudo失败,gksudo应该改为使用。

相关内容