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.
После этого на приборную панель нужно накидать различных виджетов по вкусу. Специально для этого я написал несколько таких:
- переключение режимов устройства: github
Вот пример моей панели:
Steam
В некоторых играх (в частности Portal) не отображаются текстуры, чтобы это исправить нужно установить два пакета:
$ zypper in libtxc_dxtn libtxc_dxtn-32bit
Планы
Что еще не работает или не-до-настроено:
- скролл на TrackPoint
- датчики и авторотация экрана
- нормальная экранная клавиатура (хотя я вроде привык к КДЕшной)
- нормальная чувствительность для стилуса
индикация яркости экрана(заработало на новых ядрах)мультитач жесты
Обсуждение