我想以非 root 身份以 -20 的 nice 值启动 xcape。但是,将 nice 值设置为 -20 需要 root 权限。所以我想知道这是否有可能。我还尝试创建一个系统服务和设置User=myuser
,但是 xcape 需要 xorg,DISPLAY
因此XAUTHORITY
到目前为止我得到了什么:
[Unit]
Description=xcape: esc on caps lock
PartOf=graphical-session.target
[Service]
Type=simple
Nice=-20
ExecStart=/usr/bin/xcape -t 180 -e 'Caps_Lock=Escape'
[Install]
WantedBy=default.target
我最终想出了一个使用 sudo 1的解决方法,因为 systemd 不支持开箱即用的 afaik。
1)将命令添加到sudoers文件
首先将以下行添加到末尾
/etc/sudoers
(替换myusername
为您的用户名,mycommand
执行命令并根据需要调整 niceness 值):解释:
允许用户
myusername
以 root 身份执行命令sudo /usr/bin/nice -n -20 sudo -u myusername mycommand
而不输入密码。由于sudo nice -n -20 mycommand
将以mycommand
root 身份执行,我们sudo -u myusername
在命令前添加,这种方式mycommand
由myusername
. 这是遵守最小权限原则的安全措施。2)在服务脚本中使用sudo执行命令
现在我们可以在不输入密码的情况下执行这个特定的命令:
示例:xcape
/etc/sudoers
~/.config/systemd/user/xcape.service
启动服务:
systemdctl --user start xcape
1如果 sudo 不可用,也可以编写一个辅助可执行文件并使用 setuid 位。