我的键盘背光功能键似乎不起作用,因此我编写了一个脚本来更改键盘亮度,该脚本必须以 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
应该改为使用。