Archives for posts with tag: Linux

Nachdem ich gestern den anderen Miix 320 repariert habe, ist mir aufgefallen, dass das Script fürs automatische Drehen des Bildschirms gar nicht im Blog ist. Gnome kann das unter Linux inzwischen zwar selbst, auf dem kleinen Lenovo nehm’ ich aber doch lieber XFCE – da muss man das selber nachrüsten.

Beim Miix ist die Orientierung des Displays unter Xorg per Default im Hochformat mit den Knöpfen oben. Fürs korrekte Querformat müsste man den Bildschirm nach rechts drehen: xrandr -o right

Das soll natürlich auch beim Loginbildschirm schon alles richtig sein. Ich verwende auf meinem Miix 320 als Displaymanager lightdm. In der lightdm-Konfiguration legt man ein Startscript fest: In /etc/lightdm/lightdm.conf.d/ legen wir mit erhöhten Rechten eine Datei namens 80-display-setup.conf an:

[SeatDefault]
greeter-setup-script=/etc/lightdm/greeter_setup.sh

Dieses bash-script muss ebenfalls mit erhöhten Rechten angelegt und folgendermaßen befüllt werden:

#!/bin/bash
# Loginscreen auf querformat
xrandr -o right
xinput set-prop “FTSC1000:00 2808:1015” “Coordinate Transformation Matrix” 0 1 0 -1 0 1 0 0 1

Ausführbar gemacht chmod u+x /etc/lightdm/greeter_setup.sh erscheint der Login korrekt gedreht. Die xinput-Zeile sorgt dafür, dass der Touchscreen mit gedreht wird.

Jetzt stimmt zwar die Bildschirmausrichtung erstmal, von selber drehen tut sich aber nichts, das funktioniert nur unter Gnome von alleine. Ich verwende allerdings XFCE: beheben wir das mal! Ich bin nicht der erste mit dem Problem und einen guten Ansatz findet man bei Julien auf github, der das schonmal für sein Yoga gebastelt hat, und auch beim LinuxAppFinder.

Meine Variante besteht aus drei Scripten: einem zum Aktivieren der Dreherei, eines das die Dreherei selbst ausführt und einem zum Abschalten des Bildschirm drehens. Sinn ist, wie bei jedem Tablet ScreenRotate per Knöpfchen schalten zu können.

Das Script fürs eigentliche Bildschirmdrehen benötig das iio-sensor-proxy Package. Unter Ubuntu ist das mit sudo apt install iio-sensor-proxy schnell nachinstalliert.

Hier der Code vom Script autorotate.sh

#!/bin/bash
# Sensor pipe to get output from monitor-sensor
sensorpipe=/tmp/pivotsensor
# if pipe doesn’t exist, create it
if [[ ! -p $sensorpipe ]]; then
/usr/bin/mkfifo $sensorpipe
fi
/usr/bin/logger “autorotate started”
/usr/bin/monitor-sensor >> $sensorpipe 2>&1 &
monisenspid=$!
# Parse output or monitor sensor to get the new orientation whenever a line appaers in sensorpipe
# Possible are: normal, bottom-up, right-up, left-up, quit. Light data will be ignored
while true; do
if read line<$sensorpipe; then #echo $line # Read the last line that was added to the pipe and get the orientation ORIENTATION=$(/usr/bin/echo $line | /usr/bin/grep 'orientation' | /usr/bin/grep -oE '[^ ]+$') case "$ORIENTATION" in # Set the actions to be taken for each possible orientation normal) /usr/bin/xrandr -o normal /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1 ;; bottom-up) /usr/bin/xrandr -o inverted /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1 ;; right-up) /usr/bin/xrandr -o right /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1 ;; left-up) /usr/bin/xrandr -o left /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1 ;; quit) # if you send "orientation quit" to the pipe, the script exits break ;; esac fi done /usr/bin/rm -f $sensorpipe /usr/bin/kill $monisenspid /usr/bin/logger "autorotate ended" exit 0

Das Script kümmert sich auch um das Drehen des Touchscreens, sodass das Tablet auch bedienbar bleibt. Jedes Mal, wenn der Sensor eine Drehung registriert, schreibt monitor-sensor die neue Orientierung des Displays in die pipe. Das read line liest die Zeile und das case führt die entsprechende Aktion aus. Ein orientation quit beendet das Script und die Bildschirm-Dreherei.

Ein Script für das Einschalten der Dreherei brauchen wir noch, das ist übersichtlich:

