WLAN-Verbindung nach Suspend tot

Mein Netbook ist, wie hier schon geschrieben, mit einem WLAN-USB-Stick von Edimax ausgerüstet. An sich läuft dieser auch sehr zufriedenstellend. Wäre da nur nicht ein Problem wenn ich den Rechner per Suspend schlafen schicke.

In der Datei /etc/systemd/logind.conf habe ich eingestellt, dass sobald der Deckel des Netbooks geschlossen wird der Rechner per Suspend to Ram schlafen geschickt wird. Das funktioniert auch soweit. Wecke ich den Rechner wieder auf funktioniert alles nur die WLAN-Verbindung mag nicht mehr. Hierbei ist mir aufgefallen, dass jedes mal wenn ich den Rechner ins Bett schicke die Anzeige am Stick ausgeht aber nach dem Aufwecken nicht wieder an.

Da ich systemd und für die Netzwerkverbindungen netctl nutze habe ich mir kurzerhand eine Service-Datei gebastelt mit der nach dem Aufwecken auch die WLAN-Verbindung automatisch wieder in einen funktionsfähigen Zustand versetzt wird.

[Unit]
Description=Verbindung mit netctl sichern und wiederherstellen
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/netctl store ; /usr/bin/netctl stop-all
ExecStop=/usr/bin/netctl restore

[Install]
WantedBy=sleep.target

Im Grunde genommen ist das Ganze schnell erklärt. Bevor sleep.target (in dem Fall also Suspend) ausgeführt wird, werden die Befehle abgesetzt, die in der Zeile welche mit ExecStart beginnt stehen. Wenn der Rechner wieder aufgeweckt wird, wird dann noch das ausgeführt, was in der Zeile mit ExecStop eingetragen ist.

Mit netctl store wird abgespeichert, welche Profil gerade aktiv ist. Netctl stop-all stoppt alle Profile. Und netctl restore läd alle Profile wieder, die mit store als aktiv gespreichert wurden.

Den Service habe ich dann unter /etc/systemd/system/netctl-restore.service abgespeichert und mittels systemctl enable netctl-restore.service scharf geschaltet. Versetze ich den Rechner nun in Tiefschlaf und wecke ich ihn wieder auf, steht innerhalb weniger Sekunden die WLAN-Verbindung wieder. Einen kleine Schönheitsfehler gibt es aber noch. Ich nutze aus diversen Gründen (wie z. B. wegen der Gema-Blockade bei Youtube) einen VPN-Dienst. Dieser spielt hierbei irgendwie nicht mit. Von daher habe ich die Service-Datei noch einmal bearbeitet und Zeile 10 wie folgt erweitert.

ExecStop=/usr/bin/netctl restore ; /usr/bin/systemctl restart openvpn@vpn.service

Somit wird erst das Profil mit netctl wieder aktviert und danach die OpenVPN-Verbindung neu gestartet.

Was wird über ein systemd-target gestartet?

Systemd bietet sogeannte Targets. Grob gesagt so etwas wie Runlevel wie man sie von sysVinit her kennt. Multi-user.target entspricht hier am ehesten Runlevel 3. Graphical.target Runlevel 5. Um sich eine Übersicht zu verschaffen welche Services zum Beispiel das Target multi-user.target ausführen möchte, kann man folgenden Befehl verwenden:

systemctl show -p "Wants" multi-user.target

Als Ergebnis erhält man dann beispielsweise folgende Ausgabe:

Wants=cronie.service openvpn@nvpn.service unbound.service remote-fs.target systemd-networkd.service haveged.service updatedb.timer shadow.timer rpcbind.service logrotate.timer man-db.timer systemd-logind.service systemd-user-sessions.service getty.target systemd-ask-password-wall.path dbus.service

Anstelle von Wants kann auch WantedBy, Requires, RequiredBy, Conflicts, ConflictedBy, Before, After genutzt werden. Eine genauere Erklärung der sogenannten Section Options findet man hier. Daher gehe ich hier nicht näher darauf ein.

Warum ich mich mit aktuellen Browsern nicht anfreunden kann

Da mir aktuell das Youtube-Problem unter QupZilla zu sehr auf den Zeiger geht (sobald man an eine noch nicht geladene Stelle springt, stürzt der Browser ab. Problem ist hier die aktuelle stabile Version von qt-webkit), habe ich mal anhand von Seamonkey getestet, was ich alles machen muss, bis mir der Browser halbwegs zusagt.

