Я хочу отобразить сочетания клавиш на ярлыки в Lubuntu, но вывод xev смущает меня

Я использую Toshiba R835 с Lubuntu. После чистой установки нажатие кнопки питания, когда машина включена, ничего не делает. Я исправил кнопку питания, следуя этому совету :

Я добавил эти строки в ~ / .config / openbox / lubuntu-rc.xml

<keybind key="XF86PowerOff">
<action name="Execute">
<command>lubuntu-logout</command>
</action>
</keybind>

Это делает смысл для меня.

Я хочу сопоставить несколько других клавиш аналогичным ярлыкам. Например, когда я нажимаю Fn-F1, я хочу заблокировать экран. Я полагаю, я бы добавил что-то вроде

<keybind key="XF86ScreenSaver">
<action name="Execute">
<command>xscreensaver-command -lock</command>
</action>
</keybind>

. Однако, когда я нажимаю Fn-F1, он открывает меню Lubuntu, как если бы я нажал клавишу Super_L. Он также печатает букву l, если у меня открыт терминал. Мой желаемый ярлык xscreensaver-command -lock, похоже, игнорируется. Что происходит? Почему мой ярлык не работает?

Я думал, что смогу разобраться с этим с помощью xev, но вывод xev смущает меня:

FocusOut event, serial 41, synthetic NO, window 0x2000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x2000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

MappingNotify event, serial 41, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525549, (289,-138), root:(341,155),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525550, (289,-138), root:(341,155),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 42, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyRelease event, serial 42, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525639, (289,-138), root:(341,155),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525646, (289,-138), root:(341,155),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Похоже, я получить код 160, который, я думаю, называется XF86ScreenSaver, но это также как если бы я нажал клавишу Super_L и клавишу l. Я думаю, что весь этот вывод происходит от одного нажатия клавиши Fn-F1. Это смущает меня. Как заставить Fn-F1 заблокировать экран вместо того, чтобы открывать меню Lubuntu и вводить букву 'l'?

3
задан 28 February 2012 в 10:10

2 ответа

Можно выполнить это с xbindkeys приложением. Откройте окно терминала и введите следующее:

sudo apt-get install xbindkeys

После того, как установленный Вы хотите создать два файла в своем названном корневом каталоге:

.xbindkeysrc

Этот файл будет содержать Ваши конфигурации для Ваших привязок клавиш

.xbindkeys.noauto

Это просто будет пустым файлом, но когда он будет существовать, он мешает Xserver запускаться xbindkeys при начальной загрузке. Хотя мы хотим, чтобы это запустилось при начальной загрузке, мы хотим запустить его сами через Приложения Запуска. Причиной этого является Xserver, запускает его к рано в процессе начальной загрузки, который иногда вызывает наши конфигурации, что мы вставляем наш .xbindkeysrc файл для не работы.


Теперь добавьте следующие строки к Вашему .xbindkeysrc файл

"xscreensaver-command -lock"
c:160

Сохраните файл

Теперь создайте немного сценария для запуска xbindkeys то, что мы поместим в наши Приложения Запуска:

Откройте свой любимый текстовый редактор и или копия и вставьте или введите следующие строки к нему:

#!/bin/bash

sleep 10
/usr/bin/xbindkeys &

Сохраните его в своем корневом каталоге как xbstart.sh или независимо от того, что Вы хотите

Сделайте это исполняемым файлом

chmod 755 xbstart.sh

Теперь просто добавьте что сценарий к своим Приложениям Запуска и Перезагрузке.


То, что происходит, - когда Вы входите в систему, xbindkeys вызывается и читает Ваш .xbindkeysrc файл и выполнения в фоновом режиме. Это постоянно контролирует Ваши нажатия клавиш и когда keycode 160 нажимается это захватит его, прежде чем Xserver будет иметь шанс к тому, чтобы заставлять это работать xscreensaver-command -lock вместо того, чтобы открыть Ваше меню.

2
ответ дан 28 February 2012 в 10:10

Я добавил это

<keybind key="C-A-L">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

, поэтому, когда я делаю Crt + Alt + L мой запуск screebscaver .. . как @fossfreedom покажи мне

, поэтому я полагаю, что ты должен сделать что-то подобное

<keybind key="C-F1">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

, но сначала проверь, не используется ли эта связка клавиш.

... По поводу опции fn, которую вы хотели: я процитирую википедию .

В отличие от других клавиш-модификаторов, таких как Ctrl, Shift и AltGr, микроконтроллер внутри клавиатуры обычно отправляет другой код клавиши в зависимости от того, нажата ли клавиша Fn. Это позволяет клавиатуре эмулировать полноразмерную клавиатуру, так что нет необходимости создавать специализированные сочетания клавиш; операционная система может использовать стандартные раскладки клавиш, предназначенные для полноразмерной клавиатуры. Поскольку операционная система не имеет понятия о клавише Fn, клавиша не может быть переназначена программно, в отличие от всех других стандартных клавиш клавиатуры.

0
ответ дан 28 February 2012 в 10:10

Другие вопросы по тегам:

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