desenv-web-rp.com

Como mapear as teclas do mouse como teclas do teclado sem perder o teclado numérico no Linux?

Eu sei como mapear clique do mouse para F1F2F3 (respectivamente clique com o botão esquerdo, botão do meio, clique com o botão direito):

xkbset m   # required, but disable keypad
xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"

Mas isso exige que eu use xkbset m que usam o modo teclas lentas :

Se eu pressionar 4 no teclado, move o cursor para a esquerda. Não preciso desse recurso, apenas do mapeamento acima.

Tentei descobrir com xdotool, mas não sei como lidar com a tecla pressionada/liberada (para arrastar e soltar) com

xdotool mousedown 1
xdotool mouseup 1

Como posso não usar este modo ou como posso remapear todas as teclas do teclado?

E os sinais numéricos e aritméticos do teclado, por favor?

Existe outra solução?

Para obter informações, preciso para Debian (cinnamon) e Archlinux (xfce) e, se possível, gostaria de uma solução não baseada no gerenciador de janelas.

EDITAR:

Tentei esta solução mas não consigo arrastar e soltar com F1.

No ~/.xbindkeysrc:

"xdotool mousedown 1"
    F1
"xdotool mouseup 1"
    F1 + Release

Ou:

"xdotool mousedown 1"
    m:0x10 + c:67
"xdotool mouseup 1"
    m:0x10 + c:67 + Release

Então :

xset -r 67

EDIT2

Tentei com actkbd

# actkbd configuration file
<keycode ("67")> :key : :xdotool mousedown 1
<keycode ("67")> :rel : :xdotool mouseup 1

Sem charuto: /

Adaptado de aqui

5
Mévatlavé Kraspek

W00T!

Primeiro: crie um script click:

#!/bin/bash

id=$(
    xinput list |
        awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)
xdotool mousedown $1
while IFS= read -r event; do
    if [[ $event == *release* ]]; then
        xdotool mouseup $1
        exit
    fi
done < <(xinput test $id)

Em seguida, adicione um novo atalho de teclado em seu gerenciador de janela e mapa F1 para correr /path/to/mouse <1|3> (esquerda OU clique com o botão direito).

Et voilà;)

Isso pode ser executado com xbindkeys para ser agnóstico de WM

Editar:

não sei porque isso não funciona com o archlinux + xfce 4.12, mas no Debian9 + Cinnamon

Editar:

Esta solução funciona melhor:

No .bashrc:

xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"

Como um atalho de teclado:

#!/bin/bash

id=$(
    xinput list |
        awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)


(
    while read event; do
        if [[ $event == *release* ]]; then
            xkbset -m
            exit
        fi
    done < <(xinput test $id)
) &
xkbset m
4
Mévatlavé Kraspek

Você pode implementar uma ação de "alternar o mouse" com este comando em .xbindkeysrc (há um erro de digitação em sua primeira edição, não é .xbindkeys):

"if [ ! -e /tmp/mouse_token ] ; then touch /tmp/mouse_token ; xdotool mousedown 1 ; else rm -f /tmp/mouse_token ; xdotool mouseup 1 ; fi"
some_key

Isso criará um arquivo vazio /tmp/mouse_token para acompanhar o estado do botão do mouse. Para some_key você pode usar F1, o que significa que você terá que pressioná-lo duas vezes para obter um único clique ou usar outra tecla (por exemplo, F4).

Nota: no meu sistema, por uma razão desconhecida, o evento de imprensa das teclas F não aciona a ligação xbindkeys, apenas o evento de liberação o faz. Se o mesmo acontecer no seu, use release+F1 para some_key.

Nota2: por padrão, xbindkeys não marca NumLock, então você pode descartar o m:0x10 modificador se você não definiu keystate_numlock = enable no arquivo rc.

0
L. Levrel