Folgendes ist hochgradig subjektiv! Und ziemlich wahrscheinlich hätte ich einige Sachen besser lösen können.

Ich brauche Mausgesten. Das ist für mich wichtiger als zum Beispiel ein Werbefilter. Seamonkey bietet das leider von Haus aus nicht an. Also habe ich mich nach der Installation des Browsers erst einmal auf die Suche nach einem entsprechenden Plugin gemacht (ich mag keine Plugins…). Von einem Bekannten der leidenschaftlicher Firefox-Nutzer ist, wurde mir FireGestures empfohlen. Leider hat der Entwickler das Plugin nur für den Firefox aber nicht für Seamonkey ausgelegt, so dass eine einfache Installation nicht möglich war. Nach einigem Suchen bin ich dann bei Mouse Gestures Suite gelandet. Der Entwickler hält sein Plugin kompatibel zu Seamonkey und Firefox. Das Thema wäre also schon mal erledigt. Aber das nächste Problem lies nicht lange auf sich warten…

Auch wenn ich nun ein Plugin für Mausgesten gefunden habe, habe ich mir dennoch ein paar andere Alternativen angesehen. Auf eine wurde mittels eines Textlinks verwiesen. Anklicken war also nicht möglich. Na kein Problem. Link markiert, rechte Maustaste und dann im Kontextmenü “Gehe zur Web-Adresse” (oder wie sich der Punkt bei Seamonkey auch immer nennt) aufrufen. Tja solch einen Punkt gibt es nicht. Also nächstes Plugin. Die Wahl fiel auf Selection Links auch wenn das Plugin schon ziemlich lange nicht mehr aktualisiert wurde. Leider ist auch dieses Plugin nicht für Seamonkey ausgelegt. Von Dexter, einem Boardie vom ngb.to habe ich hier allerdings eine Lösung erhalten. Auf dieser Seite kann man Plugins so abändern lassen, dass Sie in der Regel auch mit Semonkey funktionieren. Was in dem Fall auch der Fall war.

Was brauche ich jetzt noch an zusätzlichen Funktionen, die mir der Browser nicht bietet? Adblock und der Element Hiding Helper wären nicht schlecht. Überraschung! Auch hier gibt es die Plugins nur für Firefox. Also wieder bereits genannte Seite aufgemacht und die Plugins für den Seamonkey lauffähig gemacht.

Als nächstes ist die grafische Oberfläche des Browsers an der Reihe. Hier passen mir so einige Dinge auch nicht. Von Haus aus sieht Seamonkey wie auf folgendem Bild aus.

SeaMonkey

Was mich hier stört sind links oben diese schraffierten Bereiche am Anfang der Menü- URL- und Lesezeichenzeile. Mit diesen kann man die jeweilige Zeile minimieren. Ich möchte so etwas entweder komplett anzeigen lassen oder eben komplett ausblenden. Manche Elemente in den Leisten lassen sich per wie zum Beispiel bei Opera per Drag and Drop entfernen. Diese nicht. Hätte mich auch gewundert… Also tricksen wir mal etwas mit CSS. Also habe ich mal eben im Profilverzeichnis von Seamonkey das Verzeichnis chrome erstellt und in diesem die Datei userChrome.css. Um die schraffierten Flächen auszublenden sind hier folgende Einträge nötig.

.toolbar-grippy { display: none !important; }
.toolbar-primary-grippy { display: none !important; }

Ok, was kommt als nächstes? Dass die Tabbar ganz am Ende angebracht ist, gefällt mir kein Stück. Ich bin es einfach zu sehr gewohnt, dass die Tabs über der Adresszeile angezeigt werden. Alle Lösungen die ich hierzu im Internet gefunden habe, bezogen sich auf ältere Versionen und funktionieren mit der aktuellen scheinbar nicht mehr. Überraschung! Ich habe daher als Kompromiss die Leiste mit den Lesezeichen über die Adresszeile verlegt, so dass die Tab-Zeile sowie Adresszeile zumindest nahe beieinander sind.

