· thinkpad yoga linux touchscreen keyboard clickpad

Thinkpad Yoga S1 - заставляем его работать под Linux

Thinkpad Yoga - мой второй ноутбук из Thinkpad-ных (первый был X220, который работал вообще без проблем). Как заядлый линуксоид, я задался идеей сделать так, чтобы работало все (ну, или по максимуму). В этом посте краткий отчет о том, что мне пришлось сделать.

Clickpad - отключаем управление мышкой и расширяем кнопки

Кликпад - довольно неплохое устройство, пока не сталкиваешься с ним под Linux’ом. Лично у меня это первый ноутбук с кликпадом, но некоторое отвращение уже сформировалось. Например, мне не понравилось, что кнопки соединены с самим тачпадом, а также что нету нормального физического разделения на левую, среднюю и правую. Но это уже мои придирки, потому что со следующим твиком все работает шикарнейшим образом:

#!/bin/sh

# Отключаем управление мышкой
synclient AreaBottomEdge=50000000
synclient AreaTopEdge=50000000

# Расширяем кнопки, чтобы они более-менее соответствовали маркировке на кликпаде
synclient RightButtonAreaLeft=4500
synclient RightButtonAreaRight=0
synclient RightButtonAreaTop=0
synclient RightButtonAreaBottom=0
synclient MiddleButtonAreaLeft=3167
synclient MiddleButtonAreaRight=4500
synclient MiddleButtonAreaTop=0
synclient MiddleButtonAreaBottom=0

Первой частью мы отключаем управление мышкой с тачпада (у нас же есть трекпоинт! он гораздо удобнее!), а второй - настраиваем кликпад таким образом, что кнопки (правая, средняя, левая) более-менее соответствуют нанесенной маркировке.

Тут есть один подвох, правда, я не могу сказать, относится ли он к драйверу. Так как я арчевод, я гуглил по арчефоруму решение проблемы с кликпадом, и наткнулся на драйвер xf86-input-evdev-trackpoint из AUR. С обычным драйвером этот код почти наверняка не заработает, поэтому есть еще один скриптец, который проверен установкой генту:

#!/bin/bash
TOUCHPAD="SynPS/2 Synaptics TouchPad"
TRACKPOINT="TPPS/2 IBM TrackPoint"
echo "setting right area of pad to rightclick. Order:  RightButtonAreaLeft, RightButtonAreaRight, RightButtonAreaTop, RightButtonAreaBottom, MiddleButtonAreaLeft,
MiddleButtonAreaRight, MitddleButtonAreaTop, MiddleButtonAreaBottom"
xinput set-prop "${TOUCHPAD}" "Synaptics Soft Button Areas" 4000, 0, 0, 0, 3000, 3999, 0, 0

echo "enable twofingerscrolling in both directions"
xinput set-prop "${TOUCHPAD}" "Synaptics Two-Finger Scrolling" 1, 1

echo "shortening upper edge to reserve space for 'just button' actions. Order: left, right, top, bottom"
xinput set-prop "${TOUCHPAD}" "Synaptics Area" 0, 0, 5000, 0

echo "enabling palm detection"
xinput set-prop "${TOUCHPAD}" "Synaptics Palm Detection" 1

echo "Middle mouse button emulation for scrolling on trackpoint"
xinput set-prop "${TRACKPOINT}" "Evdev Wheel Emulation" 1
xinput set-prop "${TRACKPOINT}" "Evdev Wheel Emulation Button" 2
xinput set-prop "${TRACKPOINT}" "Evdev Wheel Emulation Timeout" 200
xinput set-prop "${TRACKPOINT}" "Evdev Wheel Emulation Axes" 6 7 4 5 # horizontal und vertikal

echo "enable tap events"
xinput set-prop "${TOUCHPAD}" "Synaptics Tap Action" 2, 3, 1, 1, 1, 3, 0

echo "touchpad on"
xinput set-prop "${TOUCHPAD}" "Synaptics Off" 0

UPD: Я сделал ебилд xf86-input-evdev с полной поддержкой трекпоинта и кликпада. При использовании этого ебилда и скрипта выше средняя зона кликпада будет выступать как средняя кнопка мышки, что позволяет прокручивать страницы с помощью трекпоинта. Ебилд лежит тут.

Tablet, fucking, mode

