ThinkPad Yoga 260 – Teil 5: Ubuntu 15.10 – Einfügen mit TrackPoint Mittelklick ausschalten

Ein Standardservice den X mitbringt besteht im „paste-on-middle-click“, dem Einfügen von kopiertem Text durch einen Klick mit der mittleren Maustaste. Da der mittlere Button bei ThinkPads und damit auch beim YOGA 260 gedrückt gehalten werden muss, um mit dem TrackPoint zu scrollen, führt dies immer wieder zu ungewollten Einfügeorgien. Um diesem Verhalten für den internen TrackPoint Button einen Riegel vorzuschieben, reicht ein einfacher Eintrag in „~/.xsessionrc“:

#!/bin/bash

# disable paste-on-middle-click for ThinkPad Yoga 260 TrackPoint
xinput -set-button-map "Elantech PS/2 TrackPoint" 1 0 3 4 5 6 7

Nicht ganz so einfach gestaltet sich die Sachen für ein extern angeschlossenes ThinkPad Keyboard mit TrackPoint. Ein Eintrag in xsessionrc wird ja nur getriggert, wenn das Keyboard bereits beim Anmelden angeschlossen ist. Das bringt also wenig, wenn das Yoga im laufenden Betriebe angedock wird. Daher müssen wir eine udev Regel für das USB-Keyboard erstellen.

Zunächst muss jedoch noch „at“ installiert werden:

sudo apt install at

Jetzt brauchen wir eine udev Regel unter „/etc/udev/rules.d/“, die auf das Anstecken der ThinkPad Tastatur reagiert. Meine heißt „99-thinkpadKeyboard.rules“:

ACTION=="add", KERNEL=="input[0-9]*" SUBSYSTEM=="input", ATTR{name}=="Lenovo ThinkPad Compact USB Keyboard with TrackPoint", RUN+="/VOLLSTAENDIGER_PFAD_ZUM_SKRIPT/thinkpadKeyboard.sh"

Sie ruft das Skript „/VOLLSTAENDIGER_PFAD_ZUM_SKRIPT/thinkpadKeyboard.sh“ auf:

#!/bin/bash

echo /VOLLSTAENDIGER_PFAD_ZUM_SKRIPT/thinkpadKeyboardMap.sh | at now

Wie man sieht, passiert hier gar nicht viel. Wir rufen einfach ein zweites Skript auf, das dann von „at“ sofort abgearbeitet wird. Dieser Schritt ist notwendig, weil udev auf die Abarbeitung des ersten Skripts wartet, bevor es weitermacht (oder das Script abbricht, wenn dies zu lange dauert). Da wir aber ein eingehängtes und laufendes Keyboard benötigen, um mit xinput darauf zugreifen zu können, müssen wir uns mit dem Zwischenskript behelfen. Die eigentliche Arbeit macht dann das zweite Skript „/VOLLSTAENDIGER_PFAD_ZUM_SKRIPT/thinkpadKeyboardMap.sh“:

#!/bin/bash

# wait a second for udev to initialize the keyboard properly
sleep 1

# get correct XAUTHORITY and DISPLAY
export XAUTHORITY=`ls -1 /home/*/.Xauthority | head -n 1`
export DISPLAY=":`ls -1 /tmp/.X11-unix/ | sed -e s/^X//g | head -n 1`"

# disable paste-on-middle-click for ThinkPad Compact USB Keyboard with TrackPoint
keyboardID=$(xinput | grep "with TrackPoint.*pointer" | sed 's/^.*id=//g' | sed 's/[^0-9].*//g')

if [ "$keyboardID" != "" ]
then
        xinput -set-button-map $keyboardID 1 0 3 4 5 6 7 8 9 10 11 12 13
fi

ThinkPad Yoga 260 – Teil 4: Ubuntu 15.10 – Tablet Modus und Notizen mit dem Stylus

Die folgenden Ausführungen beziehen sich auf:

  • Lenovo ThinkPad YOGA 260 mit BIOS Version 1.14
  • Ubuntu 15.10 mit Kernel 4.4.0-040400

1. Tablet Mode

EDIT: Update

Um im Tablet Modus vernünftig mit dem Stift arbeiten zu können, kümmern wir uns zunächst darum, dass Ubuntu den Tablet-Modus überhaupt erkennt. Dafür legen wir zunächst im Verzeichnis „/etc/acpi/events/“ drei neue Dateien an:

