Archives for posts with tag: Linux

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)

Mehrere Erfahrungsberichte haben nahe gelegt, dass das Lenovo Ideapad Miix 320 unter Linux laufen wird. Sehr wahrscheinlich wird das meiste direkt funktionieren, zumal die meisten noch Ubuntu-Mate 18.04 mit 4er Kernel installiert hatten. Andere haben Arch versucht oder Debian, ebenfalls erfolgreich. Ich starte direkt mit Xubuntu 19.10 und einem 5er Kernel.

Was man vorher unbedingt tun sollte – und zwar noch unter Windows – ist ein BIOS-Update. Auf meinem war noch ein 7.irgendwas, aktuell ist das BIOS 8.4. Es beugt einigen Ungereimtheiten vor, wahrscheinlich hängt das Blackscreen-Problem teils damit zusammen und zuletzt wurde nochmal was am Wifi gemacht.

Windows, ade! Scheiden tut weh.

von wegen ;) Auf einen USB-Stick hab ich das Xubuntu 19.10-Image kopiert. Mit [Fn+F2] während des (hässlichen!) Lenovo-Splash-Screens kommt ihr ins BIOS, dort stellt ihr “Secure-Boot” auf disabled. Wenn der Stick steckt: neu starten, dann kann man per [Fn+F12] ins Bootmenü gelangen. Mit einem 19er Ubuntu ist der Zauber von Kernel-Parametern nicht mehr nötig, die Installation läuft einfach durch. Windows lasse ich direkt von der Platte putzen, Xubuntu darf sich die gesamte 64GB-SSD einverleiben.

Out of the Box funktionieren bei Xubuntu 19.10 (also mit XFCE):

  • Display – auch wenn es erstmal nach links gedreht ist,
  • Helligkeitsreglung,
  • Touchpad,
  • Touchscreen (multitouch),
  • Wifi,
  • LTE-Modem (ist ein FIBOCOM L813-EAU per internem USB),
  • Batterie- und Ladeanzeige,
  • Sound

Suspend2RAM geht manchmal, manchmal auch nicht, irgendwas weckt das Tab gleich wieder auf. Unwichtig vorerst, immerhin geht beim Zuklappen das Display aus und – wichtig – beim Aufklappen wieder an.

Die beiden Kameras funktionieren nicht, ebenso tut die automatische Dreherei des Displayinhalts nicht – aber da kümmer ich mich später drum. Erstmal muss der Bildschirm richtig gedreht werden. In der Lightdm-Konfiguration legen wir ein Startscript fest: In /etc/lightdm/lightdm.conf.d/ legen wir als root eine Datei namens 80-display-setup.conf an:

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

Das bash-script muss natürlich als root angelegt und folgendermaßen befüllt werden:

#!/bin/bash
# Loginscreen auf querformat
xrandr -o right
xinput set-prop “FTSC1000:00 2808:1015” –type=float “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.

Aber dein Scheiden macht, daß jetzt mein Herze lacht.

Soweit bin ich erst einmal zufrieden. Die Installation lief angenehm unspektakulär, sowas schafft auch ein Neuling in Sachen Linux. Danke an die ganze Community, die hier einfach saubere Arbeit geleistet hat :)

Nach wenigen Tagen habe ich festgestellt, das bei meiner Art der Nutzung der Akku locker 10 h durchhält. An die Tastatur habe ich mich schnell gewöhnt, nur die F-Tasten über Fn+ erreichen zu müssen ist manchmal etwas mühsam. Und ich hätte gern einen ordentlichen Tablet-Mode: Wenn ich das Tab vom Display ziehe soll das automatische Drehen des Displays funktionieren und die Bildschirmtastatur aktiviert werden. Kommt Zeit, kommt Script…

Liedtext in der Wikipedia

(swg)

Langsam wird mein Elektrozoo mit sinnvollen Aufgaben betraut. Der Rasperry Pi im Küchenschrank kümmert sich nicht mehr nur ums Radio (MPD). Kürzlich hatte ich dort die Nextcloud installiert. Marias und mein Handy synchronisieren da hin, so haben wir immer alle Termine im Blick. Die Daten der Cloud habe ich inzwischen auf einer kleinen Festplatte gelagert, da hab ich jetzt ordentlich Platz.

Was mir noch fehlte, ist, dass das Küchenradio auch die Musiksammlung unter der Fuchtel hat und ich außerdem per Cloud drauf zugreifen kann. Besagte Sammlung lungert aber auf der ganz großen Datenschleuder, meinem Debian-Server mirny. Kann man doch gleich den Küchen-Raspi als Backup mit Mehrwert verwenden!

