Почему клавиша Scroll Lock отключена в Cinnamon / Linux / Xorg?


13

Недавно я приобрел клавиатуру с подсветкой, которая была разработана таким образом, что клавиша Scroll Lock использовалась для переключения подсветки. Я быстро обнаружил, что Cinnamon не реагирует должным образом при нажатии клавиши Scroll Lock. Первоначально я думал, что подсветка клавиатуры была DOA, потому что все остальное работало из коробки. После перезагрузки я обнаружил, что перед запуском Xorg я смог успешно переключать подсветку с помощью клавиши Scroll Lock. Затем, еще раз, после запуска Xorg (и, следовательно, cinnamon_session), эта функциональность снова перестала работать.

Чтобы заставить работать подсветку после запуска Xorg, я был вынужден выполнить команду: xset led named "Scroll Lock"чтобы включить и отключить эту функцию.

После небольшого исследования я наткнулся на программу, которая вызвала информацию xevо событиях, связанных с ключом, в терминал после его запуска. После нажатия клавиши Scroll Lock терминал заполнялся этой информацией:

Событие KeyPress, серийный номер 34, синтетический номер NO, окно 0x2c00001, корень 0x2df, subw 0x0, время 2609824, (410,0), корень: (1724,142), состояние 0x0, код ключа 78 (keysym 0xff14, Scroll_Lock), same_screen YES, XLookupString дает 0 байтов: XmbLookupString дает 0 байтов: XFilterEvent возвращает: False

Событие KeyRelease, серийный номер 37, синтетический номер NO, окно 0x2c00001, корень 0x2df, subw 0x0, время 2609912, (410,0), корень: (1724,142), состояние 0x0, код ключа 78 (keysym 0xff14, Scroll_Lock), same_screen YES, XLookupString дает 0 байтов:

Итак, я знаю, что ключевое событие отправляется ядру.

Также, что интересно, я наблюдал странное поведение в терминале (еще до запуска Xorg или Cinnamon) и при использовании Scroll Lock. А именно, в этот момент моя подсветка переключалась, как и ожидалось, но когда Scroll Lock был включен, я ничего не печатал на экране. После отключения Scroll Lock все, что я написал, было немедленно сброшено в терминал, как если бы оно было ранее буферизовано.

tl; dr. Как обстоят дела с Scroll Lock и Xorg?


Удачи в решении этой проблемы @sherrellbc?
Пиклер

Ответы:


10

Я не знаком с Cinnamon, но должна быть возможность включить клавишу Scroll Lock.

Во-первых, нам нужно проверить, есть ли у вас запасной слот для модификатора клавиатуры. Бегать:

xmodmap -pm

Это напечатает список ваших текущих настроек модификатора. Надеемся, что в одной из этих строк не будет никаких ключей в списке; в общем то будет mod3. Предполагая, что это так, вы можете включить Scroll Lock с помощью этой команды:

xmodmap -e "add mod3 = Scroll_Lock"

Теперь светодиод Scroll Lock должен реагировать на нажатия клавиш Scroll Lock.

Если это сработает, вы, вероятно, захотите, чтобы X делал это автоматически при каждом запуске. Есть разные способы сделать это: это может быть сделано для каждого пользователя, но для чего-то подобного, я думаю, имеет смысл установить его глобально.

Но я никогда не делал этого раньше себя, поэтому я бы лучше проверил это, прежде чем давать более подробную информацию. :)

OK. Метод, который я пытался активировать, этот modmap глобально не работает для меня в KDE. :( Но активация в моем домашнем каталоге, похоже, работает нормально.

Создайте файл с именем .Xmodmapв вашем домашнем каталоге, содержащий эту строку:

add mod3 = Scroll_Lock

Самый простой способ сделать это:

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"

Теперь перезапустите X (выйдите из системы и войдите снова). Надеюсь, ваша клавиша Scroll Lock будет работать. Если это не так, пожалуйста, дайте мне знать.


Конфигурация .Xmodmap у меня не работала на Ubuntu 16.04 / Unity, но постоянное решение в ответе Пиклера сработало :)
Nebel54

7

Нашел постоянный путь после долгой ночи с большим количеством полуготовых растворов.

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 

Добавьте следующую строку в xkb_symbols "basic" {раздел. не беспокойтесь, если этой второй строки нет, она есть только для некоторых языков и не была для нас в моей системе.

...
    modifier_map Mod3   { Scroll_Lock }; <==<< Add this line

    include "level3(ralt_switch)" <==<< before this line
};

Возможно, вам придется сделать то же самое в других макетах, если вы переключаетесь между языками

Также есть кеш, где живут макеты xkb. Вы должны очистить его перед перезапуском X-сервера, чтобы проверить новые файлы символов клавиатуры.

sudo rm -f /var/lib/xkb/*

Это хорошо, но это работало только вместе с изменением gsettings и xkboptions, упомянутых в askubuntu.com/a/1067921/274298 для меня.
Песчу

2

Поскольку они Scroll Lockмогут мешать сочетаниям клавиш, когда они активны (по имени F12, Ctrl+ Spaceне будет работать должным образом), я решил сопоставить Scroll Lockклавишу с ручным запуском xset, переключая состояние светодиода относительно его предыдущего состояния.

Я создал исполняемый скрипт с именем toggle_keyb_led.sh:

xset q | awk '/LED/{ if ($10 ~ "00000000") print "led"; else print "-led" }' | xargs xset

Это анализирует вывод xset q, сопоставляя строку с LED mask.

Примечание 1 : Если у вас не работает, уточните, xset -led; xset q | grep 'LED'какое значение имеет текущая маска.

Примечание 2 : Некоторые пользователи должны запустить, xset led 3чтобы активировать свет. В этом случае перепишите скрипт выше.


Затем вы можете запустить этот сценарий как пользовательский ярлык, используя вашу рабочую среду, как (здесь с Cinnamon):

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.