In der Zeile für die Tabs gibt es schon das nächste “Problem”. Ganz links gibt es eine Schaltfläche mit der man einen neuen Tab öffnen kann. Man muss also nach ganz links, klickt und bekommt dann am rechten Ende der Zeile einen Tab erstellt. Warum zur Hölle wird diese Schaltfläche nicht einfach nach dem letzten offenen Tab angezeigt? Trägt man “.tabs-stack vbox hbox stack { -moz-box-ordinal-group:10!important; }” in die userChrome.css ein, bekommt man die Schaltfläche zwar nach rechts, aber eben ganz nach rechts neben dem Pfeil und dem X. Gleicher Blödsinn nur auf der anderen Seite. Nach langem Suchen bin ich dann auf das Plugin seatabxplus gestoßen. Mit diesem wird zum einen bei jedem Tag die Schaltfläche zum Schließen des Tabs angezeigt (warum es die nicht von Haus aus gibt, will ich lieber gar nicht wissen) und zum anderen wird im jeweils aktiven Tab ein Schaltfläche erzeugt, mit der man einen neuen Tab aufrufen kann. Immer noch nicht ideal aber besser als nichts. Nun habe ich allerdings ein paar Schaltflächen zuviel. Zum einen die für den neuen Tab ganz links und die für das Schließen ganz rechts. Da ich den Pfeil mit dem man sich die Liste der offenen Tabs anzeigen kann, auch nicht brauche, habe ich folgendes in die userChrome.css eingetragen.

.tabs-stack vbox hbox stack { display: none; !important; }

Und weg sind alle drei überflüssige Schaltflächen.

Da ich nur die Browser-Komponente von Seamonkey nutzen möchte, benötige ich die Schaltflächen ganz links unten ebenfalls nicht, mit denen man z. B. den Composer oder das E-Mail-Programm aufrufen kann. Hier wurde ich überrascht. Auch diese lassen sich nicht mal eben per Drag and Drop entfernen. Also habe ich die userChrome.css um folgende Einträge erweitert und die Schaltflächen auszublenden.

#mini-nav {display:none;}
#mini-comp {display:none;}
#mini-mail {display:none;}
#mini-addr {display:none;}
#mini-irc {display:none;}

So langsam wird es doch… Nur wie stelle ich geschlossene Tabs her? Und damit meine ich jetzt nicht alle einer Session auf einen Schlag sondern je nach Bedarf. Hier gibt es im Menü “Gehe” einen entsprechenden Punkt. Aber scheinbar auch nur dort. Wieso nicht auch als Schaltfläche z. B. neben der Adresszeile? Jedes mal über das Menü zu gehen ist doch nervig. Da ich schon länger kein Plugin installiert habe, ist es wohl mal wieder soweit… Die Wahl fiel auf Undo Closed Tabs Button. Auch das ist offiziell nur für den Firefox. Also übergebe ich es weiter oben genannter Seite und lasse es kompatibel machen. Das ist scheinbar so einfach, dass es die Plugin-Entwickler doch eigentlich auch gleich machen könnten. Wegen mir dann auch ohne Garantie bezüglich Seamonkey.

Abschließend habe ich noch ein paar Elemente der grafischen Oberfläche per Drag and Drop verschoben (Vor, Zurück, Neu und Halt nach rechts usw.), was ich in dem Fall auch machen durfte.

Davon abgesehen, dass die Zeile für die Tabs nicht über der Adresszeile ist und die Schaltfläche für einen neuen Tab noch immer nicht rechts neben dem letzten Tab, ist Seamonkey für mich jetzt nutzbar und sieht nun bei mir so aus (als Theme habe das bereits im Lieferumfang enthaltene “modern” gewählt). Das verpixelte ist die Leiste mit den Lesezeichen.

Seamonkey3

Der durchschnittliche Nutzer dürfte, vor allem bei den Änderungen in der userChrome.css, aber wohl scheitern. Vor allem bei .toolbar-grippy und .toolbar-primary-grippy. Die Bezeichnungen habe ich nämlich mit nur dem DOM und dem Element Inspector (letzten musste ich ebenfalls noch als Plugin installieren) herausgefunden.

Aber dafür kann ich jetzt in einem Youtube-Video an eine noch nicht geladene Stelle springen. Da hat sich er ganze Aufwand doch schon fast gelohnt. :D

Merkitys – Live-Distribution

Urlaubszeit ist Bastelzeit. Und da ich gerade Urlaub habe bastle ich mir gerade meine eigene Live-Distribution zusammen. Als Basis nehme ich Arch Linux. Hier mal eine Zusammenfassung, was ich bisher gemacht habe.

Der komplette Vorgang erfolgt, wie im Arch-Wiki angegeben, komplett mit Root-Rechten.

Um sich eine eigene Live-Distribution zu erstellen benötigt man das Paket archiso. Dieses habe ich mir mittels pacman -S archiso kurzerhand installiert.

