Comportamento estranho com aplicativos de inicialização do Ubuntu 16.04

1

Eu tenho vários aplicativos de inicialização:

user@host:~$ ls -l .config/autostart/
. . .
. . . XXX.desktop
. . . YYY.desktop
. . . ZZZ.desktop
. . . setxkbmap.desktop

Entre eles, um comando para desativar o Caps Lock:

setxkbmap -option caps:none

Primeiro, sempre que tento editar qualquer um desses comandos de inicialização com sleep , eles parecem não funcionar:

sleep 20; setxkbmap -option caps:none

ou ...

sleep 20 && setxkbmap -option caps:none

E, segundo, se eu remover o comando sleep de todos os comandos de inicialização e, em seguida, colocar o comando Caps Lock disable no topo da lista, ele não funcionará, mas os outros farão ...

Todos os comandos, se executados no terminal, fora dos aplicativos de inicialização, funcionam bem, por isso não tenho certeza de por que eles não funcionam na inicialização.

UPDATE

Com base na resposta do @ Xen2050, adaptei os métodos que ele sugeriu em uma solução viável. Para dois dos comandos de inicialização, estou usando este formulário:

bash -c "sleep 20; specific_command"

E os outros, deixei como os comandos de inicialização padrão. Está tudo bem, porque a máquina é inicializada mais rapidamente e o comando de desativação do Caps Lock está funcionando de forma consistente.

UPDATE 2

Fiz algumas pesquisas adicionais e descobri que xkb é provavelmente o melhor método para desabilitar o Caps Lock. Como essa questão era sobre aplicativos de inicialização, a resposta aceita é válida. Mas se alguém mais acabar aqui procurando como desabilitar a tecla Caps Lock no Ubuntu 16.04, aqui estão algumas dicas úteis:.

Eu fui editando o /usr/share/X11/xkb/symbols/pc , mas acho que usar substituições de usuário é provavelmente o jeito certo de fazê-lo (como sugerido pelo @quixotic):

Faça o terminal reconhecer PageUp e PageDown quando remapeado para chaves diferentes

    
por nicorellius 24.02.2017 / 18:07

1 resposta

1

Eu acho que arquivos .desktop não executam seus comandos Exec= em um shell completo / normal, então se você quiser usar vários comandos, você precisa executar explicitamente um shell com esses comandos. Por exemplo, isso deve funcionar:

Exec=sh -c "sleep 5; notify-send test-delay"

Ou no seu caso:

Exec=sh -c "sleep 20; setxkbmap -option caps:none"
    
por 24.02.2017 / 18:58