Pull to refresh

Кнопка для поворота экрана на X220 tablet

Reading time2 min
Views4.6K
Взамен убитого почти всусмерть X220i купил себе X220 tablet. Замечательная железка — ноутбук с вращающимся экраном, тачскрином и пером (которое понимает «силу нажатия»). Однако, увы, часть хардварных кнопок (в т.ч. на вращающемся экране) не работала.

Одна из них — кнопка поворота (на фотографии). Очень полезна для перевода ноутбука в «readmode» (c книжно-портретной ориентацией).



Что мы хотим?

  • По нажатию поворачивать картинку на 90°
  • По повторному нажатию возвращать обратно
  • Поворачивать восприятие всех тачскринов (обнаружилось в ходе отладки решения)
  • (upd) отключаем тачпад — он иногда срабатывает на перевёрнутую крышку


Под катом — вариант решения и ссылки на использованные материалы.


Если вы будете адаптировать под своё железо — учтите следующие моменты:
  • Определение поворота в скрипте сделано халтурно — довольно грубый греп по выводу xrandr.
  • keycode для вашей кнопки может быть другой
  • Название тач-устройств может быть другим


Для начала ставим пакет xkeybind, который позволит нам вешать на произвольные кнопки произвольные программы:

apt-get install xkeybind

Далее, пишем скрипт поворота экрана, он делает три вещи после определения текущего положения экрана: поворачивает экран, поворачивает ориентацию тачскрина, выключает или включает тачпад (по номеру).

#!/bin/bash
rotation=`xrandr -q | fgrep "left (" `
if [ $? == 1 ] ;
then
  xrandr -o left
  xsetwacom --set "Wacom ISDv4 E6 Pen stylus" Rotate ccw
  xsetwacom --set "Wacom ISDv4 E6 Finger touch" Rotate ccw
  xsetwacom --set "Wacom ISDv4 E6 Pen eraser" Rotate ccw
  xinput set-prop 13 "Device Enabled" 0
else
  xrandr -o normal
  xsetwacom --set "Wacom ISDv4 E6 Pen stylus" Rotate normal
  xsetwacom --set "Wacom ISDv4 E6 Finger touch" Rotate normal
  xsetwacom --set "Wacom ISDv4 E6 Pen eraser" Rotate normal
   xinput set-prop 13 "Device Enabled" 1
fi


Примечания:
  • как я и предупреждал, греп очень халтурный
  • Список устойств можно посмотреть с помощью xsetwacom --list
  • left=ccw, если захотите поворачивать в right, то тогда cw
  • Список устройств можно посмотреть в xinput --list

Я этот скрипт назвал /usr/local/bin/rotate.

Не забываем про chmod +x на него.

Далее — пишем конфиг для xbindkeys:
  1. Делаем touch ~/.xbindkeysrc (у xbindkeys мелкий баг — в отсутствие конфига -k не работает).
  2. Запускаем xbindkey -k. Получаем окно, в котором надо нажать нужную нам кнопку — на выходе будет строчка, которую нужно отдать xbindkeys, чтобы запустить программу по нажатию кнопки. Этот путь у меня оказался самым эффективным, хоть и начал я с магических setkeys, сканкодов, кейкодов и т.д.
  3. Вписываем в конфиг (~/.xbindkeys):
    "rotate"
    m:0x0 + c:161
    

    (понятно, что для разных устройств вторая строчка будет разной)
  4. Запускаем xkbindkeys, проверяем, что работает.
  5. Прописываем запуск xbindkeys в ~/.xsession
  6. PROFIT??? (см картинку в начале поста)

ссылки


Tags:
Hubs:
Total votes 26: ↑20 and ↓6+14
Comments25

Articles