Thinkpad Yoga умеет не только в ноутбук, но и в планшет, спасибо сенсорному экрану (который, кстати говоря, FullHD. То есть проблема ШГ практически разрешена). Однако, Linux не смог автоматом переключать режимы при входе в и выходе из планшетного режима. Для этого был скостылен следующий скриптец:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import os
import subprocess
import shlex

touchscreen_command = shlex.split('xinput list-props "ELAN Touchscreen"')
touchscreen = subprocess.Popen(touchscreen_command, stdout = subprocess.PIPE)
touchscreen = touchscreen.communicate()[0].split("\n")[1].split(":")[1]

print(touchscreen)

if "1" in touchscreen:
    print "Touchscreen enabled, disabling."
    os.system("/usr/bin/xinput --set-prop 'ELAN Touchscreen' 'Device Enabled' 0")
    os.system("/usr/bin/xinput --set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 1")
else:
    print "Touchscreen disabled, enabling."
    os.system("/usr/bin/xinput --set-prop 'ELAN Touchscreen' 'Device Enabled' 1")
    os.system("/usr/bin/xinput --set-prop 'SynPS/2 Synaptics TouchPad' 'Device Enabled' 0")

Из консоли у меня скрипт работает отлично, а вот ACPID не хочет его нормально выполнять. Коллективный разум конференции linuxforum и linux-support не помог, поэтому скоро пойду на поклон к арчефорумам и, может быть, даже ЛОРу. Пришлось на таскбар прилепить ланчер, который выполняет этот скрипт.

Экранная клавиатура

Так как мне хотелось иметь полностью рабочий режим планшета, я задался выбором экранной клавиатуры. Мне очень понравилась onboard - написана на питоне, умеет аттачится к краям экрана, поддерживает темы, которые довольно просто сделать самому.

Жесты

Для нормального пользования планшетным режимом, конечно же, необходимы жесты. По-умолчанию в моем арче их не было, естественно, поэтому мне пришлось установить touchegg. Конфиг по-умолчанию вполне годный и юзабельный, я же поправил только одно - чтобы прокрутка была не двумя пальцами, а одним, и с меньшей скоростью (а то она какая-то турбированная оказалось). Я поправил всего одну строчку в ~/.config/touchegg/touchegg.conf:

    <gesture type="DRAG" fingers="1" direction="ALL">
        <action type="SCROLL">SPEED=4:INVERTED=true</action>
    </gesture>

INVERTED=true нужно для того, чтобы прокрутка следовала за пальцем, то есть когда вы будете вести пальцем вниз, страница тоже будет прокручиваться вниз.

Клавиатура и клавиши F1-F12

Еще меня поразила работа клавиш F1-F12, которые по совместительству могут переключать некоторые функции, вроде вафли, а также контролировать громкость и яркость экрана. По-умолчанию они работают именно как функциональные, а не как F1-F12! Сначала я думал, что Lenovo совсем прифигели и сделали все через жопу, но потом обнаружил “FnLk” на ESC. Я попробовал нажать Fn+ESC, и вуаля - F1-F12 опять стали F1-F12, а функциональные возможности работают через Fn! Правда, постоянно горящий огонек на Fn немного напрягает, когда я его вижу, но вижу я его редко :)

Клавиатура и последние биосы

В последних биосах сделали очень неприятную хрень - при включенном Fn Lock клавиша End работает как Insert. На стоковом биосе все работает хорошо, возможно, на всех, кроме двух последних (которые я пробовал). Я пытался откатить биос до стоковой версии, но у меня не получилось загрузиться с ISO-образа. Поэтому пришлось сгородить такой костыль, который возвращает привычное поведение:

xmodmap -e "keycode 118 = End"
xmodmap -e "keycode 115 = Insert"

ВНИМАНИЕ! Это сломает поведение внешних клавиатур! Для восстановления привычного поведения нужно назначить 118 как Insert и 115 как End!

Заключение

Так как у меня уже был SSD в X220, то я просто перекинул его в Yoga, поэтому этот пост не охватывает энергосбережение и установку и предварительную настройку. Да и настроить его не так уж и трудно, особенно по арчевики. Ну и, конечно, надо иметь немного усидчивости, чтобы настроить тот же laptop-mode, ибо конфигов там много :)

По личным ощущениям ноутбук является вполне неплохим и интересным развитием линейки Thinkpad, так как сенсорные возможности привлекут многих :). Единственный недостаток у меня - это ACPID, но я надеюсь, что скоро решу и его.

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket