Xbindkeys не працюватимуть належним чином


10

У мене є проблема. Я хотів перезаписати кілька гарячих клавіш, до яких я звик із попередньої системи, але я не можу змусити його працювати належним чином xbindkeys.

xbindkeys розпізнає комбінацію, але якось команда не спрацьовує.

Якщо я використовую команду

xdotool key braceleft

Він видає мені правильний {знак на консолі. Однак якщо я використовую ту саму команду в xbindkeys, нічого не станеться. Якщо я заміню команду на firefoxнеї, вона працює належним чином і відкриває firefox, тож я думаю, xbindkeysпрацює.

Я хочу досягти наступного:

Я хочу набрати символу {в активне вікно або Alt_R+, 7або Alt_Left+ Ctrl+, 7щоб я міг використовувати обидва. Я знаю, що Alt_R(AltGr) - це правильний спосіб, але на німецьких клавіатурах важко набрати брекет-клавішу за допомогою AltGrклавіші (Alt_R), тому я МАЮ використовувати замість цього Alt_L+ Control+ 7(як я звик у попередній системі). Я якось змусив його працювати належним чином у 12.04, але я не можу змусити його працювати в 14.04.

Будь-які пропозиції? Я спробував кілька команд. Усі вони працювали в консолі, але жоден з них не працював при виконанні xbindkeys

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

Це моя конфігурація, яка не працюватиме

"xdotool key braceleft"
Control+Alt + 7

Однак це працює:

"firefox"
Control+Alt + 7

Рішення Правка

Коли я спробував ще кілька речей, я помітив, що xdotool, здається, спрацьовує занадто рано. Я змінив конфігурацію так:

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

ЗАРАЗ він надсилає правильний знак {активне вікно. Тепер залишається лише скоротити сон і затримати до працездатного значення, адже 1 секунда здається трохи задовгою :)

** Інформація про доповнення ** Ну, тепер мені вдалося знайти відповідні значення. ЯКЩО це працює, лише якщо ви відпустите клавіші, поки не закінчиться час сну. Якщо ви занадто повільні, якщо не вийде.

Це моя поточна конфігурація для всіх незручних німецьких символів AltGr

"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

Однак якщо ви хочете ввести кілька знаків @ (наприклад), вам потрібно натиснути Ctrl + Alt + Q за призначенням, але відпустити всі клавіші, а потім натиснути його ще раз. Це, однак, набагато краще, ніж не мати опції Control + Alt замість AltGr, але це не так ефективно, як я був використаний. Можливо, я знайду рішення і для цього.


Ага, це гарна знахідка! Для відповіді на власне запитання немає обмеження, а лише обмеження часу . Було б чудово, якби ви могли повернутися і опублікувати це як відповідь через 6 годин. Це також дасть вам деякий представник, якщо вам це важливо. Якщо вам насправді все одно, я просто включу ваше рішення у свою відповідь через кілька днів.
тердон

Ви коли-небудь придумували, як змусити xdotoolповторити клавішу, утримуючи її?
Фарджер

Якщо чесно, я до цього часу не пробував. Мені вдало було League of Legends працювати з плавною швидкістю 60 кадрів в секунду (в 12.04 вона не почалася б взагалі), так що я, будучи вдома, грав увесь час.
Елло

Я не отримував якихось ярликів, працюючи цілими днями. Рішення було простим: Мій робочий стіл Ubuntu отримав ярлики перед xbindkeys. Просто відредагуйте параметри майданчика, додайте новий спеціальний ярлик із дієюxdotool getactivewindow key Home
BurninLeo

Схоже, ви намагаєтеся імітувати німецьку розкладку клавіатури. Чому ви просто не переключите розкладку клавіатури в налаштуваннях системи?
Рапті

Відповіді:


4

Проблема xdotoolполягає в тому, що при натисканні реальних клавіш Xorg неодноразово надсилає події натискання клавіш (дивіться на xevвихід). Щоб подолати це, вам потрібно тимчасово вимкнути функцію повторення, а потім створити KeyRelease подія на ключі, який був вимкнений.

Замість

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

спробуйте наступне:

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

Дякую за вашу відповідь, але я зараз використовую Manjaro з XFCE, і там він працював поза коробкою, тому сон не потрібен.
Елло

@Ello, ці відповіді не лише для вас, тому цінується найбільш універсальне рішення.
midenok

3

Коли я спробував ще кілька речей, я помітив, що xdotool, здається, спрацьовує занадто рано. Я змінив конфігурацію так:

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

ЗАРАЗ він надсилає правильний знак {активне вікно. Тепер залишається лише скоротити сон і затримати до працездатного значення, адже 1 секунда здається трохи задовгою :)

** Інформація про доповнення ** Ну, тепер мені вдалося знайти відповідні значення. ЯКЩО це працює, лише якщо ви відпустите клавіші, поки не закінчиться час сну. Якщо ви занадто повільні, якщо не вийде.

Це моя поточна конфігурація для всіх незручних німецьких символів AltGr

"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

Однак якщо ви хочете ввести кілька знаків @ (наприклад), вам потрібно натиснути Ctrl + Alt + Q за призначенням, але відпустити всі клавіші, а потім натиснути його ще раз. Це, однак, набагато краще, ніж не мати опції Control + Alt замість AltGr, але це не так ефективно, як я був використаний. Можливо, я знайду рішення і для цього.


Це дуже дивно, я радий, що ти це розробив, але я не можу зрозуміти, чому це відбувається. У будь-якому випадку, дякую, що знайшли час для публікації цього повідомлення, це може допомогти наступній людині з тим же питанням.
тердон

Замість цього sleepя думаю, що ви хочете додати + releaseдо ключових комбінацій. Це дозволить xbindkeysпочекати, поки ключ не буде відпущений, перш ніж запустити команду.
wjandrea

3

Як задокументовано у подібних запитаннях ( Чому ці команди xte працюють у терміналі, але не пов'язані з xbindkeys? ), Ви можете попросити xbindkeysвикликати події при випуску (при натисканні клавіші):

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

Таким чином, немає конфлікту між ключами, які використовуються для ярлика, і тими, що надсилаються.


2

Нещодавно у мене виникла ця проблема, де я намагався імітувати медіа-клавішу Play / Pause (XF86AudioPlay) за допомогою Ctrl + G. Після деяких досліджень з'явилося, що мені потрібно скасувати не лише керування , але й клавішу g (що є з чого потрібна була sleep 0.1затримка для початку). Якщо я keyupскасую обидва ці клавіші, використовуючи xdotool, а також перемикач --clearmodifiers, він працює. Це моя нова команда у моєму файлі .xbindkeys.rc:

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

1

Не впевнений, чому це не працює xbindkeys, я припускаю, що вам потрібно вказати вікно, в яке потрібно писати. Як вирішення, ви можете використовувати xvkbdзамість цього.

  1. Встановити xvkbd

    sudo apt-get install xvkbd
    
  2. Додайте це у свій .xbindkeysrcфайл

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

Це має спрацювати.


ПРИМІТКИ

Чомусь на моїй машині xvkbdвикористовується одна з моїх вторинних макетів (іспанська) замість моєї основної (американська англійська), і це призводить {до фактичного друку ". Якщо у вас також є ця проблема, просто пограйте трохи, щоб дізнатися, який ключ відповідає {використовуваному макету. Крім того, ви можете копати глибше і зрозуміти, звідки xvkbdотримує його localeналаштування.


досі не працює. навіть із належними персонажами. якщо я напишу xvkbd -text 'apple' у консолі, він друкує яблуко, якщо я виконую його через xbindkeys, нічого не відбувається. якщо я дивлюся на xbindkeys -v він бачить, що він розпізнав натиснуту команду
Елло,

я змусив його працювати, але з чимось іншим
Елло,

@Ello чудово! Що ти використовував? Це добре працювало для мене. Чи можете ви опублікувати відповідь, що пояснює ваше рішення, і прийняти його?
тердон

Я змінив свою посаду, не можу відповісти на власні запитання через відсутність репутації. Вибачте
Елло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.