Как вызвать выпуск клавиатуры модификаторы

Eclipse и Gnome не очень связаны. Gnome является Ваша Настольная среда, и Eclipse IDE является просто основанным на GUI приложением - это будет работать сверху любого менеджера окон, пока все библиотеки существуют.

Для очень легкого рабочего стола, все же простого в использовании, Вы могли бы взглянуть на Fluxbox. Это является маленьким и быстрым и должно быть достаточно для Ваших потребностей. Другие возможные варианты, например, XFCE и LXDE.

18
01.01.2013, 21:01
4 ответа

Если Вы имеете xdotool установленный, Вы могли просто использовать

xdotool keyup ISO_Level3_Shift

Который отправляет ключевой выпуск (за ISO_Level3_Shift, конечно) событие к X-серверу.

Но Вы хотели, чтобы программа выпустила все модифицирующие клавиши. Можно было использовать xdotool для достижения этого легко, если бы не это я понятия не имею, какой модификатор keysyms определяются. Один возможный метод нахождения их должен проанализировать keysymdef.h:

grep '^#define' /usr/include/X11/keysymdef.h | sed -r 's/^#define XK_(\S*?).*$/\1/;' | grep -E '_(L|R|Level.*)$'

Который возвращает некоторые keysyms, которые, конечно, являются модификаторами. К сожалению, я не могу найти точное определение модифицирующей клавиши прямо сейчас, таким образом, я не знаю, является ли это полным списком.

Добавление | xargs xdotool keyup к вышеупомянутому конвейеру отпустит все те клавиши. В моей системе это выполняет следующую команду:

xdotool keyup Shift_L Shift_R Control_L Control_R Meta_L Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock
22
27.01.2020, 19:46
  • 1
    Здорово! я также нашел, что неприсвоенные ключи могли быть отклеены с помощью кода клавиши, например. xdotool keyup 204. –  Adam Spiers 07.05.2015, 03:13
  • 2
    @Adam, хорошо осведомленные меня в. Код keyup для моего случая был кодом xmodmap, например, 204, и использующий keysymdef.h не помог. Для наблюдения xmodmap кодов клавиши попробуйте: DISAPLAY=:1 xmodmap -pk | grep -iP 'alt|meta|super|hyper'. Необходимо будет изменить число дисплея на поврежденное число дисплея VNC. –  srking 19.11.2015, 00:17
  • 3
    я думаю, что Вы имели в виду DISPLAY=:1 в вышеупомянутом комментарии. –  Adam Spiers 19.11.2015, 11:47
  • 4
    xdotool поддержки a --clearmodifiers опция для key/keydown/keyup – возможно, это не сделало, когда этот ответ был записан? Я ожидаю это xdotool keyup --clearmodifiers space работал бы. (xdotool keyup требует, чтобы ключ был указан; “пространство” произвольно.) –  Rory O'Kane 18.05.2017, 20:30
[116448] Я использую "setxkbmap" без аргументов. Похоже, клавиатура перезагрузилась. У меня в панели есть "ярлык", который я могу использовать с мышью, когда клавиатура полностью неработоспособна.[116449].
4
27.01.2020, 19:46

Я обнаружил, что для моей системы опубликованное решение, включающее xdotool, часто не охватывало застрявшую клавишу, а выполнение setxkbmap, похоже, ничего не дало в моей системе.

Решение, которое я нашел и которое до сих пор работает безотказно, заключается в использовании x11vnc. В частности, я использую следующую команду:

x11vnc -deny_all -clear_keys -timeout 1

-clear_keys - это ключевая часть. Она указывает x11vnc очистить все нажатые клавиши при выходе. -timeout 1 указывает x11vnc выйти через 1 секунду без подключения, а -deny_all гарантирует, что никто не сможет подключиться во время этого окна.

Иногда застрявший ключ мешает любому осмысленному взаимодействию с рабочим столом, в этом случае я выполняю следующее через ssh:

env DISPLAY=:0 XAUTHORITY=/home/[username]/.Xauthority x11vnc -deny_all -clear_keys -timeout 1
6
27.01.2020, 19:46

Ответ x11vncгениален, но если установка x11vncтолько для очистки модификаторов кажется излишним, вот решение Bash, которое использует вывод xmodmap -pmдля выдачи keyup всем известным модификаторам. Преобразование шестнадцатеричного кода в десятичный зависит от арифметического расширения Bash.

for KEYCODE in $(xmodmap -pm | grep -Pio '(?<=\b0x)[0-9a-f]+\b'); do

    echo -e "xdotool keyup $((16#$KEYCODE))\n" >&2
    xdotool keyup $((16#$KEYCODE))

done

Если вы запускаете его с помощью сочетания клавиш, рекомендуется добавить sleep 1в начале (, чтобы дать время для отпускания физических клавиш )-. echoдля stderr, конечно, не обязательно; Мне просто нравится иметь возможность проверять мой файл ~/.xsession-errorsна вывод, подобный этому.

0
27.01.2020, 19:46

Теги

Похожие вопросы