Linux: Удобное переключение раскладка клавиатуры

Linux: Удобное переключение раскладка клавиатуры

по статье на Хабре
Во первых что нужно?

В Украине или еще где используется как минимум 3-и клавиатуры: русская, английская и национальная. им видимо тз на разработку программного обеспечения не давали ;)

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

Есть два подхода для решения проблемы:

  • использование комбинаций клавиш
  • удобное размещение раскладок

Использование кода символов

В linux, можно прописать символ через код, зажав Ctrl + Shift, нажать и отпустить клавишу u и прописать hex код символа. Потом отпустить Ctrl + Shift.
Коды для украинских символов:

  • i0456
  • І0406
  • ї0457
  • Ї0407
  • є0454
  • Є0404
  • Ґ
  • ґ

Минусы:

  • Не везде работает.

Плюсы:

  • В принципе работает.
  • Не требует «еще» одной раскладки

Использование Compose клавиши

Клавиша compose также известна под названием «Multi_key» в X Window System. В XFree86 и X.Org Server многие раскладки клавиатуры предусматривают различные варианты расположение Multi_key, обычно используемых в PC-совместимых архитектурах; часто в этой роли выступает одна из клавиш «Windows». Также может быть изменена при помощи XkbOptions (например «compose:rwin»). Multi_key может быть также назначена при помощи утилиты xmodmap.

Настроить эту клавишу можно еще с помощью setxkbmap ( например, setxkbmap -option compose:rwin устанавливает правую Win клавишу на ComposeKey ).

Главная возможность — собственные сочетания. Пример: ComposeKey + Ы выводилась І, ComposeKey + ъ выводилась ї. Запомнить просто, и использовать еще проще.

Проблема с Gnome

У Gnome сочетания жестко вписаны в код для совместимости на всех локалях. Но можно переопределить с помощью Xwindow Input Method (XIM). Для этого нам нужно установить переменную окружения GTK_IM_MODULE = "xim". Пропишем в ~/.bashrc ( если нужно для всех пользователей, то в /etc/environment ):

export GTK_IM_MODULE="xim"

Прописывание комбинаций для Compose клавиши

Утилита xev, выводит все события иксов.

KeyPress event, serial 35, synthetic NO, window 0x4800001,
root 0x15a, subw 0x0, time 191545195, (-229,390), root:(776,413),
state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES,
XLookupString gives 2 bytes: (d1 8c) "ь"
XmbLookupString gives 2 bytes: (d1 8c) "ь"
XFilterEvent returns: False
 
KeyRelease event, serial 35, synthetic NO, window 0x4800001,
root 0x15a, subw 0x0, time 191545265, (-229,390), root:(776,413),
state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES,
XLookupString gives 2 bytes: (d1 8c) "ь"
XFilterEvent returns: False

Смотрим на строку state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES, вот этот Cyrillic_softsign и есть названием клавиши.

Для примера возьмем сочетание, чтобы по ComposeKey + ы выводился символ i. Находим название клавиши «ы». xev говорит, что символ называется Cyrillic_yeru. Дальше, находим в unicode таблице символ «i» и ее код: U0456. Строчка для описании комбинации будет выглядеть так:
: «i» U0456

~/.XCompose:

include "/usr/share/X11/locale/en_US.UTF-8/Compose"
  : "є" U0454
  : "Є" U0404
  : "i" U0456
  : "І" U0406
  : "ґ" U0491
  : "Ґ" U0490
  : "ї" U0457
  : "Ї" U0407

Смена раскладки по событию

#!/bin/bash
if [[ `gconftool-2 --get /desktop/gnome/peripherals/keyboard/kbd/layouts` == "[us,ru]" ]]
then
gconftool-2 --set /desktop/gnome/peripherals/keyboard/kbd/layouts -t list --list-type "string" [us,ua]
else
gconftool-2 --set /desktop/gnome/peripherals/keyboard/kbd/layouts -t list --list-type "string" [us,ru]
fi

Или так:

$ cat ~/bin/kb_ru

#!/bin/sh
setxkbmap -layout "us,ru(common)"

$ cat ~/bin/kb_ua

#!/bin/sh
setxkbmap -layout "us,ua(legacy)"

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title