Damit die Musiksammlung auch immer aktuell ist, braucht es ein Sync-Script. Hier müssen gleich ein paar Aufgaben gelöst werden:

Sync

Als erstes muss das Musik-Verzeichnis synchronisiert werden, es reicht, wenn das Verzeichnis kopiert wird und es eine Sperre gegen versehentliches Löschen gibt. Dafür nehme ich rsync:
/usr/bin/rsync -xltbr –delete –backup-dir=/nextcloud-data/gelöscht –rsh=’ssh’ \
–exclude-from=/opt/nextcloud/rsync-exclude swg@mirny:/Musikverzeichnis/ /nextcloud-data/Musik

Ein paar Erklärungen zu den Optionen seien hier noch gegeben

  • -l copy symlinks as symlinks
  • -t preserve modification times
  • -x berücksichtigt nur Objekte, die sich im gleichen Dateisystem befinden
  • –rsh wählt die remote shell aus, die meisten werden SSH nutzen. Also -e ssh
  • –delete vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, dass man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte.
  • -b sorgt dafür, dass durch die Option –delete gelöschte sowie alle veränderten Objekte gesichert werden (siehe dazu folgende Option –backup-dir=)
  • –backup-dir=Verzeichnis gibt ein Verzeichnis für die gelöschten und geänderten Objekte an, siehe Option -b
  • -r –recursive
  • –exclude-from=Datei die Datei enthält eine Liste auszuschließender Muster

rsync kopiert immer alles aus dem Musik-Verzeichnis von mirny. Wenn eine Datei auf mirny nicht mehr da ist, wird sie auf dem Küchen-Raspi in ein Verzeichnis für gelöschte Dateien verschoben. So hab ich noch eine Kontrolle über das, was so verschwindet. Wogegen es nicht hilft, ist ein schleichender Defekt der Platte, kaputte Dateien werden auch im Backup kaputt sein.

Der Inhalt der exclude-Datei sieht bei mir so aus:
– .*
– upload

Es sind alle versteckten Dateien und Verzeichnisse ausgeschlossen, und was upload heißt.

Aufwachen!

Aus Gründen läuft mirny nicht durch. Die eeeBox ist eher schlecht entwärmt, woran die ION-Grafik die Hauptschuld trägt. Außerdem will ich die große Platte schonen, die soll nicht dauerlaufen. Naja und letzten Endes muss ich den Strom ja auch bezahlen. Mirny hat einen Mechanismus, der ihn ohne äußeren Zugriff nach ca. 20 min in den Suspend schickt. Wenn das Backup laufen soll, muss mirny also geweckt werden: etherwake hilft. Ob mirny läuft, teste ich mit nc auf einen aktiven ssh. Fünf Versuche in einer Schleife sollten fürs Wecken reichen:
MIRNY_AWAKE=0
wakeup_mirny()
{
_RETRY=5
while (( RETRY > 0 ))
do
# Test, ob mirny per ssh erreichbar ist
/bin/nc -z -w1 mirny > /dev/null
if [ $? -eq 0 ]
then # ja fertig!
RETRY=0
MIRNY_AWAKE=1
else # nein: mirny wecken
/usr/sbin/etherwake -i eth0 aa:bb:cc:dd:ee:ff
/bin/sleep 5
((RETRY–))
fi
done
}

Das ganze als bash-Funktion mit einem Rückgabewert MIRNY_AWAKE, obs geklappt hat.

Berechtigung & Index

Damit die Nextcloud wirklich auf die Musik zugreifen kann, müssen die Dateien für den www-data Benutzer zugreifbar sein. Nach dem rsync ist also die Besitzübernahme mit chown -R fällig.
chown -R www-data:www-data /nextcloud-data/Musik

Das die Daten im richtigen Verzeichnis liegen, ist nur die halbe Miete. In der Nextcloud sieht man sie erst, wenn sie auch in deren Datenbank indiziert stehen. Dafür muss im Installationsverzeichnis der Nextcloud manuell gesorgt werden:
/usr/bin/php occ files:scan –all

Sowas zieht sich je nach Umfang der Verzeichnisse ganz schön hin.

Script

Als ganzes Script ergibt sich dieses schöne Bild:

