Доброго времени суток!
По случаю наличия некоторго количества свободного времени я не только в блоге активизировался но и начал наносить добро PC-BSD более предметно.
Сегодня попробую рассказать (или как минимум начну рассказывать) как и почему я сейчас делаю новую настройку клавиатуры.
Ну, для затравки скриншоты того что есть на данный момент. Пугаться рано! Это далеко не последний вариант.
Предыстория
Создание практически любой утилиты PC-BSD для меня начинается с дискомфорта. Находится какая- то вещь, которая меня раздражает или которой мне не хватает. Я некоторое время терплю, после чего понимаю что кроме меня ее фиг кто сделает и превозмогая лень запускаю Qt Creator.Так вот. В PC-BSD нет общесистемной настройки клавиатуры. Так чтобы с раскладками, с настройкой клавищ переключения. Если пользоваться, скажем, KDE проблема не велика. Можно настроить в KDE. Но если переодически еще и Mate запускается, то нужно повторить настройку и там. А если Вы вдруг используете LXDE или Lumina тогда вообще все плохо- без консоли тут уже никак. Ну нету ни в LXDE ни в Lumina родной настройки раскладок :( Плюс ко всему даже в KDE по умолчанию начиная с PC-BSD 10.0 переключалка раскладки поломана!
Надежды что Крис или Кен додумаются мало- у них по жизни одна раскладка- En(us). Они о моей боли даже не подозревают.
Требования
Ок. Решено- делаю настройщик клавиатуры. Но перед тем чтобы взятся за Qt нужно понять что же я хочу получить в итоге. У меня родился такой список:- Настройка клавиатуры должны включать в себя выбор модели клавиатуры, настройку раскладок (с вариантами), простую настройку клавиш переключения раскладки и расширенную настройку опций клавиатуры.
- Настройка должна проводится как для всей системы (как настройка по умолчанию) так и только для текущего пользователя.
- Хорошо бы потом эту же утилиту использовать в Lumina как родную настройку клавиатуры.
- Кроме самой утилиты очень желательно добавить возможность настройки клавиатуры прямо в инсталяторе и в мастере первого запуска
Минусы
Ну куда ж без них? По факту минус только один- окружения рабочего стола, в которых клавиатура уже настроена настройки клавиатуры, сделаные в моей утилите высокомерно проигнорируют. И заставлять их поступять по-другому я не буду.Просвещение
Что хочу понятно. Что буду тоже определили. Теперь осталось понять как это сделать.Дальше немного технических деталей.
Настройка переключения клавиатуры в сервере xorg может быть выполнена двумя способами: прописыванием конфигурации клавиатуры в настройках сервера (xorg.conf) и с помощью вызова утилиты setxkbmap.
Последний вариант как раз мой. Во- первых настройки применяются с ходу, во- вторых вызов setxkbmap можно вставить куда нужно с тем, чтобы настроить клавиатуру именно когда нужно и для кого нужно.
Чтобы получить начальное представление о настройках раскладок в xorg можно посмотреть хотя бы эту страницу: http://xgu.ru/wiki/xkb (уже на русском, для ленивых).
Как менять параметры клавиатуры уже более или менее понятно. Теперь вопрос в том где взять информацию обо всех возможных раскладках и настройках? Должна же она где- то быть. Пару минут втыкания в исходники менеджера входа PC-BSD и минута гуглежа указывают мне на файл
/usr/local/share/X11/xkb/rules/base.lst. Вот оно! Тут есть все! И все возможные раскладки. И все возможные варианты для всех раскладок и все поддерживаемые модели клавиатуры. И даже описания ко всему.
Файл разделен на секции. Описания всех возможных моделей клавиатур выглядит так:
Открываем файл, натыкаемся на строчку "! model" и наслаждаемся! model
pc101 Generic 101-key PC
pc102 Generic 102-key (Intl) PC
pc104 Generic 104-key PC
pc105 Generic 105-key (Intl) PC
dell101 Dell 101-key PC
latitude Dell Latitude series laptop(ну и дальше много- много строчек)
Описания раскладок выглядят не менее просто:
Вычитать это из файла- типичная школьная задачка по программированию.! layout
us English (US)
af Afghani
ara Arabic
al Albanian
am Armenian
at German (Austria)
az Azerbaijani
by Belarusian
..................
Варианты раскладок только чуточку сложнее:
! variantТут, очевидно, с начала идет идентификатор варианта раскладки потом идентификатор раскладки с двоеточием. На и на последок, собственно, описание варианта раскладки. Все по прежнему просто, только нужно еще соответствующую раскладку найти.
chr us: Cherokee
euro us: English (US, with euro on 5)
intl us: English (US, international with dead keys)
..................
ps af: Pashto
uz af: Uzbek (Afghanistan)
olpc-ps af: Pashto (Afghanistan, OLPC)
fa-olpc af: Persian (Afghanistan, Dari OLPC)
uz-olpc af: Uzbek (Afghanistan, OLPC)
..................
Теперь настройки. Они собраны в группы:
! optionС начала идет описание всей группы настроек. Потом, собственно, все возмоджые настройки с описаниями.
grp Switching to another layout
grp:switch Right Alt (while pressed)
grp:lswitch Left Alt (while pressed)
grp:lwin_switch Left Win (while pressed)
grp:rwin_switch Right Win (while pressed)
grp:win_switch Any Win key (while pressed)
grp:ctrl_alt_toggle Alt+Ctrl
grp:alt_shift_toggle Alt+Shift
..................
Теперь как жеж нам узнать текущие настройки? Гуглим... Элементарно:
%setxkbmap -queryТут и модель клавиатуры и раскладки с вариантами и настройки...
rules: base
model: pc101
layout: us,ua,ru
variant: ,winkeys,
options: terminate:ctrl_alt_bksp,grp:alt_shift_toggle
Вобщем все понятно:
- Текущие настройки получаем с помощью setxkbmap -query
- Описания ко всему берем из base.lst
- При добавлении раскладки, отображении моделей клавиатур и отображении всех опций используем все тот же base.lst
- То что в итоге получится собираем в строку вызова setxkbmap и либо просто его вызываем ("Применить") либо вставляем в тот или иной скрипт (либо скрипт старта xorg, либо в скрипт начала пользовательской сессии)
- Profit!
setxkbmap -model pc101 -layout "us,ua(winkeys),ru" -option "terminate:ctrl_alt_bksp,grp:alt_shift_toggle"
Тут написано что клавиатура у меня обычная 101-клавишная, использую я три раскладки (английскую, украинскую с вариантом Winkeys и русскую), переключаю я раскладки по Alt+Shift ну и могу завершить работу X сервера нажав Ctrl+Alt+Backspace.
Продолжение следует...
Немає коментарів:
Дописати коментар