[[ Lenovo ThinkPad Yoga и OpenSuse ]]

Lenovo ThinkPad Yoga и OpenSuse

Имеется сей ноут. В качестве эксперимента установлена OpenSuse 13.1 с KDE4.

OpenSuse

При установке пакетов и обновлений мне больше нравиться когда сначала скачиваются все необходимые файлы и после этого производится установка. Чтобы включить такую возможность нужно установить опцию в конфиге:

/etc/zypp/zypp.conf

# ...
commit.downloadMode = DownloadInAdvance
# ...

Другие полезные настройки для менеджера пакетов:

/etc/zypp/zypp.conf

# ...

# Проверка доступа к репозиторию при его добавлении. По умолчанию отключена и проверка осуществляется при первом вызове команды zypper ref. Полезно включить, если у вас бывают проблемы с доступом к репозиториям.
repo.add.probe = true

# дополнительный язык для получения описания пакетов (английский всегда загружается)
repo.refresh.locales = en, ru

# ...

Разрешение экрана и DPI

Родное разрешение весьма приличное и при дефолтных dpi все выглядит хоть и круто, то очень мелко. Родной dpi порядка 176, но мне больше понравилось значение 125.

DPI можно настроить глобально:

/etc/sysconfig/displaymanager

...
DISPLAYMANAGER_KDM_LOCALARGS="-dpi 125"
...

А вообще с какой-то версии кеды сами стали нормально подстраиваться под высокие разрешения экранов, так что можно и не менять dpi.

WiFi

В аппарате установлена карточка Intel Corporation Wireless 7260. С дефолтным ядром и прошивкой у меня наблюдались проблемы, в процессе скачивания чего-либо из Инета через некоторое время передача данных стопорилась, для возобновления приходилось либо перезагружать модуль ядра либо переподключаться к точке.

Сама карточка использует модуль ядра iwlwifi. В нете много упоминаний с похожей проблемой, распространенное лекарство это установка опций для этого модуля 11n_disable=1 и swcrypto=1, но мне это никак не помогло.

Зато помогло обновление firmware, которую можно скачать здесь. Конкретно, проблема исчезла на прошивке 22.15.8.0 для ядра 3.13.0-rc7-1-desktop.

Для установки нужно просто скачать архив с прошивкой, распаковать (tar -xvf …) и скопировать файл прошивке в /lib/firmware. После перезагрузить модуль ядра:

$ rmmod iwlmvm iwlwifi 
$ modprobe iwlwifi

# проверяем загруженную версию
$ dmesg | grep iwlwifi | grep firmware

Еще полезно подключить репозиторий Kernel:stable и устанавливать от туда последние ядра и прошивки. С каждым новым ядром, что-то да лучше начинает работать.

TrackPad (ClickPad)

По-умолчанию, нажатие на трекпад отрабатывает как клик ЛКМ, «тап» одним пальцем - ЛКМ, «тап» двумя пальцами - ПКМ, «тап» тремя пальцами - СКМ. Скрол делается если водить двумя пальцами.

Можно настроить, чтобы нажатие на поле красной линии отрабатывало как ЛКМ, СКМ и ПКМ, при этом нажатие ниже красной линии будет отрабатываться только как ЛКМ. Для этого добавляем такой конфиг:

/etc/X11/xorg.conf.d/99-synaptics-yoga.conf

Section "InputClass"
        Identifier "Yoga clickpad buttons"
        MatchDriver "synaptics"

        # ПКМ действует от 60% размера тачпада до конца по горизонтали и только до красной линии (5%) по вертикали,
        # СКМ действует от 40% до 60% по горизонтали и так же до красной линии
        Option "SoftButtonAreas" "60% 0 0 5% 40% 60% 0 5%"
        # резервируем область выше красной линии только для действия кнопок (курсор перемещаться не будет)
        Option "AreaTopEdge" "5%"
        # резервируем небольшую нижнею область под горизонтальный скролл (курсор перемещаться не будет)
        Option "AreaBottomEdge" "93%"
        
        # вертикальный скролл вдоль правой границы тачпада
        Option "VertEdgeScroll" "1"
        # горизонтальный скролл вдоль нижней границы
        Option "HorizEdgeScroll" "1"
        # вертикальный скролл двумя пальцами
        Option "VertTwoFingerScroll" "1"
        # горизонтальный скролл двумя пальцами
        Option "HorizTwoFingerScroll" "1"
EndSection

Работать это будет вот так:

+----------------------------+
| LLLLLLLLLL MMMMM RRRRRRRRR |
|                            |
|                            |
|                            |
|                            |
|                            |
|                            |
+----------------------------+

Beep (PC speaker)

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

/etc/modprobe.d/99-local.conf

# ...
blacklist pcspkr

# выгружаем модуль
$ rmmod pcspkr

SystemD

В систему используется systemd и можно кое-что по-тюнить. В частности, для службы логирования (journald) можно настроить сохранение логов только в оперативной памяти, это полезно чтобы не тратить ресурсы перезаписи для SSD дисков.

/etc/systemd/journald.conf

[Journal]
# лог файл в памяти без записи на диск
Storage=volatile
Compress=yes
# максимальный размер лога
RuntimeMaxUse=5M
# отключить отправку сообщений в syslog
ForwardToSyslog=no

Так же есть смысл заменить rsyslog на логгирование полностью средствами systemd-journal, для это нужно установить пакет systemd-logger:

$ zypper in systemd-logger  # будет предложено удалить rsyslog - соглашаемся

Кнопка Windows

Кнопка под экраном имеет такой же код как кнопка Windows на клавиатуре. На уровне иXов она определяется как Meta, а Meta является модификатором, поэтому её можно использовать только в сочетании с другими клавишами. Это плохо когда, например, хочется настроить запуск приборной доски KDE при нажатии на эту кнопку когда ноут сложен в положение планшета. Но можно схитрить и сделать дополнительный псевдоним для кода этой кнопки. Для этого нужно создать файл:

~/.Xmodmap

keycode 133 = F14

Теперь эта кнопка будет определяться и как Meta и как F14. Чтобы применить изменения без перезагрузки, выполнить:

$ xmodmap ~/.Xmodmap

Дальше можно вешать нужные действия на F14.

Touchscreen и Chromium

Chromium поддерживает работу с тачскрином, кинетическое листание и зуммирование на картах будет работать как на планшетах и смартфонах. Но это нужно настроить :-)

Во первых, надо включить chrome://flags/#touch-events и поменять chrome://flags/#touch-scrolling-mode на async-touchmove.

Всё бы уже сразу заработало, но хромиум часто неправильно определяет устройство которое предоставляет тачскрин.

По этому, во вторых, нужно явно указать браузеру это устройство. Получение ID устройства:

$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ELAN Touchscreen                          id=9    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 EC Pen                        id=11   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera                         id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=15   [slave  keyboard (3)]

для версии 42 и меньше

В моем случае это ELAN Touchscreen id=9. Дальше можно отредактировать меню KDE и указать в опциях запуска хрома примерно следующее:

chromium --touch-devices=9 %u

К сожалению, этот id может меняться, например, при засыпании/просыпании, что с этим делать пока не понятно…

для версии 43 и выше

В новых версиях разработчики поменял работу этого флага, теперь нужно указывать ID master pointer, а не самого устройства. В приведенном примере это ID 2.

chromium --touch-devices=2 %u

Мультитач жесты с touchegg

Есть такая штука touchégg, которая позволяет настроить распознавание жестов и прикрепить к ним различные действия. Изначально она написана для того, чтобы превратить линуксовый ClickPad/TrackPad в такой же удобный как на MacOs'ах (те кто юзал те поймут :-)). Видимо по счастливой случайности, эта штука работает и с сенсорными экранами (что нам и нужно).

