Resumo da pergunta: Desejo que um dos botões do mouse seja registrado como o botão esquerdo do Windows Super_Lpelo X11.
No meu gerenciador de janelas, eu posso mover as janelas mantendo o "botão esquerdo do Windows" (Super à esquerda) e arrastando uma janela com o botão esquerdo do mouse. Quero poder fazer isso sem tocar no teclado, por isso quero mapear a tecla Super esquerda para o botão 11 do mouse, para que eu possa segurar o botão 11 do mouse e clicar em + arrastar janelas.
A solução mais óbvia é usar xbindkeys e xte como este ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Isso funciona assim:
- Quando pressiono o botão 11 do mouse, Super_Ltambém é pressionado
- Quando solto o botão 11 do mouse, Super_Ltambém é liberado
Mas há um problema: não consigo mover as janelas usando Super_L+ Mouse1se também estiver pressionando outro botão do mouse, como o botão 11. Com a solução acima, o botão 11 do mouse ainda está sendo registrado como pressionado e liberado, e portanto nenhum as operações do gerenciador de janelas funcionam.
Eu tentei isso usando o Cinnamon e o Awesome WM, e absolutamente nenhuma das Super_Lcombinações de teclado funciona enquanto o botão 10 ou 11 do mouse está sendo pressionado.
Um corte abaixo da média
No momento, estou solucionando esse problema fazendo com que o clique do mouse 11 mantenha o Super_Lbotão pressionado por um certo período de tempo. Dessa forma, posso clicar no botão do mouse e arrastar as coisas por um breve período:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Outra tentativa
Como sugerido por totti, tentei esta xbindkeys
configuração:
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
Isso não funciona. Parece que a Super_Ltecla está sendo pressionada, porque assim que solto o botão 10, ela permanece pressionada para sempre (até pressionar a Super_Ltecla novamente no teclado), mas o botão do mouse ainda está sendo registrado, porque não consigo clicar e arrastar as janelas . Eu não acho que vou conseguir fazer isso funcionar usando xbindkeys
e xte
.
Respostas:
Uma postagem do askubuntu contém uma resposta que resumirei abaixo.
O problema é que xbindkeys agarra o mouse inteiro, tornando incertos os modificadores + o mapeamento de cliques do mouse. A resposta usa o uinput via script python-uinput para monitorar
/dev/my-mouse
o clique do botão do polegar e enviar a Ctrlchave ao teclado virtual. Aqui estão as etapas detalhadas:1. Faça regras do udev
Para o mouse, arquivo
/etc/udev/rules.d/93-mxmouse.conf.rules
:O Udev procurará dispositivos do kernel com nomes como event5. O SYMLINK é para localizar o mouse
/dev/my_mx_mouse
, legível pelo grupomxgrabber
.Para encontrar informações de hardware, execute algo como:
Para uinput, arquivo
/etc/udev/rules.d/94-mxkey.rules
:Desconecte e conecte o mouse ou force o udev a ativar as regras
udevadm trigger
.2. Ative o módulo UINPUT
E em
/etc/modules-load.d/uinput.conf
:3. Crie um novo grupo
4. Script Python
Instale
python-uinput library
epython-evdev library
.O script abaixo requer a identificação do event.code do botão:
5. Acabamento
Torne o arquivo python executável e verifique se ele está carregado na inicialização.
fonte
F13
,F14
eF15
, e desabilito as funções do mouse usandoxinput
. Depois, posso simplesmente reatribuir essas chaves ao que for necessário usando um simplesxmodmap
. A idéia principal é esboçada em uma essência (existem alguns valores codificados e não restauro axinput
função do mouse posteriormente), farei um post sobre isso com a versão final do script (e compartilharei o link aqui quando isso for feito. por sua ajuda ☺ ♥!Como você pode executar o script com um clique do mouse, você pode usar o seguinte truque.
1. Pressione o botão 11 para segurar a tecla super . (O botão 11 aciona um script)
2. Mova as janelas usando os outros botões do mouse
3. Pressione o botão 11 do mouse novamente para soltar a tecla super
script
Use
xdotool
para manter a tecla super pressionadaNo primeiro clique no botão, crie um arquivo temporário e mantenha a tecla pressionada. No próximo clique, exclua o arquivo tmp e solte a tecla
atualizar
De acordo com a página de ajuda do ubuntu (como muitos botões do mouse)
imwheel
podem remapear para uma chave.fonte
+ Mod4
na minha configuração xbindkeys para dar conta da super chave que está sendo mantida pressionada. A solução alternativa que você sugere é melhor que a minha, e estou mudando para ela :-) Mas ainda não responde à pergunta.Sugestão de depuração: eu tentaria monitorar o
/dev/input/eventX
arquivo para ver quais eventos são gerados quando você pressiona e libera esse botão, especialmente em combinações comBTN_LEFT
. Aqui está um código de exemplo para você começar. Obviamente, você precisará modificá-lo para registrar todos os eventos, não apenas as teclas pressionadas.Você também pode verificar a
xev
saída, se ainda não o fez. A análise dos dois logs deve revelar o problema exato que você está tendo.As chances são de que o mouse gere eventos extras de liberação de botão quando vários botões são pressionados. Nesse caso, suas opções seriam usar soluções alternativas de ligação de chave ou modificar a
xf86-input-evdev
biblioteca para filtrar eventos indesejados (ou simular os ausentes). Eu fiz algo parecido há um tempo atrás para uma tela sensível ao toque que gerava eventos de "clique" ao tentar arrastar e soltar. A idéia era filtrar eventos de "release" que surgiam quase simultaneamente (dentro de uma pequena janela de tempo) com eventos de "click". Se meu palpite estiver correto, você essencialmente precisará implementar algo semelhante.fonte
Eu descobri isso hoje cedo com outras teclas modificadoras. O problema é que você deve incluir o modificador na combinação de botões da versão. Supondo que sua chave Super esteja mapeada para o Mod4 (que deve ser o padrão, depois):
EDIT: Acabei de perceber que isso não responde completamente à sua pergunta, pois você ainda não poderá usar o LMB enquanto pressiona b: 11
fonte