1. „tabletModeYoga260“ mit folgendem Inhalt:

event=ibm/hotkey LEN0068:00 00000080 000060f0
action=/VOLLSTAENDIGER_PFAD_ZUM_SCRIPT/tabletModeYoga260.sh

2. „openLidYoga260“ mit folgendem Inhalt:

event=button/lid LID open
action=/VOLLSTAENDIGER_PFAD_ZUM_SCRIPT/thinkpadState.sh open

3. „closeLidYoga260“ mit folgendem Inhalt:

event=button/lid LID close
action=/VOLLSTAENDIGER_PFAD_ZUM_SCRIPT/thinkpadState.sh close

Im Verzeichnis „/etc/“ legen wir

4. „thinkpad_state“ mit folgendem Inhalt an:

laptopMode

Im Verzeichnis „VOLLSTAENDIGER_PFAD_ZUM_SCRIPT“ kommen jetzt beide Scripte:

5. „thinkpadState.sh“ mit folgendem Inhalt:

#!/bin/bash
if [ $1 = "open" ]
then
	echo "laptopMode" > /etc/thinkpad_state
elif [ $1 = "close" ]
then
	echo "closing" > /etc/thinkpad_state
fi

6 „tabletModeYoga260.sh“  mit folgendem Inhalt (meine Version, die im TabletModus sowohl Touchpad als auch Trackpoint ausschaltet (den Touchscreen aber an lässt), den Bildschirminhalt um 90 Grad nach links dreht und die Touchscreen-Eingaben entsprechend anpasst. Außerdem wird die Touchtastatur „onboard“ gestartet):

# tabletMode script for ThinkPad Yoga 260
#
# Version 0.7
# by SaGrLand with special thanks to djahma
#
# Best to use with acpi hindge event "ibm/hotkey LEN0068:00 00000080 000060f0"
# Events "button/lid LID close" and "button/lid LID open" must be handled (they trigger hindge event too)
# In tabletMode touchpad and trackpoint are disabled, screen and touchscreen are rotated 90 degrees counterclockwise, and onboard keyboard is started.
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

#!/bin/bash

# get currentState 
read -r currentState < /etc/thinkpad_state

# get correct XAUTHORITY and DISPLAY (acpid started by root)
export XAUTHORITY=`ls -1 /home/*/.Xauthority | head -n 1`
export DISPLAY=":`ls -1 /tmp/.X11-unix/ | sed -e s/^X//g | head -n 1`"

# get touchpad state (maybe use trackpoint state if your touchpad is disabled by default)
touchpad=$(xinput list-props "ETPS/2 Elantech Touchpad" | grep "Device Enabled" | awk -F ":" '{print $2}')

if [ $currentState = "laptopMode" ]
then
	# disable touchpad and trackpoint
    	xinput --set-prop "Elantech PS/2 TrackPoint" "Device Enabled" 0
    	xinput --set-prop "ETPS/2 Elantech Touchpad" "Device Enabled" 0

	# disable touchscreen
	# xinput --set-prop "Wacom Co.,Ltd. Pen and multitouch sensor Finger touch" "Device Enabled" 0
	
	# rotate screen and touchscreen to the left
	xrandr -o left
	xsetwacom set "Wacom Co.,Ltd. Pen and multitouch sensor Finger touch" rotate ccw

	# start onboard keyboard
	sudo -b -u #1000 onboard

	# show notification
	# notify-send -i /usr/share/icons/gnome/48x48/emblems/emblem-default.png "TabletMode" "ON"
	echo "tabletMode" > /etc/thinkpad_state

elif [ $currentState = "tabletMode" ]
then
	# enable touchpad and trackpoint
    	xinput --set-prop "Elantech PS/2 TrackPoint" "Device Enabled" 1
    	xinput --set-prop "ETPS/2 Elantech Touchpad" "Device Enabled" 1

	# enable touchscreen
	# xinput --set-prop "Wacom Co.,Ltd. Pen and multitouch sensor Finger touch" "Device Enabled" 1

	# rotate screen and touchscreen to the right
	xrandr -o normal
	xsetwacom set "Wacom Co.,Ltd. Pen and multitouch sensor Finger touch" rotate none

	# stop onboard keyboard
	killall onboard

	# show notification
	# notify-send -i /usr/share/icons/gnome/48x48/emblems/emblem-unreadable.png "TabletMode" "OFF"
	echo "laptopMode" > /etc/thinkpad_state
