Willkommen auf xig

Farbprobleme mit Textfeld- und Selectboxen bei dunklen System-Themes in Firefox/Iceweasel

Erstellt: 15.02.2016 09:05

Firefox übernimmt Standardmässig die Farben des System-Themes z.B von Xfce. Das ist eine nette Eigenschaft damit sich Firefox optisch mehr in das System eingliedert.

Leider gibt es viele unsauber programmierte Webseiten welche bei Textfeldern (Oder allgemein Input-Elementen) nur die Text- ODER die Hintergrundfarbe mitgeben aber nicht beides zusammen und davon ausgehen, dass alle als Standardeinstellung dunklen Text auf hellem Grund haben.

So ergibt sich unlesbarer schwarzer Text auf dunklem Hintergrund oder das entsprechende mit hellen Farben. Super!

Abhilfe schafft es Firefox andere Defaultwerte mit zu geben.

Hierzu legt man die Datei ~/.mozilla/firefox/PROFIL/chrome/userContent.css an.
Eine Beispieldatei mit dem Namen userContent-example.css ist schon vorhanden und kann kopiert werden.

Zusätzlich hinterlegt man für Select-Boxen eine kleine Grafik. Weil Select-Boxen haben keinen Pfeil-Button mehr, wenn mit "-moz-appearance: none" das System-Theme ausgeschaltet wird. Deshalb sollte man im Verzeichnis /home/USER/.mozilla/firefox/PROFIL/chrome/down_arrow_select.jpg noch eine Pfeil-Grafik abgelegt werden. (Sucht was hübsches in der Bildersuche eurer Suchmaschine mit "Arrow down select".)

"PROFIL" in den Pfaden sollte gegen das eigene aktuelle Firefox-Profil ersetzt werden.
Das aktuell genutzt Profil erfährt man über:
Hilfe -> Informationen zur Fehlerbehebung ->  Profilverzeichnis -> "Ordner öffnen".
(Help -> Troubleshooting Information -> Profile Folder -> "Show Folder")

"USER" muss gegen den eigenen System-User ersetzt werden.

Der Datei ~/.mozilla/firefox/PROFIL/chrome/userContent.css kann nun folgender Inhalt hinzugefügt werden:

/* ~/.mozilla/firefox/PROFIL/chrome/userContent.css */
button,
input,
input[type="radio"],
input[type="checkbox"],
input[type="reset"],
input[type="button"],
input[type="submit"],
select,
textarea {
        -moz-appearance: none !important; /* Deaktiviert den Look vom System-Theme */
        background-color: #FAFAFA; /* Gibt eine helle Hintergrundfarbe mit */
        color: #000000 /* Färbt den Text schwarz */
}
:disabled {
        color: #B1B1B1 /* deaktiviertes ausgrauen */
}
/* select extra, damit der Pfeilbutton nicht verschwindet, Grafik muss hinterlegt sein! */
select:not([multiple]) {
        background-image:url("file:///home/USER/.mozilla/firefox/PROFIL/chrome/down_arrow_select.jpg") !important;
        background-position: right !important;
        background-repeat: no-repeat !important;
        background-size: contain !important; /* Uebernehme die Grösse der Select-Box */
        padding-right: 1.5em; /* Schaffe ein wenig Platz für den Pfeil */
}

Nachdem Firefox neu gestartet wurde, sollten die Textfelder, Selectboxen und ähnliches wieder lesbar sein.

Sicherlich ist diese Vorlage noch nicht für jede Webseite Ideal, Verbesserungen nehme ich gerne entgegen.

Update: ":not([multiple])" bei select verhindert, dass Selectboxen mit multipler Auswahlmöglichkeit ohne Dropdown einen Dropdown-Pfeil bekommen.

Update 2: ":disabled" gibt die Eigenschaften von deaktivierten Elementen aus.



Tagged: Browser Firefox Linux XFCE

Kommentar verfassen | Nach oben

Displayport schaltet sich aus aber nichtmehr ein

Erstellt: 15.01.2016 08:58

Der Displayport ist teils ein wenig leidig. Wird der Monitor ausgeschaltet oder ausgesteckt, aktiviert sich der Port nichtmehr. Der Bildschirm bleibt schwarz weil die Grafikkarte kein Signal mehr liefert.

Dagegen gibt es zwei Lösungen, entweder man benutzt (z.B. und sofern möglich) einen Displayport-zu-HDMI-Adapter oder man weckt den Port mit xrandr wieder auf.

Ersteres unterdrückt das vom Displayport genutzte Datenformat welches das Problem verursacht und zwingt die Grafikkarte HDMI-Signale zu senden.
(Sollte diese Erklärung falsch sein, macht mich darauf aufmerksam. ;) )

Nun zur Softwarelösung. Ist der Bildschirm schon dunkel, ist es möglich per SSH mit xrandr das Signal wieder einzuschalten:

