Eu gostaria de iniciar o xcape com um bom valor de -20 como não raiz. No entanto, definir um bom valor de -20 requer permissões de root. Então, eu queria saber se isso é de alguma forma possível. Eu também tentei criar um serviço e configuração do sistema User=myuser
, mas xcape requer xorg e, portanto DISPLAY
,XAUTHORITY
O que consegui até agora:
[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
Acabei descobrindo uma solução alternativa usando o sudo 1 , pois o systemd não oferece suporte a isso imediatamente.
1) Adicionar comando ao arquivo sudoers
Primeiro adicione a seguinte linha ao final de
/etc/sudoers
(substituamyusername
pelo seu nome de usuário,mycommand
com o comando para executar e ajuste o valor de niceness como desejar):Explicação:
Permita
myusername
que o usuário execute o comandosudo /usr/bin/nice -n -20 sudo -u myusername mycommand
como root sem inserir uma senha. Comosudo nice -n -20 mycommand
seria executadomycommand
como root, anexamossudo -u myusername
ao comando, dessa formamycommand
é executado pormyusername
. Esta é uma medida de segurança para aderir ao princípio do menor privilégio.2) Execute o comando usando sudo no script de serviço
Agora podemos executar este comando específico sem digitar uma senha:
Exemplo: xcape
/etc/sudoers
~/.config/systemd/user/xcape.service
Inicie o serviço:
systemdctl --user start xcape
1 Pode-se também escrever um executável auxiliar e usar o bit setuid, se o sudo não estiver disponível.