#!/bin/bash
~/.bin/autorotate.sh &

Wie ihr seht, gibt es in meinem home-Verzeichnis einen versteckten bin-ordner, der meine kleinen Helferlein beherbergt.
Kaum länger fällt das stop-script aus:

#!/bin/bash
# Sensor pipe to get output from monitor-sensor
sensorpipe=/tmp/pivotsensor
# if the pipe doesn’t exist the autorotate script does not run
if [[ ! -p $sensorpipe ]]; then
echo “$sensorpipe: no such pipe”
exit 0
fi
/usr/bin/logger “stopping autorotate”
/usr/bin/echo “orientation quit” > $sensorpipe
exit 0

Herunterladen könnt ihr die drei auch einfach:

Alle drei Scripte müssen ausführbar sein! Das startautorotate.sh lasse ich beim login von XFCE starten – das lässt sich über “Sitzung und Startverhalten” einstellen. Ansonsten kann man sich in eine beliebige Leiste die entsprechenden Symbole mit den hinterlegten Scripten nageln und das AutoRotate manuell ein- und ausschalten.

(swg)

In der Schublade liegt noch mein erster Miix 320. Der, dessen Touchscreen mir im Skiurlaub letztes Jahr gerissen war, das Display war noch völlig intakt. Der Touch konnte ersetzt werden, allerdings hat der dann nicht sauber funktioniert. Irgendwas war mir beim Aufkleben daneben gegangen, jedenfalls zappelte der Mauszeiger irgendwie über den Schirm und reagierte eher kaum auf Berührungen.

Jetzt ist mir Display und Touch fertig verklebt für knapp 70,- € begegnet. Alis Expresslieferung hat nur zwei anstatt der vier avisierten Wochen gedauert. Nachdem ich eine weitere Woche gezögert habe, bot sich nun endlich die Gelegenheit zum pfriemeln.Der ganze Kram muss von der Rückseite gezupft werden: Akku, Mainboard und leider auch die am oberen Displayrahmen verklebten Antennen. Ok, nur zwei, die für das Modem.Den Akku habe ich mit doppelseitigem Klebeband gesichert.So fertig, alles transplantiert. Sogar die Antennen konnte ich lösen und wieder aufkleben. Blöder Weise hat’s einen der u.fl-Antennenstecker zerbröselt – natürlich vom Modem – den vom WLAN hätte ich ja zwei Mal gehabt…Hm. Seht ihr das auch? Steht Kopf, oder? Das ist keine Fehleinstellung in meinem Xorg oder so. Nee, das ist auch schon beim Splash-Screen des BIOS so. Schlimm ist das jetzt nicht, mit ein paar Handgriffen kann ich das umkonfigurieren. Aber kurios find’ ich das schon.

(swg)

Wo es nur geht betreibe ich meine IT-Infrastruktur selbst. Die letzte Errungenschaft istmeine eigene Nextcloud. Für das selber betreiben gibt es mehrere Gründe, die Reihenfolge der Aufzählung stellt jetzt keine Gewichtung dar. In der Hauptsache gehen einfach meine privaten Dateien/Termine/Kontakte/Fotos niemanden etwas an, soweit ich das nicht selbst teile. Und auch der Hinweis, $Marketingfuzzi sei an mir persönlich nicht interessiert und wolle mich ja nur Gruppen zuordnen können, macht das kaum besser. Ich lasse mich nicht gerne schubladisieren. Für die Nextcloud war meine Triebfeder der Gedanke, dass Google nicht den gesamten Familien-Terminkalender kennen sollte. Und es geht Google auch nichts an, wer so in meinem Telefonbuch steht.
Nextcloud Logo
Nachdem nun in der EU sogar die todgeglaubten Cryptowars wieder aufflammen – wie kann man so dämlich sein und eine Hintertür in Verschlüsselungen fordern?! – denken doch eine ganze Menge Leute darüber nach, wer so alles in ihr Leben guckt – und das ist sehr gut so. Im Einzelnen möchte ich hier aufdröseln,https://www.janeemussja.de/index.php/2019/02/heiter-bis-wolkig/ was das Selbsthosten der Nextcloud bedeutet.

Herrsche

Fangen wir mit der Hoheit an. In meiner Nextcloud bin ich der Chef und kann sagen, was ich da drin alles an Features habe will, und was nicht. Und vor allem bestimme ich, wer etwas sehen darf. Die Cloud ist mir
– Dateiablage,
– Terminkalender,
– Kontaktverwaltung,
– Einkaufslisten und Projektorganisation (via Deck, einem Kanban-Board),
– Messenger (Talk mit Videochat!) und
– Online-Musikplayer (meine Musiksammlung liegt da rum).

