Итак, вот что у меня получилось.
Исходные данные: Sharp Zaurus SL-C1000 (Akita), Angstrom 2007.12 (ручной сборки).
Я использовал modmap_ru_phonetic из modmap_430.zip в качестве русской раскладки.
Файлы раскладки я назвал в /etc/xmodmap.<layout> (xmodmap.en и xmodmap.ru, соответственно).
Переключение раскладки я повесил на клавишу "календарь" в левом нижнем углу клавиатуры. На FN+Shift без бубна повесить не удастся, они обе являются клавишами-модификаторами.
Скрипт я положил в каталог bin к руту. Поскольку я отключил gpe-login и работаю рутом сразу, то для меня это подходит. В случае, когда работа ведется не от рута, возможно, придется поплясать с бубном вокруг путей и прав доступа.
И в rxvt у меня переключение раскладок не работает.. Почему - не знаю, надо думать.
Итак, по шагам:
1. Копируем файл modmap_ru_phonetic (предварительно извлеченный из архива modmap_430.zip) в файл /etc/xmodmap.ru
2. Я решил создать файл с английской раскладкой из текущего modmap'а Angstrom. Для этого я сделал следующее (вывел текущее назначение клавиш и удалил пустые):
Код: Выделить всё
xmodmap -pke | grep -v '=$' > /etc/xmodmap.en
3. Создаем скрипт, который будет переключать раскладки. В принципе, это тот же скрипт, который можно найти в форуме, но с небольшими отличиями. Собственно, вот он:
Код: Выделить всё
#!/bin/sh
LAYOUT_FILE=/media/ram/kbd-layout
if [ -n "$1" ]; then
LAYOUT=$1
else
LAYOUT=`cat ${LAYOUT_FILE} 2>/dev/null`
fi
XM_DIR=/etc
if [ "${LAYOUT}" = "ru" ]; then
xmodmap ${XM_DIR}/xmodmap.ru && echo en > ${LAYOUT_FILE}
else
xmodmap ${XM_DIR}/xmodmap.en && echo ru > ${LAYOUT_FILE}
fi
Копируем этот код в текстовый файлик (для определенности назовем его ltsw.txt) и переправляем в заурус. Выполняем следующие команды (текст после знака "#" - это комментарий, вводить его не нужно):
Код: Выделить всё
mkdir /home/root/bin # создаем каталог для скриптов
cat ltsw.txt | tr -d \\r > /home/root/bin/ltsw # удаляем виндовые переводы строки и кладем в подготовленный каталог
chmod 755 /home/root/bin/ltsw # делаем его исполняемым
4. Настраиваем keylaunch. Открываем в редакторе файл /etc/keylaunchrc. В моем случае он выглядит так (уже после правки):
Код: Выделить всё
key=....F9:-:~/home/root/bin/ltsw
key=....F10:-:gpe-contacts
key=....F13:-:sylpheed
key=....F12:-:~matchbox-remote -next
key=...*F12:-:~matchbox-remote -desktop
key=....F11:-:~matchbox-remote -menu
#key=...*1:-:~zoom out
#key=...*2:-:~zoom in
key=...*3:-:~display-brightness.sh down
key=...*4:-:~display-brightness.sh up
# LCD Softkeys
# Please note that the space _between_ two softkeys can be used, too ;)
#key=....F20:-:
key=....F21:-:~matchbox-remote -desktop
#key=....F22:-:
#key=....F23:-:sylpheed
#key=....F24:-:
#key=....F25:-:gpe-contacts
#key=....F26:-:
#key=....F27:-:gpe-calendar
#key=....F28:-:
#key=....F29:-:
#key=....F30:-:
# VT changing
key=...*Left:-:~chvt 1
key=...*Right:-:~chvt 3
Я намеренно отключил почти все LCD-Softkeys, кроме одной, потому что при использовании полос прокрутки они неизбежно задеваются.. Но для нас сейчас важна первая строчка:
Тут написано, что по клавише F9 (которую как раз генерит кнопка "календарь") нужно запустить исполняемый модуль /home/root/bin/ltsw, не используя при этом механизм startup-notify (без визуальных эффектов ожидания открытия окна). Кстати, подробнее о keylaunchrc можно прочитать тут:
http://www.oesf.org/forum/index.php?sho ... ntry135362.
Убиваем keylaunch и запускаем заново:
Код: Выделить всё
killall keylaunch && keylaunch >/dev/null &
5. Пробуем! Для этого запускаем какое-то приложение (желательно, не rxvt для начала, а, скажем, текстовый редактор) и жмем кнопку "календарь" (только недолго жмем, а то автоповтор включится). Пробуем вводить русские буквы. Если все хорошо, радуемся и пропускаем остальные шаги.
6. Не заработало? Пробуем запустить скрипт ltsw вручную:
Этим самым мы попробуем включить английскую раскладку. Если скрипт ничего не сказал, значит это нам удалось. Если сказал, то, скорее всего, вы что-то напутали с путями, либо ваша система сильно отличается от моей (например, в плане наличия рамдиска из коробки). В этом случае, постите в форум вывод скрипта и будем разбираться.
Если же все отработало нормально, пробуем включить русскую раскладку (желательно при этом оставить себе хотя бы открытый rxvt или, еще лучше, зайти по ssh на заурус):
Если опять прошло с матюками, чиним то, на что матюкаются. Если не можем - просим помощи в форуме.
Если все нормально, проверяем. Если русские буквы во вновь запущенном текстовом редакторе вводятся, то пробуем снова потыкать кнопочку "календарь". Если на кнопочку по прежнему никакой реакции, пристреливаем и заново запускаем keylaunch:
При этом keylaunch не уйдет в фон и не отключится от терминала. Если при нажатии на "календарь" keylaunch не матерится, но переключение по прежнему не работает, то опять-таки обращаемся на форум. Будем думать.
На этом шаги заканчиваются.
Что тут можно улучшить?
Можно доделать раскладку.. мне она показалась несколько неудобной..
Можно попытаться придумать, как избежать эффекта автоповтора, когда скрипт запускается несколько раз.
Хорошо бы аплет для мачбокса от pdaXrom портировать.. может займусь, исходник я нашел тут:
http://mail.pdaxrom.org/src/mb-applet-k ... .3.tar.bz2