LINUX.ORG.RU

Переключатель клавиатуры для Х


0

1

Господа, подскажите решение такой проблемы. Требуется настроить переключение 3-х раскладок клавиатуры, скажем Рус, Укр, Англ. Причем, раскладки переключаются не циклично одной клавишей, а для каждой раскладки выделенная клавиша. (Идеально: lshift, lctrl, lalt).

Интересует максимально легковесное решение, так как сижу под голыми Х'ами + awesome wm. Может есть софт какой?

https://github.com/qnikst/kbdd/wiki/Usecases например. Для включения раскладок lshift/lctrl/lalt понадобится actkbd, наверно (нет, если тебя устроит выделение lshift/lctrl/lalt только для раскладки с очисткой нормальной функции — это реализуется средствами иксов через тот же xmodmap, но зачем?). Достаточно легковесно?

x3al ★★★★★
()
Ответ на: комментарий от u283

Элементарно: lshift всегда переключает на eng, lctrl всегда на рус, lalt - всегда на укр. Цель: разгрузить голову от запоминания и глаза от перепроверки «какая сейчас раскладка?». Для меня реально так легче работать - проверено 2года на win.

testrash
() автор топика
Ответ на: комментарий от u283

У меня точно так же, но rshift/rctrl/ralt/rctrl+ralt. Работается нормально. В комбинациях они работают как обычно, а не переключалками. Решением поделиться не могу потому, что оно под оффтопик.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Давно не читал ман по actkbd, но вроде бы делается так: по нажатию и отпусканию shift чистится какой-нибудь левый set(), по нажатию любой клавиши кроме shift устанавливается set, если shift отпущен без установленного set() — послать кейкод, который ловить иксами и переключать раскладку любым удобным способом. Повторить для остальных клавиш. Не уверен, что можно более прямым способом ловить одиночное нажатие модификатора.

x3al ★★★★★
()
Ответ на: комментарий от u283

ублин. а работать как?

Да, забыл добавить - переключение осуществляется только на одиночные нажатия. Всякие комбинации, типа Сtrl-C раскладку не переключают.

testrash
() автор топика
Ответ на: комментарий от x3al

Сейчас переключние настроено редактированием xorg.conf Option «XkbLayout» «us, ru, ua» Option «XkbOptions» «grp:rctrl_toggle»

Я так мыслю - если система может по rctrl переключать раскладки циклически, то скорее всего несложно ее заставить переключать нециклически по rshift, rctrl, ralt.

testrash
() автор топика
Ответ на: комментарий от testrash

Из нециклического xkb нативно умеет только ISO_FIRST_GROUP и ISO_LAST_GROUP, для трёх раскладок этого мало. Ну и rctrl в этом варианте не работает как модификатор, емнип. Поэтому приходится переключать раскладку на нужную снаружи и танцевать с бубном для отлавливания одиночного нажатия модификатора.

x3al ★★★★★
()

Может есть софт какой?

Есть — ваш любимый текстовый редактор и файл /usr/share/X11/xkb/symbols/ru + утилита setxkbmap (или файл xorg.conf). Дописываете недостающие украинские символы на третий/четвёртый уровни, и у вас отпадает необходимость в третьей раскладке, а значит можно обойтись штатными средствами xkb, и повесить включение раскладок, ну, скажем на клавиши win, а правый alt оставить для третьего уровня. Я таким способом работаю с четырьмя раскладками.

anonymous
()
Ответ на: комментарий от NeverLoved

Только что проверил, работает нормально. И как раз то, чего ты хочешь. Без цикличности, тупо по хоткею указывать одну раскладку, и при нажатии на другой хоткей менять на другую. И без спецсофта.

NeverLoved ★★★★★
()
Ответ на: комментарий от NeverLoved

Только что проверил, работает нормально. И как раз то, чего ты >хочешь. Без цикличности, тупо по хоткею указывать одну >раскладку, и при нажатии на другой хоткей менять на другую. И >без спецсофта.

О, спасибо, сейчас попробую. А чем хоткеи настраивал, если не секрет?

testrash
() автор топика

Проблему для себя решил частично воспользовавшись идеей NeverLoved.
Решение (debian 7.1, awesome 3.4.13):
в файле /etc/xdg/awesome/rc.lua в определение globalkeys добавляем новые hotkeys.

--------------
globalkeys = awful.util.table.join(
    ...

 awful.key({}, «#62», function () awful.util.spawn(«setxkbmap us») end),
 awful.key({}, «#105», function () awful.util.spawn(«setxkbmap ru») end),
 awful.key({}, «#108», function () awful.util.spawn(«setxkbmap ua») end)
)
-------------
#62 - rshift, #105 - rctrl, #108 - ralt

Единственный недостаток - при нажатии rshift, rctrl, ralt в комбинациях с другими клавишами раскладка также переключается. Но для меня это не принципиально, так как использую левые модификаторы для комбинаций. Кроме того немного напрягает, что при каждом переключении используется запуск внешней программы (setxkbmap). Хочется что-то легче. Но в целом - задачу решает.

Всем отметившимся в теме - спасибо за помощь.

testrash
() автор топика

А кто-то еще спрашивает «готов ли линукс для десктопа ?». Конечно готов, переключалки нормальной нет, но готов. Одни вон тут lxde форкают другие все темы создают «чегойт мне запилить нужненького ?». Вот мля, пили. Нужненькое, люди спасибо скажут. Дак нет же, все костылями подпирают.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.