Executando o xmodmap através do systemd

0

Eu tenho um script que remapeia para o caps lock. Eu normalmente chamo o script manualmente com

xmodmap /home/myusername/.Xmodmap;

.Xmodmap é um arquivo que contém:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

Eu quero que este comando seja executado na inicialização. O que fiz foi acessar o / etc / systemd / system e criar um arquivo chamado "startup.service" com este conteúdo:

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/myusername/scripts/.qs

[Install]
WantedBy=multi-user.target

.qs é um script com permissões -rwxr-xr-x com conteúdo:

#!/bin/bash
/usr/bin/xmodmap /home/myusername/.Xmodmap; 
rm /home/myusername/stop_time; 
date +%D' '%T > /home/myusername/stop_time

Eu habilito o comando digitando systemctl enable startup (não startup.service).

Aqui está a coisa engraçada. O segundo e terceiro comando funcionam bem em um novo boot, o primeiro não. Parece executar o comando ou ignorá-lo de alguma forma. O comando funciona bem quando executado em uma janela de terminal. O que estou perdendo aqui?

    
por dcm 08.12.2017 / 10:52

1 resposta

1

xmodmap opera em um Xserver em execução. Não é algo que você executaria na inicialização do sistema; é algo que você executaria após o login gráfico, geralmente como parte do script de inicialização de um usuário.

Teoricamente, você pode executá-lo através do systemd para ajustar o mapa de teclas no Xserver do gerenciador de exibição, usando After=display-manager.service no arquivo .service . Isso garantirá que o systemd não o execute antes que o login gráfico esteja disponível. Isso não afetará um gerenciador de exibição baseado no Wayland, qualquer sessão do Wayland ou uma sessão do usuário que use um novo processo do Xserver, então você provavelmente desejará executá-lo novamente durante a inicialização do usuário.

(Observe que a opção XKB caps:swapescape faz algo semelhante ao que o .Xmodmap faz e funcionará adequadamente no Wayland e em outros contextos que reconhecem a libinput e que não possuem um Xserver para que xmodmap opere. xmodmap is essencialmente depreciado, e você deve realmente evitar usá-lo quando possível.)

    
por 08.12.2017 / 11:15