0
Найти на сайте: параметры поиска

 

 

Помогите разобраться с кнопками на ThinkPad X61 Tablet

Не могу заставить кнопки работать
  
Сообщений: 0
Собственно имею сабж Lenovo ThinkPad X61 Tablet. Поставил на него Linux Mint 17. До этого c linux дела не имел, но вроди не дурак со всем спомощу гугла разобрался. А вот с кнопками не могу. На матрице есть кнопки поворота дисплея, джойстик, ентер, ескейп и меню. На их нажатие система никак не реагирует. Пробовал зделать как сказано здесь http://www.thinkwiki.org/wiki/Tablet_Hardware_Buttons, ставлю xbindkeys, в терминале пишу команду xbindkeys -k, появляется окошко, все как положено, но на нажатие этих кнопок система всеравно никак не реагирует. Если нажать кнопку на клавиатуре выдается ее код, тоесть программа работает. В Windows кнопки работали. Что делать? Как заставить работать кнопки?
Сообщений: 0
Отличный форум. Месяц как создал тему и ниодного ответа. Может ктото поможет с решением проблемы?
Сообщений: 0
До этого c ThinkPad X61 Tablet дела не имел...
Если бы кто-то знал, наверняка бы уже помог.

Вот мануал по установке убунту -- http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_(Lucid_Lynx)_on_a_ThinkPad_X61_Tablet#Setup_the_Tablet_Rotate_Button

На http://community.linuxmint.com/hardware/view/8844 человек пишет, что у него девайс работает на LM13 и он готов даже поделиться скриптом. Свяжитесь с ним, возможно он чем-то сможет помочь.
Сообщений: 0
Собственно разобрался и решил проблему следующим образом:
При нажатии не работающей кнопки syslog забивается сообщениями по типу:
Код PHP:
  1. Feb 2 15:19:46 svl-2 kernel: [ 1797.811865] atkbd serio0: Use 'setkeycodes 67 <keycode>' to make it known.
  2. Feb 2 15:19:46 svl-2 kernel: [ 1797.815906] atkbd serio0: Unknown key released (translated set 2, code 0x67 on isa0060/serio0).
Чем дольше держать кнопку тем больше сообщений запишется в лог.
Также можно использовать команду dmesg чтобы увидеть эти сообщения.

Команды для разных кнопок.
setkeycodes 67 <keycode> -Control-Alt-Delete Button (маленькая кнопка утопленная в корпус, больше похожа на ресет но в windows выполняла тоже что и сочетание из трех клавиш)
setkeycodes 6c <keycode> - Rotate Button (поворот экрана)
setkeycodes 68 <keycode> - Toolbox Button (в windows вызывает меню настроек(яркость, тач и тд.))
Дальше пойдут кнопки которые повторяют функционал аналогичных кнопок на клавиатуре. Я испробовал разные дистрибутивы и в некоторых эти кнопки сразу работали как надо а в некоторых также сыпали в лог сообщения.
setkeycodes 6b <keycode> - Esc
setkeycodes 69 <keycode> - Return (центр джойстика, в windows(да и в linux дистрибутивах) выполняет тоже что и Enter)
setkeycodes 71 <keycode> - Up (джойстик верх)
setkeycodes 6f <keycode> - Down
setkeycodes 6e <keycode> - Left
setkeycodes 6d <keycode> - Right

А вот команды которые я выполнял чтоб назначить кнопкам функции:
Код PHP:
  1. sudo setkeycodes 71 103
  2. sudo setkeycodes 6f 108
  3. sudo setkeycodes 6e 105
  4. sudo setkeycodes 6d 106
  5. sudo setkeycodes 69 28
  6. sudo setkeycodes 6b 1
  7. sudo setkeycodes 68 241
  8. sudo setkeycodes 67 242
  9. sudo setkeycodes 6c 240
Где взять коды кнопок? В мануалах которые я читал везде написано взять скан код кнопки перевести в десятичную систему калькулятором и добавить 128. С некоторыми кнопками все гуд они попадают на свободные кейкоды а некоторые у меня попадали на задействованные кейкоды, конфликта в системе это не вызывает но при нажатии кнопки она выполняет совсем не те действия которые должна. Я точно не помню но получалось что-то типа жмешь Esc на матрице а система ее понимает как кнопку назад(в браузере).

Потому кнопкам которые повторяют функционал кнопок на клавиатуре я назначил коды кнопок с клавиатуры. Чтобы узнать код кнопки выполняем команду xev или xbindkeys -k

Появится белое окно, жмем кнопку код которой хотим узнать.
При первой команде получим:
Код PHP:
  1. KeyRelease event, serial 37, synthetic NO, window 0x2c00001,
  2. root 0x7e, subw 0x0, time 1026802, (352,341), root:(354,413),
  3. state 0x2010, keycode 36 (keysym 0xff0d, Return), same_screen YES,
  4. " XLookupString gives 1 bytes: (0d) "
  5. XFilterEvent returns: False
При второй:
Код PHP:
  1. "(Scheme function)"
  2. m:0x10 + c:36
  3. Mod2 + Return
Код кнопки Enter у нас 36.
Я не понял почему но если вести sudo setkeycodes 69 36 нашей кнопке будет назначен код 44, т. е. На 8 больше, разбираться не стал просто отнял везде 8, таким образом я заставил работать джойстик и Esc.
Остались еще спец кнопки. Им назначил просто свободные коды обычно от 120 до 255. Проверить свободные коды можно командой sudo dumpkeys