$ xrandr
Screen 0: minimum 8 x 8, current 1920 x 1200, maximum 32767 x 32767
DP1 disconnected (normal left inverted right x axis y axis)
DP2 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200     59.95*+
   1920x1080     60.00 
[...]
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Auf dem Problemrechner über SSH die DISPLAY-Variable setzen um den Screen zu definieren und mit xrandr den Bildschirm in Standardauflösung aktivieren:

$ ssh user@dunklerrechner

$ export DISPLAY=:0
$ xrandr --output DP2 --auto

Das Ganze geht aber auch von selbst:

...automagisiert mit udev!

Zuerst wird über udevadm ausgelesen was für Events - zum Beispiel beim Ein- und Ausschalten des Monitors - generiert werden:

$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[71528.979723] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [71529.116551] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
KERNEL[71531.400604] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [71531.598893] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)

Mit den ausgelesenen Event-Parametern (card0, drm, change) kann nun ein udev-Rules-File (/etc/udev/rules.d/70-dp-repair.rules) erstellt werden.

/usr/local/bin/dp-repair.sh ist hierbei das Script welches ausgeführt wird, wenn dieses Event eintritt. "user" sollte gegen den eigenen User ersetzt werden:

# /etc/udev/rules.d/70-dp-repair.rules
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/bin/su user -c /usr/local/bin/dp-repair.sh"

Hier noch das Beispielscript /usr/local/bin/dp-repair.sh. Es grept nach conntecteten Ports und aktiviert diese mit der Standardauflösung. Je nach Setup muss man dieses doch sehr simple Script noch den Bedürfnissen anpassen:

#!/bin/bash
# /usr/local/bin/dp-repair.sh
export DISPLAY=:0
for DPPORTS in $(xrandr | grep " connected " | awk '{ print$1 }'); do
        /usr/bin/xrandr --output $DPPORTS --auto
done;

Ausführbar machen:

# chmod +x /usr/local/bin/dp-repair.sh

Ein komplexeres Script zur Monitorsteuerung gibts unter: https://github.com/geyslan/xrasengan

Nun schaltet udev den Displayport automatisch wieder ein.



Tagged: Debian Hardware Linux ssh udev X11

Kommentar verfassen | Nach oben

Debian-Grundsystem auf CF-Karte installieren

Erstellt: 02.01.2016 13:05

Auf Embedded-Boards wie der Alix, kann ein Betriebssystem meistens nicht direkt installiert werden.
Deshalb installiere ich in diesem Beispiel von einem Debian-Hostsystem mit debootstrap ein bootbares Debian-Grundsystem auf eine CF-Karte.

Hierbei handelt es sich noch nicht um eine optimierte Konfiguration sondern um einen allgemeinen Leitfaden.


In diesem Beispiel wird angenommen, dass die CF-Karte auf dem Hostsystem /dev/sdc ist. Mit dmesg kann man sich informieren, welches Laufwerk zuletzt eingesteckt wurde.

Auf dem Hostsystem werden zuerst parted zum partitionieren, debootstrap für die Installation des Grundsystems und makedev zum initialisieren des /dev auf der CF-Karte installiert:

# aptitude install parted debootstrap makedev

Nun wird die CF-Karte vorbereitet. Dafür werden zuerst vorhandene Partitionen gelöscht, wie die FAT32-Partition(-en), die beim Kauf der Karte meistens vorhanden sind. parted ist ein einfaches Werkzeug dafür. "p" zeigt an, was sich auf der Karte befindet. "?" gibt eine Befehlsübersicht und mit "q" verlässt man parted wieder.

# parted /dev/sdc
(parted) p                                                               
Model: Generic- Compact Flash (scsi)
Disk /dev/sdc: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4162kB  16.0GB  16.0GB  primary  fat32        boot, lba

(parted) rm 1 # Löscht die Partition Nummer eins

Jetzt kann eine eigene Partitionierung geschrieben werden. Um es einfach zu halten, werden hier nur zwei Partitionen erstellt, eine für das System (8192MiB) und eine für Swap (128MiB). Der Platz dahinter wird freigelassen.

(parted) mklabel msdos
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes                                                  
(parted) unit MiB
(parted) mkpart primary 0% 8192
(parted) mkpart primary 8192 8320
(parted) set 1 boot on
(parted) p                                                               
Model: Generic- Compact Flash (scsi)
Disk /dev/sdc: 15248MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start    End      Size     Type     File system  Flags
 1      1.00MiB  8192MiB  8191MiB  primary               boot, lba
 2      8192MiB  8320MiB  128MiB   primary               lba
(parted) q

...und /dev/sdc1 mit ext4 sowie /dev/sdc2 mit als swap formatieren:

# mkfs.ext4 /dev/sdc1
# mkswap /dev/sdc2

