Xbindkeys sẽ không hoạt động đúng


8

Tôi có một chút vấn đề. Tôi muốn sắp xếp lại một số phím nóng mà tôi đã sử dụng từ hệ thống trước đây của mình nhưng tôi không thể làm cho nó hoạt động bình thường xbindkeys.

xbindkeys nhận ra sự kết hợp nhưng bằng cách nào đó lệnh không kích hoạt.

Nếu tôi sử dụng lệnh

xdotool key braceleft

Nó xuất ra cho tôi {dấu hiệu chính xác trong giao diện điều khiển. Tuy nhiên nếu tôi sử dụng cùng một lệnh trong xbindkeys thì không có gì xảy ra. Nếu tôi thay thế lệnh bằng firefoxnó hoạt động đúng và mở firefox, vì vậy tôi đoán xbindkeyshoạt động.

Tôi muốn đạt được những điều sau đây:

Tôi muốn nhập ký tự {vào cửa sổ hiện hoạt bằng Alt_R+ 7hoặc Alt_Left+ Ctrl+ 7để tôi có thể sử dụng cả hai. Tôi biết Alt_R(AltGr) là cách thích hợp nhưng trên bàn phím tiếng Đức, bằng cách nào đó rất khó để nhập braceleft bằng phím AltGr(Alt_R) vì vậy tôi PHẢI sử dụng Alt_L+ Control+ 7thay vào đó (như tôi đã quen với hệ thống trước đây). Bằng cách nào đó tôi đã làm cho nó hoạt động đúng vào 12.04, nhưng tôi không thể làm cho nó hoạt động vào 14.04.

Bất kỳ đề xuất? Tôi đã thử một số lệnh. Tất cả đều hoạt động trong bảng điều khiển nhưng không ai trong số họ làm việc khi được thực hiện bởi xbindkeys

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

Đây là cấu hình của tôi, nó sẽ không hoạt động

"xdotool key braceleft"
Control+Alt + 7

Tuy nhiên, điều này hoạt động:

"firefox"
Control+Alt + 7

Giải pháp Chỉnh sửa

Khi tôi thử một vài thứ khác, tôi nhận thấy rằng xdotool dường như kích hoạt quá sớm. Tôi đã thay đổi cấu hình như thế này:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

NGAY BÂY GIỜ nó sẽ gửi dấu {chính xác đến cửa sổ đang hoạt động. Bây giờ điều duy nhất còn lại là giảm giấc ngủ và trì hoãn đến một giá trị khả thi, bởi vì 1 giây có vẻ hơi dài :)

** Thông tin bổ sung ** Chà, bây giờ tôi đã tìm được giá trị phù hợp. TUY NHIÊN điều này chỉ hoạt động nếu bạn nhả phím cho đến khi hết thời gian ngủ. Nếu bạn quá chậm nếu không làm việc.

Đây là cấu hình hiện tại của tôi cho tất cả các ký tự AltGr tiếng Đức không thuận tiện

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Tuy nhiên, nếu bạn muốn nhập nhiều dấu @ (ví dụ), bạn phải nhấn Ctrl + Alt + Q như dự định, nhưng nhả tất cả các phím và sau đó nhấn lại. Tuy nhiên, điều này tốt hơn nhiều so với việc không có tùy chọn Control + Alt thay vì AltGr nhưng nó không hiệu quả vì tôi cũng đã sử dụng. Có lẽ tôi cũng sẽ tìm ra giải pháp cho việc này.


Huh, đó là một tìm kiếm tốt! Không có giới hạn đại diện để trả lời câu hỏi của riêng bạn, chỉ có giới hạn thời gian . Sẽ thật tuyệt nếu bạn có thể quay lại và đăng bài này như một câu trả lời trong 6 giờ. Điều đó cũng sẽ cung cấp cho bạn một số đại diện nếu bạn quan tâm về điều đó. Nếu bạn thực sự không quan tâm, tôi sẽ chỉ đưa giải pháp của bạn vào câu trả lời của tôi trong một vài ngày.
terdon

Bạn đã bao giờ tìm ra cách xdotoolđể lặp lại phím trong khi nhấn giữ chưa?
Farzher

Thành thật mà nói, tôi đã không thử nó ngay bây giờ. Tôi đã thành công trong Liên minh huyền thoại với 60fps (vào ngày 12.04, nó sẽ không bắt đầu) vì vậy, khi tôi ở nhà, tôi đã chơi toàn bộ thời gian.
Ello

Tôi đã không nhận được một số phím tắt làm việc trong nhiều ngày. Giải pháp rất đơn giản: Máy tính để bàn Ubuntu của tôi có các phím tắt trước xbindkeys. Chỉ cần chỉnh sửa cài đặt kayboard, thêm hành động tùy chỉnh mới bằng hành độngxdotool getactivewindow key Home
BurninLeo

Có vẻ như bạn đang cố gắng mô phỏng bố cục bàn phím tiếng Đức. Tại sao bạn không chuyển đổi bố cục bàn phím trong cài đặt hệ thống?
Rapti

Câu trả lời:


4

Vấn đề với xdotoollà trong khi các phím thực được nhấn Xorg liên tục gửi các sự kiện nhấn phím (nhìn vào xevđầu ra). Để khắc phục điều này, bạn cần tạm thời tắt tính năng lặp lại, sau đó tạo sự kiện KeyRelease trên phím bị tắt.

Thay vì

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

hãy thử như sau:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7

Cảm ơn bạn đã trả lời, nhưng tôi hiện đang sử dụng Manjaro với XFCE và nó đã hoạt động tốt, vì vậy không cần ngủ.
Ello

@Ello, những câu trả lời này không chỉ dành cho bạn, vì vậy giải pháp phổ quát nhất được đánh giá cao.
midenok

3

Khi tôi thử một vài thứ khác, tôi nhận thấy rằng xdotool dường như kích hoạt quá sớm. Tôi đã thay đổi cấu hình như thế này:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

NGAY BÂY GIỜ nó sẽ gửi dấu {chính xác đến cửa sổ đang hoạt động. Bây giờ điều duy nhất còn lại là giảm giấc ngủ và trì hoãn đến một giá trị khả thi, bởi vì 1 giây có vẻ hơi dài :)

** Thông tin bổ sung ** Chà, bây giờ tôi đã tìm được giá trị phù hợp. TUY NHIÊN điều này chỉ hoạt động nếu bạn nhả phím cho đến khi hết thời gian ngủ. Nếu bạn quá chậm nếu không làm việc.

Đây là cấu hình hiện tại của tôi cho tất cả các ký tự AltGr tiếng Đức không thuận tiện

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Tuy nhiên, nếu bạn muốn nhập nhiều dấu @ (ví dụ), bạn phải nhấn Ctrl + Alt + Q như dự định, nhưng nhả tất cả các phím và sau đó nhấn lại. Tuy nhiên, điều này tốt hơn nhiều so với việc không có tùy chọn Control + Alt thay vì AltGr nhưng nó không hiệu quả vì tôi cũng đã sử dụng. Có lẽ tôi cũng sẽ tìm ra giải pháp cho việc này.


Điều này rất lạ, tôi rất vui vì bạn đã giải quyết nó nhưng tôi thực sự không thể hiểu tại sao nó lại xảy ra. Dù sao, cảm ơn vì đã dành thời gian để đăng bài này, nó có thể giúp người tiếp theo có cùng vấn đề.
terdon

Thay vì sleep, tôi nghĩ bạn muốn thêm + releasevào các combo chính. Điều đó sẽ bảo xbindkeysđợi cho đến khi khóa được giải phóng trước khi kích hoạt lệnh.
wjandrea

2

Như được ghi lại trong các câu hỏi tương tự ( Tại sao các lệnh xte này hoạt động trong thiết bị đầu cuối, nhưng không phải khi bị ràng buộc với xbindkeys? ), Bạn có thể yêu cầu xbindkeyskích hoạt các sự kiện khi phát hành (khi bật phím):

"xdotool key braceleft"
   Release+Control+Alt + 7

Theo cách này, không có xung đột giữa các phím được sử dụng cho phím tắt và những phím được gửi.


2

Gần đây tôi đã gặp sự cố này, ở đó tôi đã cố gắng mô phỏng phím Phát / Tạm dừng phương tiện (XF86AudioPlay) bằng Ctrl + G. Sau một số nghiên cứu, tôi không chỉ cần hủy bỏ Điều khiển mà còn cả phím g (đó là những gì cần sự sleep 0.1chậm trễ để bắt đầu với). Nếu tôi hủy cả hai khóa này bằng cách sử dụng keyuptrong xdotool cũng như công tắc --clearmodifier, nó sẽ hoạt động. Đây là lệnh mới của tôi, trong tệp .xbindkeys.rc của tôi:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g

1

Không chắc tại sao nó không hoạt động xbindkeys, tôi đoán bạn cần chỉ định cửa sổ để ghi. Như một cách giải quyết, bạn có thể sử dụng xvkbdthay thế.

  1. Tải về xvkbd

    sudo apt-get install xvkbd
    
  2. Thêm phần này vào .xbindkeysrctập tin của bạn

    "xvkbd -text '{'"
    Control+Alt + 7
    

Cần làm việc.


GHI CHÚ

Vì một số lý do, trên máy của tôi, xvkbdđang sử dụng một trong những bố cục phụ của tôi (tiếng Tây Ban Nha) thay vì bố cục chính của tôi (tiếng Anh Mỹ) và điều này khiến {cho việc in ấn thực sự ". Nếu bạn cũng gặp vấn đề này, chỉ cần chơi xung quanh một chút để tìm ra phím nào tương ứng {với bố cục được sử dụng. Ngoài ra, bạn có thể đào sâu hơn và tìm ra nơi xvkbdlấy localecài đặt của nó .


Vẫn không làm việc. thậm chí với các nhân vật thích hợp. Nếu tôi viết xvkbd -text 'apple' trong bảng điều khiển, nó sẽ in apple, nếu tôi thực hiện nó thông qua xbindkeys, không có gì xảy ra. nếu tôi nhìn vào xbindkeys -v thì nó thấy nó nhận ra lệnh được nhấn
Ello

tôi đã làm cho nó hoạt động, nhưng với một cái gì đó khác
Ello

@Ello thật tuyệt! Bạn đã sử dụng cái gì? Nó làm việc tốt cho tôi. Bạn có thể gửi một câu trả lời giải thích giải pháp của bạn và chấp nhận nó?
terdon

Tôi đã thay đổi bài đăng của mình, tôi không thể trả lời câu hỏi của mình vì thiếu danh tiếng. Xin lỗi
Ello
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.