Для OpenSuse её нет в официальных репах, но можно стянуть с OBS - выбираем понравившийся юзер-репозиторий.

Есть gui для настройки, но я предпочитаю текстовый конфиг. Вот что я настроил:

~/.config/touchegg/touchegg.conf

<touchégg>

    <settings>
        <property name="composed_gestures_time">5</property>
    </settings>
    
    <!-- Глобальные настройки -->

    <application name="All">

        <!-- Скролл двумя пальцами -->
        <gesture type="DRAG" fingers="2" direction="ALL">
            <action type="SCROLL">SPEED=1:INVERTED=true</action>
        </gesture>

        <!-- Закрыть вкладку (Ctrl+W) - тремя пальцами вниз -->
        <gesture type="DRAG" fingers="3" direction="DOWN">
            <action type="SEND_KEYS">Control+W</action>
        </gesture>

        <!-- Назад, Вперед - движение двумя пальцами влево или вправо -->
        <gesture type="DRAG" fingers="2" direction="LEFT">
            <action type="SEND_KEYS">Alt+Left</action>
        </gesture>
        <gesture type="DRAG" fingers="2" direction="RIGHT">
            <action type="SEND_KEYS">Alt+Right</action>
        </gesture>

        <!-- Показать рабочий стол - развод и сведение четырех пальцев -->
        <gesture type="PINCH" fingers="4" direction="ALL">
            <action type="SHOW_DESKTOP"></action>
        </gesture>

        <!-- Развернуть окно - развод треми пальцами -->
        <gesture type="PINCH" fingers="3" direction="OUT">
            <action type="MAXIMIZE_RESTORE_WINDOW"></action>
        </gesture>

    </application>

    <application name="Chromium">

        <!-- Хром сам понимает жест, поэтому действия touchégg лучше отключить -->
        <gesture type="DRAG" fingers="2" direction="ALL">
            <action type="NO_ACTION"></action>
        </gesture>
        <gesture type="DRAG" fingers="2" direction="LEFT">
            <action type="NO_ACTION"></action>
        </gesture>
        <gesture type="DRAG" fingers="2" direction="RIGHT">
            <action type="NO_ACTION"></action>
        </gesture>

    </application>
    
    <application name="Gwenview">

        <!-- Листание фоток движением пальца -->
        <gesture type="DRAG" fingers="1" direction="LEFT">
            <action type="SEND_KEYS">Right</action>
        </gesture>
        <gesture type="DRAG" fingers="1" direction="RIGHT">
            <action type="SEND_KEYS">Left</action>
        </gesture>

    </application>
    
    <application name="ProjectM-pulseaudio">

        <gesture type="DRAG" fingers="1" direction="UP">
            <action type="SEND_KEYS">Control+F</action>
        </gesture>
        <gesture type="DRAG" fingers="1" direction="DOWN">
            <action type="SEND_KEYS">Control+F</action>
        </gesture>

        <gesture type="DRAG" fingers="1" direction="LEFT">
            <action type="SEND_KEYS">Control+N</action>
        </gesture>
        <gesture type="DRAG" fingers="1" direction="RIGHT">
            <action type="SEND_KEYS">Control+P</action>
        </gesture>

    </application>

    <application name="Blender">

        <gesture type="DRAG" fingers="1" direction="ALL">
            <action type="DRAG_AND_DROP">BUTTON=2</action>
        </gesture>

    </application>

</touchégg>

Это конфиг с учётом, что настроен мультитач для хрома (раздел выше), если нет то можно использоваться такой вариант:

    <application name="Chromium">

        <gesture type="TAP" fingers="1" direction="">
            <action type="MOUSE_CLICK">BUTTON=1</action>
        </gesture>

        <!-- работа с картами (гугл, яндекс), выделение и перемещение текста  -->
        <gesture type="DRAG" fingers="1" direction="ALL">
            <action type="DRAG_AND_DROP">BUTTON=1</action>
        </gesture>

    </application>

