Eclipse и Gnome не очень связаны. Gnome является Ваша Настольная среда, и Eclipse IDE является просто основанным на GUI приложением - это будет работать сверху любого менеджера окон, пока все библиотеки существуют.
Для очень легкого рабочего стола, все же простого в использовании, Вы могли бы взглянуть на Fluxbox. Это является маленьким и быстрым и должно быть достаточно для Ваших потребностей. Другие возможные варианты, например, XFCE и LXDE.
Если Вы имеете 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
Я обнаружил, что для моей системы опубликованное решение, включающее 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
Ответ 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
на вывод, подобный этому.
xdotool keyup 204
. – Adam Spiers 07.05.2015, 03:13DISAPLAY=:1 xmodmap -pk | grep -iP 'alt|meta|super|hyper'
. Необходимо будет изменить число дисплея на поврежденное число дисплея VNC. – srking 19.11.2015, 00:17DISPLAY=:1
в вышеупомянутом комментарии. – Adam Spiers 19.11.2015, 11:47xdotool
поддержки a--clearmodifiers
опция дляkey
/keydown
/keyup
– возможно, это не сделало, когда этот ответ был записан? Я ожидаю этоxdotool keyup --clearmodifiers space
работал бы. (xdotool keyup
требует, чтобы ключ был указан; “пространство” произвольно.) – Rory O'Kane 18.05.2017, 20:30