fi

7. Nicht vergessen, die Dateien 5 und 6 mit „chmod +x“ noch ausführbar zu machen.

8. Systemd das Behandeln des LidSwitchEvents abgewöhnen: Dafür die Datei „/etc/systemd/logind.conf“ öffnen, die Zeile „#handleLidSwitch=“ suchen und wie folgt ändern:

#HandleLidSwitch=ignore

9. Den logind-Dienst neu starten:

sudo systemctl restart systemd-logind

10. Dann noch zur Sicherheit systemd mitteilen, das es acpid beim nächsten Neustart starten soll:

sudo systemctl enable acpid

11. Damit die Scripte ohne Neustart funktionieren, starten wir auch acpid einfach nochmal neu:

sudo systemctl restart acpid

12. Update: Direkt nach dem (Neu)Start des Yoga, steht jetzt thinkpad_state immer auf closing oder opening. Wir müssen also beim Anmelden thinkpad_state noch auf laptopMode setzen (außer des Yoga ist angdockt und daher der Displaydeckel geschlossen. Dafür können wir einfach thinkpad_state mit „sudo chown BENUTZERNAME:BENUTZERNAME /etc/thinkpad_state“ für den aktuellen Benutzer beschreibbar machen. In die beim Anmelden ausgführten Datei „/home/BENUTZERNAME/.xsessionrc“ muss dann nur noch der folgende Code eingetragen werden:

#!/bin/bash
lidState=$(cat /proc/acpi/button/lid/LID/state | sed 's/^state: *//g')

if [ $lidState = "open" ]
then
	echo "laptopMode" > /etc/thinkpad_state
fi

Eigentlich müsste man hier auch noch thinkpad_state abfragen, falls man das Yoga im Tabletmodus ausgeschaltete hat…

2. Stylus und Xournal

Kümmern wir uns als nächstes um den Stift. Ich habe mich für Xournal als Schreibprogramm entschieden, weil damit auch problemlos PDFs annotiert werden können. Hier lässt sich unter „Option->Pen und Touch“ nicht nur die Druckstärkeerkennung einschalten, sondern auch „Touchscreen as Hand Tool“. So kann man mit den Fingern über die Nutzung des Touchscreen etwa scrollen und mit dem Stift schreiben/malen (sonst würde standardmäßig auch der Finger auf dem Touchscreen ein Schreib/Malevent auslösen). Damit das funktioniert, muss aber noch das richtige XInput-Device für den Touch ausgewählt werden. Einfach unter „Option->Pen und Touch: Designate as Touchscreen…“ den Eintrag „Wacom … Finger Touch“ auswählen. Vor dem Beenden nicht vergessen, über „Option->Einstellungen speichern“ die Änderungen zu sichern, sonst darf man sich bei jedem neuen Programmaufruf durch die Einstellungen hangeln.

So weit, so gut. Allerdings gibt es in Xournal Version 0.4.8 einen nervigen Bug: ein übereifrige Internationalisierung macht es unmöglich, dass Xournal beim nächsten Start das gespeicherte Touchscreen Device richtig zuordnet. Mit dem Finger wird daher wieder munter gemalt… Bis es einen Patch gibt, hilft es, einfach nach dem Speichern die Config-Datei „~/.xournal/config“ per Hand zu ändern. Einfach ein fälschlicherweise durch einen Punkt ersetztes Komma vor Ltd beim Touchscreen Device wieder einfügen. So sieht die entsprechende Zeile richtig aus:

touchscreen_device_name=Wacom Co.,Ltd. Pen and multitouch sensor Finger touch

Über „Optionen->Belegung Taste 2“ kann die Funktion der oberen Taste in der Mitte des Stiftes eingestellt werden. Es existiert zwar ein Punkt „Optionen->Belegung Taste 3“, dieser hat bei mir allerdings keine Auswirkungen auf die untere Taste in der Stiftmitte (das scheint an Xournal zu liegen, denn bei MyPaint werden beide Button mit unterschiedlichen Funktionen erkannt).

ThinkPad Yoga 260 – Teil 3: Ubuntu 15.10 – Was geht?

Die folgenden Ausführungen beziehen sich auf:

  • Lenovo ThinkPad YOGA 260 mit BIOS Version 1.14
  • Ubuntu 15.10 mit Kernel 4.4.0-040400

Nachdem man die Installationsprobleme ausgeräumt und Kernel 4.4 installiert hat, sieht es wie folgt mit der Funktionsfähigkeit des YOGA 260 unter Ubuntu 15.10 aus:

Funktion Stand der Dinge
Touchpad TapToClick und TwoFingerScroll funktionieren problemlos.
Touchscreen Funktioniert problemlos (keine Gesten getestet).
Tastatur Funktioniert problemlos.
TrackPoint Der TrackPoint und seine drei Tasten, sowie Scroll funktionieren problemlos.
ThinkPad Pen Pro/Stylus Test mit Xournal: Druckstärke wird erkannt. Nur einer der beiden Zusatzubuttons funktioniert.
HDMI Externer FullHD Monitor funktioniert problemlos.
DisplayPort Beim Anstecken während des Betriebs friert das System ein. Ist der Monitor bereits beim Booten verbunden, funktioniert er im extended und mirror-Betrieb, beim weiterem Durchschalten der Modi friert dann wieder das System ein.
Gyroskop/Displayinhalt drehen Displayausrichtung ändert sich nicht (Sensor/Eventüberwachung noch nicht getestet).
Tabletmodus/Input sperren Die Tastatur wird beim Umklappen des Displays mechanisch gesperrt. TrackPoint, Touchpad und Maustasten bleiben aktiv. Dies kann man aber einfach mit einem Skript nachholen, das durch das beim Umklappen ausgelöst ACPI Event (ibm/hotkey LEN0068:00 00000080 000060f0) ausgelöst wird.
MicroSD-Kartenleser Funktioniert problemlos.
Kamera Kamera und Status-LED funktionieren problemlos.
Fingerabdruckscanner Nicht getestet.
SmartCard-Reader Nicht getestet.
OneLink+ Dock Stromversorgung und USB-Ports funktionieren.
Ethernet, VGA, Sound nicht getestet.
DisplayPorts funktionieren nicht. DisplayPort auf Mini-DP Kabeln wurde gar nicht erkannt. Ein DisplayPort auf HDMI Adapter mit HDMI Kabel führt sofort beim Einstecken zum Absturz (Kernel-Panic).
Audio Soundausgabe funktioniert problemlos. Mikrofon ebenfalls.
Seitliche Lautstärketasten Die seitlichen Lautstärketasten für den Tabletmodus funktionieren problemlos.
WLan Funktioniert wie gesagt nur nach Installation von Kernel 4.4.
Bluetooth Funktioniert problemlos.
Standby Standby beim Schließen des Notebookdeckels funktioniert (inkl. pulsierendem ThinkDot im Display. Allerdings ist der Stromverbrauch, wahrscheinlich aufgrund des nötigen Kernelparameters „intel_pstate=no_hwp“, zu hoch. Ein voll geladener Akku wäre im Standby nach etwas 5,6 Tagen leer.
Shortcuts Stand der Dinge
Bildschirmhelligkeit F5/F6 und einstellen der Helligkeit über Menü funktionieren problemlos.
Keyboard Backlight Fn+Leertaste funktioniert.
Lautstärke F1/F2/F3 funktionieren.
Mikrofon stummschalten F4 (und LED) funktionieren.
Fn-Lock Fn+Esc schaltet FN-Lock an/aus (und LED).
Suche F10 erstmal funktionslos. Wenn man allerdings unter Systemeinstellungen->Tastatur->Tastaturkürzel:Starter das Kürzel für Suchen auf „Strg+F10“ ändert, geht der Aufruf der Suche auch einfach nur mit F10…
Flugmodus F8 schaltet nur WLan an/aus, nicht Bluetooth.
Externer Bildschirm F7 funktioniert am HDMI und DisplayPort-Anschluss (schaltet erweitert, mirror, nur extern, nur intern durch).
Tools/Einstellungen/Systemsteuerung F9 erstmal funktionslos. Einfach über Systemeinstellungen->Tastatur->Tastaturkürzel ein eigenes neues Kürzel mit dem Befehl „unity-control-center“ anlegen und dann F9 zuweisen.
F11 F11 erstmal funktionslos. Um z.B. Compiz-Scale (ähnliche OS X Expose) auf die Taste zu legen, einfach „compizconfig-settings-manager“ installieren, nach „scale“ suchen und unter Bindings etwa für „Fensterauswahl für alle Fenster initialisieren“ F11 als Taste auswählen.
F12 F12 öffnet den Persönlichen Ordner in Nautilus.