#!/bin/bash
MIRNY_AWAKE=0
LOGGER=”/usr/bin/logger”
#
wakeup_mirny()
{
RETRY=5
while (( RETRY > 0 ))
do
$LOGGER “music backup: check mirny!”
# Test, ob mirny per ssh erreichbar ist
/bin/nc -z -w1 mirny > /dev/null
if [ $? -eq 0 ]
then # ja fertig!
$LOGGER “music backup: mirny is awake!”
RETRY=0
MIRNY_AWAKE=1
else # nein: mirny wecken
$LOGGER “music backup: waking mirny…”
/usr/sbin/etherwake -i eth0 aa:bb:cc:dd:ee:ff
/bin/sleep 5
((RETRY–))
fi
done
}
#
$LOGGER “music backup: Starting backup…”
wakeup_mirny
if [ $MIRNY_AWAKE -eq 0 ]
then
$LOGGER “music backup: Failed to wake mirny! Backup failed!”
exit 1
fi
/usr/bin/rsync -xltbr –delete –backup-dir=/nextcloud-data/gelöscht –rsh=’ssh’ \
–exclude-from=/opt/nextcloud/rsync-exclude \
swg@mirny:/Musikverzeichnis/ /nextcloud-data/Musik
if [ $? -eq 0 ]
then
$LOGGER “music backup: rsync successfully done!”
/bin/chown -R www-data:www-data /nextcloud-data/Musik
cd /var/www/nextcloud
# Das folgende muss als www-data laufen, sonst ist das nicht erlaubt!
$LOGGER “music backup: updating nextcloud index…”
/usr/bin/sudo -u www-data /usr/bin/php occ files:scan –all
$LOGGER “music backup: successfully done!”
else
$LOGGER “music backup: rsync error! Backup failed!”
fi
exit 0;

Das Script lasse ich per cron mit dem Nutzer root einmal die Woche laufen. Mit dem Logger ist dafür gesorgt, dass ein paar nachvollziehbare Meldungen im syslog landen.

Jetzt muss ich den MPD noch mit dem Musik-Verzeichnis bekannt machen, dann hab ich meine Musik nicht nur immer im Zugriff, sondern kann sie auch in der Wohnung direkt hören.

Wenn ihr das Script nutzen wollt, passt bitte bei etherwake Netzwerkinterface und MAC an, und ihr müsst natürlich alle Verzeichnisse, aus und zu denen ihr kopieren wollt, korrigieren. Wenn in Eurem Netzwerk Namen nicht in IPs aufgelöst werden, setzt einfach die (fest vergebenen) IPs ein.

(swg)

Prinzipiell halte ich mich ja von den sozialen Netzwerken und den großen Datenkraken fern. Weder hab ich facebook, noch irgend einen seiner einkassierten Ableger. Auf google hab ich eine Mailadresse (für Müll), aber google+ hab ich nie benutzt. Tut auch sonst kaum jemand, weswegen google den Krams jetzt abschaltet.

Was ich wirklich benutze, ist der google-Account mit Youtube. Was man da sonst als “trending” angezeigt bekommt, spottet jeder Beschreibung. Ich brauch echt meine Filterblase.

Und dann wäre da noch der Kalender. Google kennt jeden unserer Termine. Es ist ja auch unglaublich einfach zu nutzen, zu syncen und mit dem Webinterface hat man immer und überall Zugriff, auch ohne Handy. Ein Dorn im Auge ist mir das trotzdem schon lange: Googles wegen.

Aber wie ändern? Eine komplette Owncloud installieren? Gedacht hab ich das vor ein paar Jahren schon. Etwas Recherche zeigte erstmal, dass das nicht komplett freie Software ist und es schien auch massig Probleme zu geben. Neue Probleme brauchte ich nicht. Also blieb erstmal alles, wie es war.

Neulich hat Roman mir dann was empfohlen: Baikal. Das synchronisiert als Zentrale alle Kalender per Caldav und benötigt selbst kaum Ressourcen. Was mir dennoch fehlt, ist ein Webinterface. Das ist schon irgendwie Pflicht, meine Termine will ich nicht nur im Handy zurecht frickeln.

So’ne richtige Cloud wäre ja schon cool, so mit Dateiablage, Kontakten und dem Kalender natürlich. Inzwischen wurde Owncloud von einem der Gründer geforkt. Nextcloud ist komplett freie Software und es gibt ‘ne Menge Tutorials, sogar für den Raspberry Pi.

Mein Raspi in der Ladestation im Küchenschrank ist damit wohl aber überfordert, das ist noch ein 2B+. Als Küchenradio und WLAN-AP im Hof reicht er, für mehr aber auch nicht. Ein 3B+ ist schnell bei Conrad geholt. Zwei Tage Kind-krank spielen mir in die Hände, dann ist alles installiert (ganz frei von Stolperfallen ist das nämlich trotz aller Tutorials nicht). Bei Strato richte ich noch eine Dyndns-Subdomain ein und der Zugriff von außen klappt auch.

Damit ist der Google-Kalender nun endlich Geschichte.

(swg)