Заметка про ещё один экзотический девайс и Linux.

Клавиатура от яблочников без труда определяется более-менее современным PC ещё на уровне bios, в Linux же без дополнительных телодвижений подхватывается стандартным "USB HID" драйвером. Печатать, и даже по-русски, уже можно =)

И что самое главное, подхватываются и нестандартные клавиши: xev реагирует например на нажатие клавиши повышения громкости и возвращает keycode:

KeyRelease event, serial 30, synthetic NO, window 0xe00001,
root 0x9f, subw 0x0, time 806958, (-515,533), root:(576,561),
state 0x10, keycode 176 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:

Теперь о том, что собственно подлежит настройке.

Поставим Alt на место.

Наверно самым неудобным (а скорее непривычным) кажется расположение клавиш "Alt", которые помещены непосредственно рядом с "Ctrl", так что естественным будет желание поменять их местами с "command" (кнопками с изображениями яблок).

Посмотрим модификаторы (альты, меты и проч.) по умолчанию:
bash-2.05b$ xmodmap -pm
xmodmap: up to 3 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x6d)
mod1 Alt_L (0x40), Alt_L (0x7d), Meta_L (0x9c)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x7f), Hyper_L (0x80)
mod5 Mode_switch (0x5d), ISO_Level3_Shift (0x7c)

И посмотрим маппинг нужных нам клавиш по умолчанию:
bash-2.05b$ xmodmap -pke | grep Alt ; xmodmap -pke | grep Super
keycode 64 = Alt_L Meta_L
keycode 113 = Alt_R Meta_R
keycode 125 = NoSymbol Alt_L
keycode 115 = Super_L
keycode 116 = Super_R
keycode 127 = NoSymbol Super_L

Очистим старые модификаторы:
bash-2.05b$ xmodmap -e "clear mod4"
bash-2.05b$ xmodmap -e "clear mod1"

Переназначим кнопки:
bash-2.05b$ xmodmap -e "keycode 64 = Super_L"
bash-2.05b$ xmodmap -e "keycode 115 = Alt_L Meta_L"
bash-2.05b$ xmodmap -e "keycode 113 = Super_R"
bash-2.05b$ xmodmap -e "keycode 116 = Alt_R Meta_R"
Переназначим модификаторы:

bash-2.05b$ xmodmap -e "add mod1 = Meta_L"
bash-2.05b$ xmodmap -e "add mod1 = Alt_L"
bash-2.05b$ xmodmap -e "add mod4 = Super_L"
Для автоматического применения запишем эти правила в ~/.xmodmaprc:
!Очистим старые модификаторы:
clear mod4
clear mod1
!Переназначим кнопки:
keycode 64 = Super_L
keycode 115 = Alt_L Meta_L
keycode 113 = Super_R
keycode 116 = Alt_R Meta_R
!Переназначим модификаторы:
add mod1 = Meta_L
add mod1 = Alt_L
add mod4 = Super_L
Запускать его следует так (можно прописать запуск например в ~/.xsession.d/):
bash-2.05b$ xmodmap $HOME/.xmodmaprc
И немного сcылок по теме:
Отличный how-to
Статья на Gentoo-wiki
Про ремапинг клавиш в целом

Настройка мультимедиаклавиш.
Запускаем xev и выясняем коды для мультимедиаклавиш, это 174, 176, 160 и 204 соответственно. Теперь замапим их соответствующим образом:
bash-2.05b$ xmodmap -e "keycode 174 = XF86AudioLowerVolume"
bash-2.05b$ xmodmap -e "keycode 176 = XF86AudioRaiseVolume"
bash-2.05b$ xmodmap -e "keycode 160 = XF86AudioMute"
bash-2.05b$ xmodmap -e "keycode 204 = XF86Eject"
Замечу, что это стандартные иксовые идентификаторы для такого рода кнопок, поэтому например в IceWM они будут работать уже после рестарта оконного менеджера. Привожу строки из дефолтного конфига IceWM (для привязки клавиш в других оконных средах смотрите их доки):
key "XF86AudioLowerVolume" aumix -v -5
key "XF86AudioRaiseVolume" aumix -v +5
key "XF86AudioMute" aumix -v 0
key "XF86Eject" eject

Ну и пропишем эти маппинги в
~/.xmodmaprc:
!Мультимедиа клавиши:
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 160 = XF86AudioMute
keycode 204 = XF86Eject
Аналогично можно замапить и любые другие клавиши, например F13-F16.

UPD Актуальный .xmodmaprc:
!Очистим старые модификаторы:
clear mod4
clear mod1

!Переназначим кнопки:
keycode 64 = Super_L
keycode 133 = Alt_L Meta_L
!keycode 134 = Alt_R Meta_R
keycode 108 = Super_R

!Правый альт -- Compose key:
keycode 134 = Multi_key

!Переназначим модификаторы:
add mod1 = Meta_L
add mod1 = Alt_L
add mod4 = Super_L

!F13-F16
keycode 191 = F13
keycode 192 = F14
keycode 193 = F15
keycode 194 = F16

!Мультимедиа клавиши (теперь работают из коробки):
!keycode 122 = XF86AudioLowerVolume
!keycode 123 = XF86AudioRaiseVolume
!keycode 121 = XF86AudioMute
!keycode 204 = XF86Eject

Небольшая заметка о выборе и настройке usb-телефона под linux.
Выбор.
Меня интересовала не просто работа микрофона и динамика, но и как минимум клавиатуры.
Выбор пал на Skypemate p1K (в девичестве Yealink), как не на очень дорогой апппарат, при этом имеющий как полноценную клавиатуру ("как у мобильника"), так и простенький ЖК-дисплей. Ко всему прочему поддержка именно этого девайса в linux наиболее развита.
Настройка.
Поддержка собственно звука не требует практически никакой настройки. Девайс определяется как новая звуковуха:
-bash-2.05b# cat /proc/asound/cards
....
USB-Audio - VOIP USB Phone
Yealink Network Technology Ltd. VOIP USB Phone at usb-0000:00:03.0-3
В sip-клиенте достаточно выбрать например "/dev/dsp2" в качеcтве динамика/микрофона.
Что касается клавиатуры, то с этим ситуация несколько сложней.
Есть несколько проектов разной степени работоспособности:
1. SkypeMate - официальный драйвер. Бинарный, только для FedoraCore 3 (требует старый dbus-0.23). Плюс ко всему только для Skype. Отдельные джидаи запускали его на современных дистрибутивах с подменой либы dbus, с периодическими сегфолтами, я с этим заморачиваться не стал.
2. USBB2K-API - неофициальный драйвер. По отзывам пользователей - работает, однако у меня он не завелся. Девайс определялся, команды на телефон шли, однако обратной связи не наблюдалось. При этом на форумах отписывали пользователи с аналогичной проблемой, разработчики пытались им даже помочь, но дело там так и не сдвинулось с мертвой точки.
3. yealink-module - как видно из названия модуль для ядра. Последняя версия из CVS у меня собралась лишь после жесткой правки сорцов и после этого кончено нормально не работала, однако релиз за номером 0861 собрался сразу и без проблем был установлен. Замечу, что поддержка клавиатуры в нем реализована просто и универсально: клавиши телефона дублируют клавиши клавиатуры (цифровые, backspace, enter и т.д.)


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.