Usando CapsLock como botão esquerdo do mouse; principalmente funciona, mas falha com algumas coisas

6
Linux System Info:
OS:        GNU/Linux x86_64
Kernel:    3.13.0-24-generic
Distro:    Linux Mint 17 Qiana, Cinnamon 64-bit 2.2.16
           [Based On: Ubuntu 14.04.5 LTS, Trusty Tahr]

Devido a uma deficiência (lesão na coluna vertebral) que inclui o comprometimento dos dedos, fiz algumas alterações para poder usar a tecla CapsLock do meu teclado como meu botão esquerdo do mouse. NumLock é remapeado para funcionar como CapsLock.

Quase tudo funciona bem ao usar o CapsLock como um clique com o botão esquerdo e um clique duplo com a esquerda, mas algumas coisas, listadas abaixo, não funcionam. Alguém pode sugerir alterações que eu possa fazer, ou uma abordagem alternativa, para que eu possa fazer funcionar totalmente o CapsLock como um clique com o botão esquerdo.

As seguintes coisas todas FALHAM ao usar a tecla CapsLock como um clique com o botão esquerdo do mouse, tudo o mais que você pode usar um clique com o botão esquerdo funciona bem e eu tentei tudo o que posso pensar.

  • Os controles de arrastar para mover ou redimensionar as janelas não funcionam (nada acontece quando tentado). Arrastar dentro de aplicativos funciona bem, por exemplo, barras de rolagem, elementos redimensionáveis, seleção e movimentação de texto, ícones da área de trabalho, movimentação de arquivos em um gerenciador de arquivos, etc.
  • Os menus da janela podem ser ativados com 2 cliques, mas os itens de menu não fazem nada quando clicados, e a tecla de escape deve ser pressionada, ou um clique com botão esquerdo do REAL para fechar o menu.
  • Os menus do sistema (canto superior esquerdo em todas as janelas) não respondem quando são clicados.
  • Clicar com o botão esquerdo nos menus de contexto funciona em alguns aplicativos, mas não em outros.
  • Os controles do painel suspenso do Cinnamon falham parcialmente, por exemplo menu, volume, rede, drives, data / hora, será aberto com o primeiro clique, mas não responderá até que seja clicado novamente com um mouse REAL botão esquerdo que os fecha (pressionando a tecla de escape não consegue fechá-los) mesmo que normalmente o faça).

As alterações do sistema que fiz foram:

1) As linhas a seguir foram adicionadas ao ~/.xbindkeysrc para enviar o clique com o botão esquerdo do mouse para pressionar e liberar eventos quando o CapsLock for pressionado e liberado.

# c:66 is Caps_Lock and in the xdotool commands the 1 specifies the left button.
"xdotool mousedown 1"
    c:66
"xdotool mouseup 1"
    Release+c:66

2) A funcionalidade CapsLock foi desativada com o comando setxkbmap -option caps:none (adicionado a ~/.profile ). O CapsLock não funciona mais como uma tecla modificadora e sua luz indicadora do teclado não é alternada quando pressionada.

3) Tecla NumLock re-mapeada como CapsLock, para que NumLock atue exatamente como CapsLock usado.

Editou o arquivo /usr/share/X11/xkb/symbols/pc :

Replaced this line:  key <NMLK> { [ Num_Lock  ] };
With this line:      key <NMLK> { [ Caps_Lock ] };

Excluiu os arquivos de mapa de teclado armazenados em cache, *.xkm , em /var/lib/xkb/ (reinicialização do sistema necessária para carregar os novos mapas de teclado).

EDIT @ 2018-03-01 13:27:

Eu instalei o pacote PyAutoGUI do Python e escrevi dois programas em Python, um para chamar pyautogui.mouseDown() e outro para chamar pyautogui.mouseUp() e ~/.xbindkeysrc modificado para executar os 2 programas em Python em vez dos comandos xdotool . Os mesmos problemas persistem, ou seja, a maioria dos cliques esquerdos é boa, mas o arrastamento para mover / redimensionar janelas e menus falha.

Como xdotool e PyAutoGUI usam Xlib , suspeito que seja necessária uma solução que ignore Xlib . Existe alguma forma de baixo nível para iniciar eventos de botão para baixo / para cima do mouse?

EDIT @ 2018-03-06 15:57:

Como minha hipótese era de que Xlib era o problema, tentei ignorá-lo ao escrever algum código para escrever diretamente no dispositivo de entrada do mouse, especificamente /dev/input/event5 . Eu enviei o código C para um GitHub . O código postado pelo thundertrick em este post no StackoOverflow foi útil para mim.

Eu então criei /etc/udev/rules.d/80-input.rules - o único liner abaixo - para permitir a escrita não-sudo de eventos de mouse ...

KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"

... então criei o grupo input e adicionei-me ao grupo.

sudo groupadd -f input
sudo gpasswd -a MY_USER_NAME input

... então alterei meu arquivo ~/.xbindkeysrc para chamar meu programa compilado write-mouse-events.

O resultado foi exatamente o mesmo problema - usando o CapsLock como um botão esquerdo do mouse funciona bem, mas arrastando para mover / redimensionar janelas e menus falham.

    
por mattst 27.02.2018 / 19:38

0 respostas