Но после перезагрузки кнопки перестали работать, вылечилось это помещением в /etc/init/ файла kb-keys-customize.conf следующего содержания:
Код PHP:
  1. # kb-keys-customize
  2. # Map key codes to the scan codes emitted by Toolbox, Rotate, Ctrl-Alt-Del...
  3.  
  4. description "Map FToolbox, Rotate, Ctrl-Alt-Del... kernel scancodes to kernel keycodes"
  5.  
  6. start on local-filesystems
  7.  
  8. script
  9. setkeycodes 71 103 6f 108 6e 105 6d 106 69 28 6b 1 68 241 67 242 6c 240
  10. end script
Я подумал что на этом все, система видит кнопки и реагирует на них щас поставлю в комбинациях клавиш команды на запуск нужных мне скриптов или приложений и готово но не тут то было, стандартные средства ос отказались видеть кнопки, точнее кнопки повторяющие функционал кнопок клавиатуры видились отлично, а вот 3 спец кнопки просто не вбивались в комбинацию. Все потому что клавишам не задано символьное обозначение. NoSymbol Тут наметилось 2 пути решения данной проблемы: 1. назначить значения по типу XF86Launch2 XF86Launch3... 2. Использовать xbindkeys.
Я решил использовать второй вариант.
Если у вас еще не установлен xbindkeys установите его.
Создадим файл конфигурации (без него не работает) $ xbindkeys --defaults > ~/.xbindkeysrc
Водим команду $ xbindkeys -k и жмем нужную нам кнопку.
Получаем вывод:
Код PHP:
  1. "(Scheme function)"
  2. m:0x0 + c:161
  3. NoSymbol
Копируем его в ~/.xbindkeysrc и заменяем (Scheme function) на нашу команду.
У меня получилось следующее:

Код PHP:
  1. ## (Автоматически сгенерированная документация)
  2. # ...
  3.  
  4. #ctrl-alt-del (gnome-system-monitor)
  5. "gnome-system-monitor"
  6. m:0x0 + c:250
  7. NoSymbol
  8.  
  9. #Tablet Toolbox button (show cellwriter)
  10. "cellwriter --show-window"
  11. m:0x0 + c:249
  12. NoSymbol
  13.  
  14. #Tablet Rotate button (run rotate script)
  15. "sudo /home/svl/scripts/rotate.sh"
  16. m:0x0 + c:248
  17. NoSymbol
Кнопки действия выполняют но при изменении ориентации экрана джойстик на матрице не меняет значения своих кнопок, для изменения работы джойстика в скрипте использовалась команда setkeycodes которую нужно выполнять с sudo, чтобы у нас не просило пароль при каждом нажатии кнопки переворота в папке /etc/sudoers.d/ был создан файл rotate следующего содержания:
Cmnd_Alias ROTATE = /home/svl/scripts/rotate.sh

Код PHP:
  1. ALL ALL = NOPASSWD:ROTATE
ну и последнее сам скрипт rotate.sh
Код PHP:
  1. #!/bin/bash
  2. tablet="Serial Wacom Tablet stylus"
  3.  
  4. # Get the current orientation of the tablet
  5. rotate=$(xsetwacom get "$tablet" Rotate)
  6.  
  7. # Work out the next tablet and screen orientations (rotating clockwise)
  8. case "$rotate" in
  9. none) nextRotate="cw"
  10. nextOrient="right" ;;
  11. cw) nextRotate="half"
  12. nextOrient="inverted" ;;
  13. half) nextRotate="ccw"
  14. nextOrient="left" ;;
  15. ccw) nextRotate="none"
  16. nextOrient="normal" ;;
  17. esac
  18.  
  19. # Rotate the screen
  20. xrandr -o $nextOrient
  21.  
  22. # Rotate the tablet
  23. xsetwacom set "$tablet" Rotate $nextRotate
  24.  
  25. # Rotate the buttons
  26.  
  27. case "$nextOrient" in
  28. right) setkeycodes 71 105 #up
  29. setkeycodes 6d 103 #right
  30. setkeycodes 6f 106 #down
  31. setkeycodes 6e 108 #left
  32. ;;
  33. inverted) setkeycodes 71 108 #up
  34. setkeycodes 6d 105 #right
  35. setkeycodes 6f 103 #down
  36. setkeycodes 6e 106 #left
  37. ;;
  38. left) setkeycodes 71 106 #up
  39. setkeycodes 6d 108 #right
  40. setkeycodes 6f 105 #down
  41. setkeycodes 6e 103 #left
  42. ;;
  43. normal) setkeycodes 71 103 #up
  44. setkeycodes 6d 106 #right
  45. setkeycodes 6f 108 #down
  46. setkeycodes 6e 105 #left
  47. ;;
  48. esac
Ссылки на источники и полезные статьи:
http://www.thinkwiki.org/wiki/Tablet_Hardware_Buttons
https://wiki.archlinux.org/index.php/Xbindkeys
http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_%28Lucid_Lynx%29_on_a_ThinkPad_X61_Tablet
https://help.ubuntu.com/community/MultimediaKeys
http://www.tux.in.ua/articles/458
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.