Ein Verzeichnis zum Mounten der CF-Karte erstellen und diese mounten:

# mkdir /mnt/cfcard
# mount /dev/sdc1 /mnt/cfcard/

Nun kann das Grundsystem installiert werden, debootstrap werden dabei die Architektur (bei der Alix i386), die Distribution (jessie), das Verzeichnis der gemounteten CF-Karte (jessie) und ein Spiegelserver von Debian mitgegeben, hier wäre das der Spiegel vom Schweizer Institut Switch (http://mirror.switch.ch/ftp/mirror/debian/).
Das ganze dauert nun eine Weile, bis am Ende die Meldung über den Abschluss der Installation kommt.

# debootstrap --arch i386 jessie /mnt/cfcard http://mirror.switch.ch/ftp/mirror/debian/
[...]
I: Base system installed successfully.

Eine initiale Struktur im /dev der CF-KArte wird angelegt.

# cd /mnt/cfcard/dev
# MAKEDEV generic

Nun werden die System-Mountpunkte hinzugefügt und das chroot betreten

# mount -t proc proc /mnt/cfcard/proc/
# mount -o bind /dev /mnt/cfcard/dev/
# mount -t sysfs sys /mnt/cfcard/sys/
# chroot /mnt/cfcard /bin/bash

Am besten installiert man nun den Lieblingseditor.

# apt-get install vim

Als nächstes müssen die beiden zu Anfangs erstellen Partitionen nach /etc/fstab eingetragen werden, damit diese beim Booten gemounted werden können

Die dafür nötige UUID erfährt man mit blkid, da die CF-Karte immernoch auf /dev/sdc ist, kann direkt danach gegrept werden:

# blkid | grep sdc
/dev/sdc1: UUID="5a63a141-ac3a-4e8e-a11f-3bc37a8895e7" TYPE="ext4" PARTUUID="2d4512a0-01"
/dev/sdc2: UUID="59bec5fd-811b-436f-b629-9cd6555e150e" TYPE="swap" PARTUUID="2d4512a0-02"

Diese Werte trägt man anschliessend mit dem zuvor installierten Editor nach /etc/fstab ein, zusammen mit den restlichen Parametern:

# /etc/fstab
UUID=5a63a141-ac3a-4e8e-a11f-3bc37a8895e7 / ext4 noatime,errors=remount-ro       0       1
UUID=59bec5fd-811b-436f-b629-9cd6555e150e none swap sw 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0

Eine /etc/hostname und eine /etc/hostname mit dem Hostnamen des Systems werden ebenfalls erstellt oder ergänzt (diese wurden vom Hostsystem übernommen):

# /etc/hosts
127.0.0.1       localhost meinsystem meinsystem.xig.lan
::1             localhost ip6-localhost ip6-loopback meinsystem meinsystem.xig.lan
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

# /etc/hostname
meinsystem

Ebenfalls erstellt und konfiguriert werden sollte /etc/resolv.conf (auch diese wurde vom Hostsystem übernommen und kann so gelassen werden wie sie ist, falls das Gewünschte drinn steht)

# /etc/resolv.conf
nameserver 172.20.1.1
search xig.lan

Damit das Gerät auch über das Netzwerk erreichbar ist, braucht es eine anfängliche Netzwerkkonfiguration in /etc/network/interfaces. Die Alix hat zwei Ethernet-Schnittstellen, für den Anfang konfiguriere ich diese mit DHCP, je nach Vorliebe können auch feste IPs vergeben werden, dies lasse ich hier allerdings aus.

# /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

# The primary network interface
allow-hotplug eth1
iface eth1 inet dhcp
# This is an autoconfigured IPv6 interface
iface eth1 inet6 auto

Damit nach dem ersten Booten Pakete installiert werden können, braucht es in /etc/apt/sources.list für Debian Jessie folgende Einträge:

# /etc/apt/sources.list
deb http://mirror.switch.ch/ftp/mirror/debian/ jessie main non-free contrib
deb-src http://mirror.switch.ch/ftp/mirror/debian/ jessie main non-free contrib

deb http://mirror.switch.ch/ftp/mirror/debian/ jessie-updates main
deb-src http://mirror.switch.ch/ftp/mirror/debian/ jessie-updates main

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

Der erste Eintrag (deb http://mirror.switch.ch/ftp/mirror/debian jessie main) sollte schon vorhanden sein durch debootstrap, je nach Geschmack wird noch mit "non-free contrib" gewürzt, damit nicht-freie Paketquellen mit einbezogen werden.

Jetzt werden noch locales und die Zeitzone konfiguriert:

# apt-get install locales
# dpkg-reconfigure locales
# dpkg-reconfigure tzdata

Wird am System eine Tastatur angeschlossen sein, konfiguriert man noch diese:

# apt-get install console-setup
# dpkg-reconfigure keyboard-configuration

(An dieser Stelle könnte jetzt noch die Serielle Schnittstelle konfiguriert werden, da der Artikel aber schon ziemlich lang ist und man über SSH zugreifen kann, lasse ich dies aus.)

Jetzt braucht das System natürlich noch einen Kernel. Vorhande Kernel auflisten:

# apt-cache search linux-image
linux-image-3.16.0-4-586 - Linux 3.16 for older PCs
linux-image-3.16.0-4-686-pae - Linux 3.16 for modern PCs
linux-image-3.16.0-4-686-pae-dbg - Debugging symbols for Linux 3.16.0-4-686-pae
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-486 - Linux for older PCs (dummy package)
linux-image-586 - Linux for older PCs (meta-package)
linux-image-686-pae - Linux for modern PCs (meta-package)
linux-image-686-pae-dbg - Debugging symbols for Linux 686-pae configuration (meta-package)
linux-image-amd64 - Linux for 64-bit PCs (meta-package)

Die Meta-Pakete zeigen immer auf den jeweils aktuellsten Kernel, deshalb empfielt es sich, sich für einen von diesen zu entscheiden. Für die alte Alix ist linux-image-586 das Richtige:

# apt-get install linux-image-586

Ohne Bootloader geht garnichts, auch dieser muss installiert und auf die CF-Karte (immernoch /dev/sdc) installiert werden:

# apt-get install grub-pc
# grub-install /dev/sdc
# update-grub

Damit per SSH zugegriffen werden kann, braucht es auch noch einen SSH-Server, das Meta-Paket ssh installiert Server und Client.

# apt-get install ssh

root-Passwort setzen:

# passwd

User anlegen (für den SSH-Login):

# adduser user

Aufräumen:

# apt-get clean

Chroot verlassen und die CF-Karte unmounten:

# exit
# cd
# umount /mnt/cfcard/dev
# umount /mnt/cfcard/sys
# umount /mnt/cfcard/proc
# umount /mnt/cfcard

Nun kann die CF-Karte in das System (z.B. die Alix) eingesetzt, das System mit dem Netzwerk verbunden und gebootet werden.

Sollte man wie oben DHCP konfiguriert haben, findet man das System relativ leicht mit nmap, das Netz muss natürlich auf das Eigene angepasst werden:

# nmap -sP 172.20.1.00/24
Nmap scan report for 172.20.1.188
Host is up (-0.10s latency).
MAC Address: 00:0D:B9:15:E6:C9 (PC Engines GmbH)

(Alternativ schaut man im Log des DHCP-Servers ;) )

Nun kann mit dem zuvor angelegten User auf das frische System eingelogt werden:

$ ssh user@172.20.1.188

 



Tagged: Alix Debian Grub Hardware Linux

Kommentar verfassen | Nach oben

Korruptes Debian-Paket

Erstellt: 22.12.2015 08:26

Wurde ein Debianpaket nicht sauber heruntergeladen, kann es beschädigt sein. Da es jedoch im Cache ist, wird es bei jedem Versuch Pakete zu installieren wieder erfolglos von Neuem verarbeitet.

Vorbereitung zum Entpacken von .../zenity-common_3.18.1.1-1_all.deb ...
Entpacken von zenity-common (3.18.1.1-1) ...
dpkg-deb (Unterprozess): Archiv-Element wird dekomprimiert: lzma-Fehler: komprimierte Daten sind beschädigt
dpkg: Fehler beim Bearbeiten des Archives /var/cache/apt/archives/zenity-common_3.18.1.1-1_all.deb (--unpack): defektes Tar-Dateisystem - Paketarchiv ist defekt
dpkg-deb: Fehler: Unterprozess <Dekompression> gab den Fehlerwert 2 zurück

Ein simples Leeren des Caches hilft:

# apt-get clean



Tagged: Debian Linux

Kommentar verfassen | Nach oben

Syntax-Highlighting selbst definieren im Editor vim

Erstellt: 04.12.2015 10:04

Wenn sich eine eine Config-Datei nicht in ihrem angestammten Verzeichnis befindet oder das Shebang (#!) einer frischen Datei noch nicht gesetzt ist, hat vim kein oder das falsche Syntax-Highlighting. Man kann es jedoch auch selbst definieren.

Zuerst muss das Syntax-Highlighting aktiviert sein, bei den meisten geschieht das wohl schon im Configfile, ansonsten:

:syntax on

Nun kann das Highlighting gewählt werden, zum Beispiel für asterisk-Configfiles:

:set syntax=asterisk

Eine Liste aller installierten Syntax-Vorlagen bekommt man mit:

:echo glob($VIMRUNTIME . '/syntax/*.vim')



Tagged: Linux vim

Kommentar verfassen | Nach oben

« √§ltere Eintr√§ge