Если хочется, чтобы жесты touchegg работали и для тачапада, то нужно его немножко потюнить, а именно выполнить:

synclient TapButton2=0
synclient TapButton3=0
synclient ClickFinger2=0
synclient ClickFinger3=0
synclient HorizTwoFingerScroll=0
synclient VertTwoFingerScroll=0

Можно задать эти настройки в иXах (см. выше). К сожалению, текущая версия touchegg не позволяет задать разные действия отдельно для тачскрина и тачпада.

Тюнинг энергопотребления

При дефолтных настройках ядра и его компонента автономно ноут работает не очень долго (часа 2). Но вполне можно добиться и 6 часов работы от батареи. Для это нужно установит laptop-mode-tools, настроить его и еще немного потюнить само ядро.

laptop-mode-tools

Установка:

$ zypper in laptop-mode-tools

Правим конфиги:

/etc/laptop-mode/conf.d/cpufreq.conf

# Устанавливает максимальную частоту процессора при работе от батареи в 1.6ГГц
# и применяем энергосберегающий режим
BATT_CPU_MAXFREQ=1600000
BATT_CPU_MINFREQ=slowest
BATT_CPU_GOVERNOR=powersave

# Следующие значения ставим в performance, так как проц умеет либо powersave либо performance
LM_AC_CPU_GOVERNOR=performance
NOLM_AC_CPU_GOVERNOR=performance

/etc/laptop-mode/conf.d/intel-hda-powersave.conf

# отключение аудио-чипа при бездействии
INTEL_HDA_DEVICE_CONTROLLER=1

/etc/laptop-mode/conf.d/wireless-iwl-power.conf

# минимальный уровень потребления для wifi
IWL_BATT_POWER=5

/etc/laptop-mode/conf.d/wireless-power.conf

# включить энергосбережение для wifi даже при питании от адаптера
# (включить если при подключении адаптера вдруг перестает работать передача данных)
WIRELESS_AC_POWER_SAVING=1

После настройки активируем службу:

$ systemctl enable laptop-mode
$ service laptop-mode start

Ядро и модули

Для большего энергосбережения в опции загрузки ядра (grub) стоит добавить следующее:

usbcore.autosuspend=1 pcie_aspm=force i915.enable_rc6=1 i915.enable_fbc=1 i915.lvds_downclock=1 i915.semaphores=1 acpi_osi=Linux acpi=force drm.vblankoffdelay=1 workqueue.power_efficient

Вкусности

Yoga позволяет работать с устройством в нескольких режимах. Чтобы работать в этих режимах было удобно я сделал следующее.

Во первых, включаем отдельные виджеты для приборной доски: Настройки → Поведение рабочей среды → Рабочее пространство Plasma → Показывать на приборной доске.

После этого прикрепляем вызов приборной доски по F14 (она же кнопка под экраном и кнопка на клавиатуре Windows): Настройка → Комбинации клавиш и росчерки → Глобальные комбинации клавиш → Оболочка Plasma.

После этого на приборную панель нужно накидать различных виджетов по вкусу. Специально для этого я написал несколько таких:

  • управление яркостью экрана: kde-look, github
  • переключение режимов устройства: github

Вот пример моей панели:

Моя приборная доска Plasma KDE4

Steam

В некоторых играх (в частности Portal) не отображаются текстуры, чтобы это исправить нужно установить два пакета:

$ zypper in libtxc_dxtn libtxc_dxtn-32bit

Планы

Что еще не работает или не-до-настроено:

  • скролл на TrackPoint
  • датчики и авторотация экрана
  • нормальная экранная клавиатура (хотя я вроде привык к КДЕшной)
  • нормальная чувствительность для стилуса
  • индикация яркости экрана (заработало на новых ядрах)
  • мультитач жесты

Полезные ссылки

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
140 +10 = 
 
hardware/lenovo-thinkpad-yoga-and-opensuse.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki