Có cách nào để có được trạng thái nút chuột từ bash không? Xdotool chỉ có thể có được vị trí chuột.
Tôi muốn thiết lập một cái gì đó để tôi có thể xác định quy tắc khi nhấn nút chuột, tập lệnh có thể được thực thi.
Có cách nào để có được trạng thái nút chuột từ bash không? Xdotool chỉ có thể có được vị trí chuột.
Tôi muốn thiết lập một cái gì đó để tôi có thể xác định quy tắc khi nhấn nút chuột, tập lệnh có thể được thực thi.
Câu trả lời:
xinput --query-state <mouse_id>
Điều này cung cấp cho bạn trạng thái cho tất cả các nút chuột, trông giống như thế này:
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
Có thể lấy mouse_id từ:
xinput --list
Đây là một kịch bản xem nút chuột nhỏ:
#!/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
Bạn có thể cần thay đổi chuỗi phát hiện MOUSE_ID ('chuột') sang thứ khác.
xinput --list
mang lại cho tôi X Input extension not available.
. Đáng buồn thay, Google cho vấn đề này không tiết lộ bất cứ điều gì hữu ích trong trường hợp của tôi: Xvnc4
trong một máy ảo Debian tối thiểu. Có khả năng tôi không gặp may
Bạn có thể sử dụng công cụ dòng lệnh xev
để tìm hiểu trạng thái của các nút chuột trong môi trường X.
$ 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
Nhưng thông tin này chỉ giúp bạn một phần giải pháp. Thông tin chính bạn muốn trích xuất từ phía trên là số nào được liên kết với một nút cụ thể trên chuột của bạn. Trong ví dụ của tôi, tôi đang nhấn nút bên trái, "buton 1".
Bạn có thể sử dụng công cụ này để thiết lập một hành động liên quan đến việc nhấn nút. Bạn thậm chí có thể thiết lập quy tắc yêu cầu nhấn phím hoặc thậm chí là nút + phím được nhấn cùng nhau.
Trước tiên bạn cần đảm bảo các gói xbindkeys đã được cài đặt.
Sau đó, bạn sẽ cần chạy lệnh sau, chỉ một lần duy nhất, để tạo tệp cấu hình xbindkeys mẫu.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
Với tệp được tạo, bạn có thể mở tệp trong trình soạn thảo văn bản và thêm quy tắc như thế này:
"xterm"
b:3
Quy tắc này nói rằng chúng tôi muốn chạy chương trình xterm
khi nhấn nút 3. "Nút 3" là nút chuột phải của tôi.
Với sự thay đổi ở trên, chúng ta cần phải giết xbindkey nếu nó đã chạy và sau đó khởi động lại nó.
$ killall xbindkeys
$ xbindkeys
Bây giờ với điều này chạy bất cứ khi nào tôi nhấp vào nút chuột phải, một xterm
sẽ được thực hiện.
Bạn không thể có sự kiện nhấn nút bánh của bạn và ăn nó. Nếu bạn muốn tập lệnh của mình nhận được một sự kiện chuột, thì sự kiện chuột sẽ được gửi đến tập lệnh của bạn thay vì bất kỳ ứng dụng nào khác - điều đó có nghĩa là tập lệnh của bạn phải lấy sự kiện chuột. Nếu tập lệnh của bạn không yêu cầu sự kiện thì cửa sổ sẽ lấy nó.
Nếu bạn muốn, bạn có thể gửi lại sự kiện chuột đến cửa sổ tập trung hoặc cửa sổ ở tọa độ đã cho ( xdotool click
).
Bạn có thể sử dụng XBindKeys để thực thi tập lệnh trên một số sự kiện chuột hoặc bàn phím nhất định.
MouseButton1Down
vàMouseButton1Up
các sự kiện để hành động.