LINUX.ORG.RU

После setxkbmap не работает смена раскладки


0

1

Для настройки клавиатуры в системе стоят xbindkeys и keytouch.

Работают безукоризненно.

Хочу повесить на мультимединую клавишу смену раскладки. Для этого нужна консольная команда смены раскладки, которую нужно скормить интерфейсу keytouch.

Нагуглил

setxkbmap -layout us
setxkbmap -layout ru

Раскладка действительно переключается, только после применения перестаёт работать переключение раскладок по Ctrl+Shift.

После перезапуска X все встаёт на свои места.

Почему setxkbmap не до конца подхватывает настройки xorg.conf?

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

Остервенело гуглю, буду рад если кто-то подсобит советом.

change keyboard layout command line setxkbmap


>setxkbmap -layout us

setxkbmap -layout ru

Могу ошибаться, но по-моему после этих команд у тебя остаётся всего одна раскладка.

Пользуюсь вот такой командой:

setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle,grp_led:scroll,numpad:microsoft,compose:caps'

предварительно запустив какую-нибудь программу, которая обеспечивает запоминание текущей раскладки для каждого окна.

Откуда взял информацию, уже не помню, но обошёлся даже без гугла — man setxkbmap, man xorg.conf и /usr/share/.

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

Отлично, большое спасибо за подсказки!

На одну клавишу повесил

setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle'
на другую
setxkbmap -layout 'ru,us' -option 'grp:ctrl_shift_toggle'
В итоге и переключение остаётся, и текущая раскладка меняется.

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

А нет, такой вариант работает правильно лишь тогда когда текущая раскладка английския.

Иначе клавиши меняются ролями.

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

Ага, вот такой монстр работает кажись.

На одну

setxkbmap -layout 'us' && setxkbmap -layout 'ru,us' -option 'grp:ctrl_shift_toggle' && aoss espeak -s 300 "ru" >/dev/null 2>&1 & 

На другую

setxkbmap -layout 'us' && setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' && aoss espeak -s 300 "US" >/dev/null 2>&1 & 

Но это же совсем ублюдочно и задержка ощутимая.

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

Блин всё-таки нерабочий монстр. Тоже зависит от текущей раскладки.

ps полотно Сандро Боттичелли «Рождение Быдлокодера». Х11, dwm, keytouch.

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

Имитируйте нажатие переключения.При помощи утилиты xdotool это можно проделать, а setxkbmap -оно устанавливает заново, потому и портит.

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

Спасибо, почти то. Только xdotool эмулирует нажатия клавиш. А мне эти-то сами клавиши и нужно настроить ;)

Я видел что можно раcпотрошить иксы и назначить ISO_Last_Group на конкретное нажатие, но хочется консольной команды.

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

Короче, поковырял я это дело и нашёл работающее и не очень костыльное решение (было предыдущее, которое тоже работало, но было жутко костыльно):

1. Вешаем переключение раскладок (три штуки в даном случае) на какую-то левую клавишу, например правый win, которого у меня на клавиатуре вовсе нет:

setxkbmap -layout 'us,ua,ru' -option 'grp:rwin_toggle'

2. Пишем скриптик switchtolang.sh для переключения (он перебирает раскладки посредством имитации нажатия rwin, пока не дойдёт до нужной, если нужная уже включена - ничего не делает)

#! /bin/sh

while [ `skb -1` != $1 ]
    do
        xdotool key ISO_Next_Group
    done

3. Вешаем на хоткеи соответствующие действия (у меня - switchtolang.sh USA, switchtolang.sh Ukr, switchtolang.sh Rus)

skb можно скачать тут: http://www.rootshell.be/~polachok/code/

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

Чертовски в точку! Мегареспект, думаю это будет многим полезно.

Пару добавлений: передать внутрииксовый код ISO_Next_Group не выйдет, у меня сработал вариант

#! /bin/sh 
while [ `skb -1` != $1 ] 
    do 
        xdotool key Ctrl+Shift
    done

Далее вышеописанный скрипт был скормлен программе keytouch. Я её использую потому что она с полоборота завела редкие дополнительные клавиши.

Если же нужно повесить команду/скрипт на какое-то сочетание стандартных клавиш, то лучше юзать xbindkeys.

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

У меня все хоткеи настроены в WM, чтоб не плодить сущности. Тем более в xmonad(+EZConfig) это очень удобно сделано.

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

В dwm мне не удалось с первого раза назначить хоткеем клавишу, не перечисленную в дефолтном конфиге, например, X_Up, перепробовал все строчные и прописные.

xmonad висит пока на отдельном Xсервере, перехожу на него.

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