All unsere Handys synchronisieren ihre Adressbücher und Terminkalender hier hinein, untereinander teilen können wir die natürlich ebenfalls. Die Fotos unserer Handys werden automatisch hochgeladen, sowie sämtliche Dateien, die ich als wichtig empfinde. Ich brauch’ mich absolut nicht darum kümmern, das läuft von selbst. Es ist einfach mein gesamter Datenschatz für mich immer und überall zugreifbar, wenn ich nur Internet habe.

Ein voll cooles Feature ist die Musik-App: Meine Musiksammlung habe ich in die Cloud gelegt. Direkt über das Webinterface der Cloud kann ich die durchsuchen und abspielen. Fetzig!

Der absolute Killer ist die Messenger-App Talk: Alle Nutzer der Cloud können sich miteinander unterhalten. Es lassen sich Räume anlegen, in denen man zu mehreren chatten und sogar videotelefonieren kann! Als Dreier-Videokonferenz funktioniert das ganz ohne Probleme. Zu viert geht auch, darüber soll es Performance-Probleme geben. Da muss ich mal noch etwas mehr experimentieren.

Damit sind wir nach der Herrschaft und Zugreifbarkeit bei der nächsten großartigen Möglichkeit der eigenen Nextcloud: dem Teilen!

und teile

All die Daten, die man in der Nextcloud liegen hat, kann man mit anderen teilen. Dateien mit jemandem da draußen teilen? Ohne Account in dieser Cloud? Kein Problem: Einfach einen Link auf den Ordner/die Datei erstellen und verschicken! Alles lässt sich passwortschützen & mit Berechtigungen versehen. Pappt man einen Ablauftermin dran, vergisst man nicht mal die Freigabe wieder zu deaktivieren. Benutzt hab ich das Teilen von Dateien sogar schon mit Behörden. Als ich den Bus mitten im Corona-Lockdown zulassen musste, habe ich alle Dokumente in der Cloud abgelegt. Eine Email mit dem Freigabe-Link an die Zulassungsstelle und der freundlichen Frage, ob noch was für den persönlichen Termin fehlt, wurde schnell beantwortet. Ein Antrag wurde mir noch reingelegt, dann war alles komplett. Sehr geil.

Einfach mal Videotelefonieren mit Leuten ohne Account? Geht auch: Einen Talk-Link erstellen und verschicken. Mit nahezu jedem Browser kann man beliebig Leute einladen. Silvestergrüße haben wir videotelefonisch quer durch die verstreute Familie winken können.

Noch viel wichtiger sind die Funktionen intern: In erster Linie lassen sich Termine und Telefonbuch sehr leicht gemeinsam pflegen. Den Alltag kann man aber noch deutlich mehr organisieren. Mit Deck gibt es beliebig gestaltbare Kanban-Boards. Wir verwalten darüber gemeinsame Einkaufslisten, Aufgaben und Planung zum Beispiel zur Instandhaltung der Wohnung und auch größere Vorhaben, wie den Umbau vom Wohnmobil. Insgesamt geht im Alltag dadurch deutlich weniger unter bzw. wird vergessen.

Besitze!

So eine Nextcloud kann man auf verschieden Arten betreiben: Fertige Installationen lassen sich bei verschiedenen Anbietern mieten. Bei diversen Hostern lässt sich das Paket auch selbst installieren, Webspace reicht, man kann auch einen V-Server nehmen – ganz nach eigenem Anspruch.

Der Nachteil ist hier, dass man nicht Herr über den Rechner ist, auf dem das läuft. Und mein Vertrauen in die fremd-betriebene IT-Infrastruktur lässt immer weiter nach. Nicht das die Anbieter nicht kompetent wären, aber wer noch so alles auf meine Daten und Kommunikation gucken können möchte… Der EU-Rat hat gerade gucken lassen, die Ende-zu-Ende-Verschlüsselung aufmachen können zu wollen. Das ist nicht nur haarsträubend hanebüchen, es ist schlicht eine gefährlich antifreiheitliche Entwicklung!

