Câu hỏi này đã được hỏi nhưng không bao giờ được trả lời đúng. Sau khi giải phóng mặt bằng với @ Bây giờ tôi đang hỏi lại. Điều này sẽ cho phép tôi trả lời và có thể sửa đổi câu hỏi dễ dàng hơn rất nhiều. Câu hỏi ban đầu có thể được tìm thấy ở đây:
Ánh xạ các nút Ctrl và Alt sang chuột
Vấn đề:
Mặc dù rất đơn giản để ánh xạ bất kỳ tổ hợp phím nào vào nút chuột bằng cách sử dụng xbindkeys
cùng với xdotool
hoặc xte
có vẻ khó khăn hơn nhiều khi ánh xạ một phím bổ trợ (ví dụ ALT , CTRL , SHIFT , v.v.) sang nó.
Giải pháp cuối cùng sẽ cho phép tôi nhấp vào CTRL + (ví dụ: để chọn nhiều mục trong danh sách) chỉ bằng chuột.
Một vài cách tiếp cận khả thi để giải quyết vấn đề này có thể được tìm thấy ở đây tại Stack Exchange cũng như tại các diễn đàn liên quan đến Linux khác. Nhưng không ai trong số họ làm việc như mong đợi vì chúng dẫn đến các vấn đề và tác dụng phụ khác.
Ghi chú:
Một số ví dụ dưới đây liên quan đến cú pháp Guile với Scheme và dựa vào .xbindkeysrc.scm
tệp trong khi những ví dụ khác dựa vào .xbindkeysrc
tệp với cú pháp tương ứng. Tôi biết rằng họ sẽ không làm việc cùng nhau.
Hơn nữa, các đoạn dưới đây chỉ dựa vào xdotool
nhưng tôi sẵn sàng tiếp cận các ứng dụng liên quan đến các ứng dụng khác như vd xte
- mặc dù dường như cả hai đều dẫn đến cùng một kết quả và do đó tôi chỉ sử dụng xdotool
các hành động ở đây.
Cách tiếp cận A:
Cập nhật .xbindkeysrc
tệp với:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Đó là những gì tôi đã thử ban đầu nhưng nó có tác dụng phụ là công cụ sửa đổi đang được giữ và không thể được phát hành.
Cách tiếp cận B:
Cập nhật .xbindkeysrc.scm
tệp với:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
Tìm thấy tại http://www.linuxforums.org/forum/hardware-perodesals/169773-solve-map-mouse-button-modifier-key.html và cố gắng giải quyết vấn đề mà trình sửa đổi đang được giữ (như được mô tả tại phương pháp tiếp cận a).
Mặc dù nó khắc phục rằng nó chỉ hoạt động một phần vì không thể thực hiện các lần nhấp chuột khác trong khi nhấn nút ngón tay cái.
Cách tiếp cận C:
Cập nhật .xbindkeysrc
tệp với:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Đã thử nghiệm bởi OP của câu hỏi được liên kết ở đây tại Askubfox. Rất đơn giản và vững chắc hơn vì nó không liên quan đến các trạng thái sửa đổi. Tuy nhiên, vấn đề vẫn còn, tức là nhấp chuột CTRL + là không thể.
Có vẻ như xbindkeys
chính nó là vấn đề ở đây vì nó nhận ra nhấp chuột nhưng sẽ không thực thi nó. Điều này có thể được kiểm tra bằng cách sử dụng xev | grep button
và xbindkeys -v
:
Một lần nhấp chuột bình thường như được ghi bởi xev
sẽ trông giống như:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Cũng như cho nút ngón tay cái:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Nhưng khi xbindkeys
kích hoạt cấu hình trên, nó không ghi lại bất cứ điều gì. Mặc dù nó có ý nghĩa đối với nút ngón tay cái vì nó được ánh xạ tới CTRL và do đó không phải là nút chuột nữa, thật lạ là nút 1 cũng không được ghi lại. Điều này có thể là do xbindkeys
không thực thi nó nhưng chính nó đang nhận ra nó:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Cách tiếp cận D:
Cập nhật .xbindkeysrc
tệp với:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Chỉ đơn giản là ... nhưng dẫn đến một vòng lặp vô hạn.
CẬP NHẬT:
Trong thời gian chờ đợi, tôi đã mua Logitech G502 và nhận thấy rằng một khi được định cấu hình qua trình điều khiển trên Windows, không chỉ cấu hình được lưu trên bộ nhớ thiết bị mà cả phím nhấn thực tế được thực hiện bằng chuột. Điều đó thực tế đã giải quyết vấn đề của tôi trên Linux!
Con chuột khác duy nhất tôi nhớ có thể làm điều đó là Razer Copperhead ngày trước. Nhưng tôi đoán có những con chuột khác có sẵn ngày hôm nay có thể làm điều tương tự.