Als nächstes habe ich mir ein Arbeitsverzeichnis erstellt (mkdir /home/benutzer/archlive). Hierbei ist zu beachten, dass der ganze Spass einiges an Speicher benötigt. Daher habe ich das Verzeichnis auch kurzerhand im Homeverzeichnis meines normalen Benutzerkontos erstellt. Beim ersten Versuch hatte ich das Verzeichnis im Verzeichnis von root erstellt und mir beim Anlegen des Isos die komplette Partition geflutet was das Betriebssystem gar nicht lustig fand…

Nun habe ich mittels cp -r /usr/share/archiso/configs/PROFILE/ /home/benutzer/archlive alle Dateien und Verzeichnisse in das eben angelegte Arbeitsverzeichnis kopiert. Jetzt kann der Spass beginnen.

Im Unterverzeichnis releng im Arbeitsverzeichnis findet man eine Datei namens build.sh. Mit dieser wird die Iso-Datei erstellt. Für meine Bedürfnisse waren allerdings Änderungen nötig. Folgende Dinge habe ich daher kurzerhand geändert.

– Bei iso_name= habe ich archlinux gegen Merkitys ausgetauscht. Somit wird schlussendlich die Datei Merkitys-$Datum.iso erzeugt. Anstelle von $Datum wird das jeweils aktuelle Datum angezeigt an dem die Datei erstellt wurde. Also z. B. Merkitys-2014-12-03.iso
– Ein ganzes Stück weiter unten gibt es die Zeile “mkarchiso ${verbose} -w “${work_dir}” -D “${install_dir}” -L “${iso_label}” -o “${out_dir}” iso “${iso_name}-${iso_version}-dual.iso””. Hier habe ich das -dual entfernt, da ich eine reine 64Bit-Version haben möchte.
– Fast ganz am Ende der Datei finden sich drei Zeilen mit folgendem Inhalt: “for arch in i686 x86_64; do”. Damit auch wirklich nur die 64-Bit-Version erstellt wird habe ich kurzerhand einfach das i686 entfernt und die Datei abgespeichert.

Im gleichen Verzeichnis findet man die Dateien packages.x86_64, packages.i686 und packages.both. In der ersten Datei werden die Pakete eingetragen die für 64 Bit gelten. In der zweiten die für 32 Bit und in der letzten für beide Architekturen. In der für 64 Bit sollten einige wenige Pakete genannt sein. Die für 32 Bit sollte leer sein und die für beide sollte den meisten Inhalt aufweisen. Da ich nur 64 Bit will habe ich daher einfach den Inhalt der Datei packages.both ausgeschnitten und unter den Inhalt der Datei packages.x86_64 eingefügt, so dass nun auch packages.both komplett leer ist. Die nun in der Datei packages.x86_64 genannten Pakete bzw. Paketgruppen sind quasi nur die Minimalinstallation. Hier kann man sich nach Lust und Laune austoben. Pro Zeile darf aber nur ein Paket bzw. eine Paketgruppe genannt werden. Fürs erste habe ich folgende Pakete/Gruppen hinzugefügt: lxde, meld, nano, xf86-video-ati, xf86-video-intel, xf86-video-nouveau, xf86-video-vesa, xorg-apps, xorg-server und xorg-server-utils. Auf eventuelle nötige Abhängigkeiten muss man hierbei nicht achten. Diese werden bei Bedarf automatisch installiert.

Da ich ohne eingreifen zu müssen automatisch lxdm und damit auch lxde ausführen möchte habe ich anschließend im Verzeichnis ~/archlive/releng/airootfs/etc/systemd/system folgenden Befehl ausgeführt: ln -s /usr/lib/systemd/system/lxdm.service display-manager.service. Das sollte eigentlich dem System mitteilen, dass lxdm automatisch gestartet wird. Erstellt man an dieser Stelle jetzt die Iso-Datei und bootet davon, wir man merken, dass es aber nicht klappt. Schuld ist hier die Datei customize_airootfs.sh welche man unter releng/airootfs/root findet. In dieser findet man die Zeile systemctl set-default multi-user.target. Und genau die verhindert dass lxdm automatisch gestartet wird. Quasi falscher Runlevel. Von daher habe ich das multi-user.target gegen graphical.target ausgetauscht. Da ich die Datei schon offen habe habe ich die Zeile “sed -i ‘s/#\(us_US\.UTF-8\)/\1/’ /etc/locale.gen” bei der Gelegenheit gleich auf “sed -i ‘s/#\(de_DE\.UTF-8\)/\1/’ /etc/locale.gen” geändert.