Selber machen ist also angesagt, um nicht zu sagen: dringend geboten! Alles, was man braucht, ist ein halbwegs potenter Internet-Anschluss und ein kleiner Rechner – wie den RaspberryPi 4 (4 GB RAM) – und eine SSD als Datenhalde. Für jemanden, der das in dem Umfang noch nie gemacht hat, schätze ich den Aufwand inklusive des Betriebssystems (Raspian), Webserver, Datenbankserver, TURN-Server (wg. Videotelefonie) und dem Nextcloud-Paket auf zwei Abende. Dafür sollte man aber kein völliger Linux-Neuling sein und vielleicht schon etwas Kontakt mit Linux gehabt haben. Seine Handys mit allen Apps auszustatten und Daten, Kontakte und Kalender in die Cloud zu hieven wird noch einen Abend drauf gehen.

Für den einen oder anderen klingt das vielleicht viel, ich halte das aber für einen eher kleinen Aufwand für die Souveränität, die man damit zurück gewinnt. Wie ich die Nextcloud eingerichtet habe, soll in einem nächsten Artikel folgen.

(swg)

Mein Miix 320 lässt sich herrlich als Tablet verwenden! Ich nehme es im Bus zum Lesen – Bücher, c’t, heise+, News. Für letztere brauch man Internet (sic!). Klar, das Miix  320 hat ein integriertes LTE-Modem. Leider zeigt sich auch hier ein Problem, dass ich schon auf meinem eee PC hatte: Wenn der Rechner aus dem S3 erwacht, funktioniert ab und an das Modem nicht. Das Ab- und wieder Anschalten im Networkmanager bringt nix, es bleibt dabei, er kriegt keine Verbindung. Im journal findet man dann endlos sowas:

Nov 27 21:48:34 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (registering -> home)
Nov 27 21:48:34 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (home -> idle)
Nov 27 21:48:35 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (idle -> registering)
Nov 27 21:48:35 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (registering -> home)
Nov 27 21:48:35 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (home -> idle)
Nov 27 21:48:36 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (idle -> registering)
Nov 27 21:48:36 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (registering -> home)
Nov 27 21:48:36 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (home -> idle)
Nov 27 21:48:37 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (idle -> registering)
Nov 27 21:48:37 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (registering -> home)
Nov 27 21:48:37 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (home -> idle)
Nov 27 21:48:38 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/24: 3GPP Registration state changed (idle -> registering)

Netz kriegt man aber nicht, irgendwann gibt der Networkmanager auf. Wahrscheinlich hat sich das Modem in irgendeiner Form aufgehängt. Bei einem internen Modem am USB ist rausziehen und wieder reinstecken irgendwie keine Option. Was macht man dann? Neustart des ganzen Rechners? Nicht sehr elegant. Eigentlich muss es doch möglich sein, einen Reset des USB-Gerätes zu erzwingen. Und das geht tatsächlich! Die Antwort habe ich auf askubuntu.com gefunden.

Man muss herausfinden, wo genau am USB das Modem hängt:

root@progress:/# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/7p, 480M
|__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 4: Dev 5, If 1, Class=CDC Data, Driver=cdc_mbim, 480M
|__ Port 4: Dev 5, If 0, Class=Communications, Driver=cdc_mbim, 480M

Mein Modem hängt an Bus 01, Port 4. Jetzt werfen wir das Modem aus:

root@progress:/# echo ‘1-4’ > /sys/bus/usb/drivers/usb/unbind
1-4

1-4 ist das Echo auf der Console. Anschließend hängen wir es wieder ein

root@progress:/# echo ‘1-4’ > /sys/bus/usb/drivers/usb/bind
1-4

Voilà, Modem wieder da und ich darf Internet. journalctl:

Nov 27 22:55:16 progress kernel: cdc_mbim 1-4:1.0: cdc-wdm1: USB WDM device
Nov 27 22:55:16 progress kernel: cdc_mbim 1-4:1.0 wwan0: register ‘cdc_mbim’ at usb-0000:00:14.0-4, CDC MBIM, ce:f3:11:c8:59:ea
Nov 27 22:55:16 progress systemd-udevd[24550]: Using default interface naming scheme ‘v240’.
Nov 27 22:55:16 progress systemd-udevd[24550]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 27 22:55:16 progress kernel: cdc_mbim 1-4:1.0 wwp0s20u4: renamed from wwan0
Nov 27 22:55:16 progress mtp-probe[24559]: checking bus 1, device 5: “/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4”
Nov 27 22:55:16 progress mtp-probe[24559]: bus: 1, device: 5 was not an MTP device
Nov 27 22:55:16 progress systemd-udevd[24545]: Using default interface naming scheme ‘v240’.
Nov 27 22:55:18 progress ModemManager[638]: opening device…
Nov 27 22:55:18 progress ModemManager[638]: [/dev/cdc-wdm1] Read max control message size from descriptors file: 512
Nov 27 22:55:18 progress ModemManager[638]: [/dev/cdc-wdm1] channel destroyed
Nov 27 22:55:18 progress ModemManager[638]: [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4] creating modem with plugin ‘Fibocom’ and ‘2’ ports
Nov 27 22:55:18 progress ModemManager[638]: Modem for device ‘/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4’ successfully created
Nov 27 22:55:18 progress ModemManager[638]: opening device…

