Fare düğmesinin durumunu bash'den almanın bir yolu var mı? Xdotool sadece fare konumunu alabilir.
Bir fare düğmesine basıldığında bir komut dosyası çalıştırılabilecek bir kural tanımlayabileceğim bir şey ayarlamak istiyorum.
Fare düğmesinin durumunu bash'den almanın bir yolu var mı? Xdotool sadece fare konumunu alabilir.
Bir fare düğmesine basıldığında bir komut dosyası çalıştırılabilecek bir kural tanımlayabileceğim bir şey ayarlamak istiyorum.
Yanıtlar:
xinput --query-state <mouse_id>
Bu, tüm fare düğmeleri için aşağıdaki gibi bir durum verir:
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=up
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=313
valuator[1]=667
valuator[2]=-20
Fare_kimliği aşağıdakilerden elde edilebilir:
xinput --list
İşte küçük bir fare düğmesi izleme komut dosyası:
#!/bin/bash
MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')
STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
sleep 0.2
STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
comm -13 <(echo "$STATE1") <(echo "$STATE2")
STATE1=$STATE2
done
MOUSE_ID algılama dizesini ('fare') başka bir şeyle değiştirmeniz gerekebilir.
xinput --list
verir X Input extension not available.
. Maalesef bu konu için Google benim durumumda yardımcı olan hiçbir şeyi açığa çıkarmıyor: Xvnc4
minimal bir Debian VM'sinde. Muhtemelen
xev
X ortamında farenizin düğmelerinin durumunu öğrenmek için komut satırı aracını kullanabilirsiniz.
$ xev
...
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064320, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064439, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065208, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065337, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319066059, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
Ancak bu bilgiler sizi yalnızca bir çözüme götürür. Yukarıdan ayıklamak istediğiniz temel bilgiler, farenizdeki belirli bir düğmeyle hangi sayının ilişkilendirilmiş olduğudur. Örneğimde sol tuşa "buton 1" basıyorum.
Basılan bir düğmeyle ilişkili bir eylem ayarlamak için bu aracı kullanabilirsiniz. Hatta bir tuşa basma veya hatta bir tuşa + basılması gereken bir kural bile ayarlayabilirsiniz.
Önce xbindkeys paketlerinin kurulu olduğundan emin olmanız gerekir.
Ardından, bir şablon xbindkeys yapılandırma dosyası oluşturmak için aşağıdaki komutu yalnızca bir kez çalıştırmanız gerekir.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
Oluşturulan dosya ile bir metin düzenleyicide açabilir ve şöyle bir kural ekleyebilirsiniz:
"xterm"
b:3
Bu kural xterm
, düğmeye 3 basıldığında programı çalıştırmak istediğimizi belirtir . "Düğme 3", sağ fare düğmemdir.
Yukarıdaki değişiklik yapıldığında, zaten çalışıyorsa xbindkey'leri öldürmeli ve sonra yeniden başlatmalıyız.
$ killall xbindkeys
$ xbindkeys
Şimdi bu fareyle sağ fare düğmesine her tıkladığımda, bir xterm
çalıştırılacak.
sadece fare tıklamasıyla (veya tekerlek olayında) baster komutunu xterm'de çalıştırmak istiyorsanız bu örneği deneyebilirsiniz:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
bu tekerleğin etkinliği içindir (bunun yerine tıklama kümesi 12 için)
Sen olamaz kek düğme baskı olayı ve yemek. Betiğinizin bir fare olayı almasını istiyorsanız, fare olayı herhangi bir uygulama yerine betiğinize gönderilir - yani betiğinizin fare olayını alması gerekir. Senaryonuz olayı talep etmiyorsa, onu alması gereken pencere olayı alır.
İsterseniz, fare olayını odaklanan pencereye veya verilen koordinatlardaki pencereye ( xdotool click
) yeniden gönderebilirsiniz .
Belirli fare veya klavye olaylarında komut dosyası yürütmek için XBindKeys kullanabilirsiniz .
MouseButton1Down
veMouseButton1Up
harekete geçecek olayları affedecekseniz izler .