Um zu verhindern, dass im Bootloader auch die Einträge für die 32-Bit-Version auftauchen habe ich weiterhin unter releng/syslinux alle Dateien mit 32 im Dateinamen (z. B. archiso_sys32.cfg) gelöscht.

Abschließend habe ich nun in der Konsole das bereits erwähnte Script build.sh mittels ./build.sh -v ausgeführt. Der Parameter -v sorgt dafür dass der Vorgang etwas gesprächiger ist und man eventuelle Fehlerquellen bemerkt. Wenn alles geklappt hat, sollte man nun unter releng/out/ die Iso-Datei finden. Nach ersten Tests unter VirtualBox dürfte eigentlich alles geklappt haben. Lxdm sollte automatisch starten und man sollte sich problemlos an Lxde anmelden können. Für den bisher vorhandenen Nutzer ist aktuell übrigens kein Passwort gesetzt. Die wenigen vorhandenen Programme sollten eigentlich auch alle starten. Der Rohbau steht sozusagen.

Als nächstes werde ich wohl die Paketliste sowie das Startmenü von Lxde erweitern. Anregungen nehme ich gerne an.

Wer sich diese noch sehr eingeschränkte Live-Distribution einmal ansehen will, kann Sie unter https://spideroak.com/browse/share/datengrab/Merkitys herunterladen. Die Prüfsummen sind wie folgt.

MD5: e08e6116dff6173c906a2b91714a4992
SHA256: 4dade41774bb1faaac12decac3796b2fd3299a5fb22314e5305846acd548db18

Vermutlich werden jetzt einige sich fragen wieso ich nicht einfach eine bereits fertige Live-Distribution wie die SystemRescueCD nehme. Im Grunde genommen will ich zwei Dinge damit erreichen. Zum einen will ich archiso bzw. das Remastern einer bereits vorhandenen Arch-Live-Distribution besser verstehen. Und zum anderen will ich testen inwiefern bei einer solchen Iso-Datei Delta-Updates (mit xdelta3 erstellt) Sinn machen.

Top sieht rot

Den Befehl top mit dem man sich die laufenden Prozesse anzeigen lassen kann, kennt vermutlich jeder Linux-Nutzer. Das die Ausgabe von top nun allerdings in rot/orange erfolgt ist neu. Und meiner Meinung nach schlecht zu ertragen. Wie gut, dass ich eigentlich immer nur htop nutze.

top1

Um wie gewohnt die alte Ausgabe zu erzeugen muss man wie folgt vorgehen. Als erstes startet man top. Nun drückt folgende Tasten

z V 1 y m m t t t W

Nun sollte top wieder wie gewohnt aussehen.

top2

Bei obiger Tastenkombination wird in ~ die Datei .toprc erzeugt. Sowei ja kein Problem. Ich habe mir die Datei dann allerdings mal in einem Editor angesehen. Und was soll ich sagen? An der Datei ändere ich von Hand bestimmt nichts…

top's Config File (Linux processes with windows)
Id:i, Mode_altscr=0, Mode_irixps=1, Delay_time=1.500, Curwin=0
Def     fieldscur=�&K�����@���56�F�')*+,-./0128<>?ABCGHIJLMNOPQRSTUVWXYZ[\]^_`a$
        winflags=192564, sortindx=18, maxtasks=0, graph_cpus=0, graph_mems=0
        summclr=1, msgsclr=1, headclr=3, taskclr=1
Job     fieldscur=�����(��Ļ�@<�Ż)*+,-./012568>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab$
        winflags=163124, sortindx=0, maxtasks=0, graph_cpus=2, graph_mems=0
        summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem     fieldscur=���<�����MBN�D34��&'()*+,-./0125689FGHIJKLOPQRSTUVWXYZ[\]^_`a$
        winflags=163124, sortindx=21, maxtasks=0, graph_cpus=2, graph_mems=0
        summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr     fieldscur=�����������)+,-./1234568;<=>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`a$
        winflags=163124, sortindx=3, maxtasks=0, graph_cpus=2, graph_mems=0
        summclr=3, msgsclr=3, headclr=2, taskclr=3
Fixed_widest=0, Summ_mscale=2, Task_mscale=1, Zero_suppress=0