Nov 27 22:55:29 progress NetworkManager[651]: [1574891729.3901] modem[“cdc-wdm1”]: modem state changed, ‘disabled’ –> ‘enabling’ (reason: user preference)
Nov 27 22:55:29 progress ModemManager[638]: Modem: state changed (unknown -> disabled)
Nov 27 22:55:29 progress NetworkManager[651]: [1574891729.3915] manager: (cdc-wdm1): new Broadband device (/org/freedesktop/NetworkManager/Devices/30)
Nov 27 22:55:29 progress NetworkManager[651]: [1574891729.3951] device (cdc-wdm1): state change: unmanaged -> unavailable (reason ‘managed’, sys-iface-state: ‘external’)
Nov 27 22:55:29 progress NetworkManager[651]: [1574891729.3984] device (cdc-wdm1): modem state ‘enabling’
Nov 27 22:55:39 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/26: state changed (enabling -> enabled)
Nov 27 22:55:39 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/26: 3GPP Registration state changed (unknown -> registering)
Nov 27 22:55:39 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/26: 3GPP Registration state changed (registering -> home)
Nov 27 22:55:39 progress ModemManager[638]: Modem /org/freedesktop/ModemManager1/Modem/26: state changed (enabled -> registered)
Nov 27 22:55:39 progress NetworkManager[651]: [1574891739.6730] modem[“cdc-wdm1”]: modem state changed, ‘enabling’ –> ‘enabled’ (reason: user-requested)
Nov 27 22:55:39 progress NetworkManager[651]: [1574891739.6749] modem[“cdc-wdm1”]: modem state changed, ‘enabled’ –> ‘registered’ (reason: unknown)

Damit ist das Modem auch wieder aus dem Networkmanager heraus benutzbar.

Die beiden Zeilen packen wir mit einem kurzen sleep in ein bashscript

#!/bin/bash
echo ‘1-4’ > /sys/bus/usb/drivers/usb/unbind
sleep 3
echo ‘1-4’ > /sys/bus/usb/drivers/usb/bind

Damit ich es immer erreiche, hab ich mir einen Link mit gksu ins Startmenü Whiskermenü gelegt.

Update:

Suspend/Wakeup script

Natürlich ist mir das Aufrufen des Scripts zum Reaktivieren des Modems sehr schnell auf die Nerven gegangen. Viel komfortabler ist es doch, einfach das Modem vorm Suspend abzuschalten und beim Aufwachen es wieder einzubinden. Sowas geht unter Ubuntu ganz einfach mit systemd. Natürlich habe ich nicht erst manpages dazu gewälzt: googlen brachte Just another Linux geek ans Licht. Man muss offenbar nichts weiter tun, als ein Script an die richtige Stelle zu legen. Für Ubuntu ist die Stelle /usr/lib/systemd/system-sleep/, systemd führt einfach alles darin aus, wenn das System in den Sleep geschickt oder aufgeweckt wird. Dabei übergibt systemd “pre” vorm Suspend und “post” beim Aufwachen.

Mein Script heißt network und muss natürlich ausführbar gemacht werden: chmod a+x ./network. Drin steht folgendes:

#!/bin/bash
## Dieses scrip sorgt beim suspend für
## – korrektes abschalten/einschalten des Modems
if [ “${1}” == “pre” ]; then
# vorm suspend
/usr/bin/logger “turning off wwan radio”
/usr/bin/nmcli radio wwan off
echo ‘1-4’ > /sys/bus/usb/drivers/usb/unbind
elif [ “${1}” == “post” ]; then
# nach dem suspend (aufwachen)
/usr/bin/logger “turning on wwan radio”
echo ‘1-4’ > /sys/bus/usb/drivers/usb/bind
/usr/bin/nmcli radio wwan on
fi

Den nmcli habe ich noch dazu angestellt, damit der Networkmanager das Modem nicht einfach unterm Hintern weggeschossen bekommt. Yay! Mehr Komfort unter Linux!
(swg)