3.3.2010

Linuxtips

default

 

2.3.2010: HD-Auflösung in X11

Mein Rechner ist von 2001, mein X von 2005. Da ist die Auflösung 1920x1080 noch nicht drin. Außerdem ist die Grafikkarte alt und kennt den Vesa-Mode für diese Auflösung nicht. Sie kann auch diese Auflösung überhaupt nur bis zu 50 Hz herstellen, mit 60 Hz geht es nicht mehr. Wenn man nun aber gezwungen ist, einen neuen Breitwand-Monitor zu benutzen, was dann? Dies:

/etc/X11/xorg.conf

Section "Monitor"
    Identifier "Monitor0"
    ...
    UseModes       "Modes0"
    ...
EndSection

...

Section "Modes"
    Identifier "Modes0"
    ModeLine "1920x1080@50" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync
EndSection

...

Section "Screen"
    ...
    Monitor "Monitor0"
    DefaultDepth 24
    ...
    SubSection "Display"
          Modes       "1920x1080@50"
          Viewport   0 0
          Depth         24
    EndSubSection
EndSection

Auch z.B. in Puppy-Linux kann man die entsprechenden Zeilen ergänzen, und es funktioniert.

Benutzung des Modes mit dem Kernel-Framebuffer-Treiber:

Unter http://ftp.de.debian.org/debian/pool/main/f/fbset/fbset_2.1.orig.tar.gz bekommt man den Tarball von fbset. Dort ist auch ein Script "modelines2fb", dem man eine Datei mit der X-Modeline gibt:

./modeline2fb modeline-1920x1080-50.txt

Ausgabe:

mode "1920x1080-50"
  geometry     1920 1080     1920 17467     8
  timings       6734     148 528     36 4     44 5
  hsync high
  vsync high
endmode

Diese Strophe trägt man in /etc/fb.modes ein. Aktivierung:

fbset 1920x1080-50

 

6.11.2009: Fehlermeldungen sehen auf der grafischen Oberfläche

Normalerweise startet man in X (Kde, Gnome, Xfce) die Programme aus einem Menü heraus oder mit einem Button eines Panels. Wenn das Programm aber irgendwie herumzickt, dann möchte man eine Fehlermeldung sehen. Dazu startet man das Programm aus einem Textterminal heraus. Man tippt Namen ein: "gnp", und dann sieht man die Fehlermeldungen. Die kann man dann in Google einfügen.

Man muß dazu wissen, wie die ausführbare Datei des Programms heißt. In den Debian-basierten Distributionen (Debian, Knoppix, Ubuntu, ...) stehen die Dateien, aus denen ein Paket besteht, unter /var/lib/dpkg/info/<paketname>.list. Da sucht man unter /bin, /usr/bin, /opt/bin, <sonstwas>/bin, bzw. .../sbin.

Man kann auch in den Eigenschaften des Start-Buttons nachsehen.

 

23.10.2009: Problem mit Pidgin und SILC-Server

Fehlererscheinung: Man kriegt entweder "Unable to load SILC key pair" oder "Authentication failed".

Was passiert da: Man macht zum erstenmal einen Account in Pidgin. Man gibt das Passwort für den Server ein und "Remember Password" und dann "Enable Account". Dann macht Pidgin ein Schlüsselpaar (man hat ja noch keins), und dabei setzt Pidgin das "Passwort" in den Private-Key ein, als Zugriffsschutz. Das ist also falsch.

Man muß sagen "kein Passwort" (leere Eingabe) und "Passwort merken: nein". Dann kriegt der Private-Key keinen Zugriffsschutz (und das ist auch richtig, wenn man vor seinem eigenen Rechner sitzt).

Dann verlangt der Server seine Passphrase (und die ist weder leer noch soll sie so sein wie das Zugriffswort für den eigenen Private-Key). Und der Fehler ist: Pidgin gibt dem Server als Passwort das, was man für seinen Private-Key eingegeben hat. Meiner Meinung nach ist das ein Fehler in Pidgin. Er sollte das Passwort, das man im Account angibt, nur für den Server nehmen, und wenn er beim Generieren des Schlüsselpaares wissen will, ob man im Private-Key einen Zugriffsschutz haben will, sollte er gesondert fragen. Denn der eigene Private-Key ist für alle SILC-Accounts derselbe.

Wenn der Server ein eigener Server ist, kopiert man seinen Public-Key in das Directory des Servers, das man in der Konfigurationsdatei angegeben hat (da ist ein Beispiel für "key dir" in der Beispielkonfiguration).

Und dann setzt man in seinem Account unter "Advanced" ein: "Public Key Authentication: ja".

 

31.3.2009: Wie installiert man Linux von einem CD-Image (ISO-Image) auf der Festplatte

Embedded-Rechner haben nur eine Festplatte (bzw. eine Flash-Disk als IDE-Laufwerk) und sonst nichts, keine Floppy, kein CD-Laufwerk. Meiner hier hat obendrein keine Tastatur und kein Netzwerk, aber immerhin eine serielle Schnittstelle. Die Flash-Disk ist im Embedded-Rechner "hda", im Arbeitsrechner (im Card-Reader) "sda".

Es gibt "HD-Media" zum Booten und Installieren bei Debian und wohl auch bei Ubuntu. Die Idee ist: Man bootet nicht das CD-Image, sondern man bootet ein Installations-Kernel (mit grub), und dann mountet man das CD-Image und installiert die Pakete von dort. Bei Debian:

  • http://www.de.debian.org/
  • Getting Debian
    • Network install
  • Tiny CDs, floppy disks, USB sticks, etc
  • i386
  • hd-media
    • vmlinuz (Kernel)
    • initrd.gz (Treiber)
    • boot.img.gz (vermutlich das Dateisystem, das ins RAM kopiert und auf / gemountet wird)
    • ('MANIFEST' sagt zu diesen Dateien: "for use on USB memory stick")

Auf einer Ubuntu-CD sind die entsprechenden Dateien auch zu finden, unter "install" oder "netinstall".

Man kopiert die 3 Dateien (Flash im Arbeitsrechner) nach /sda1 und auch das ISO-Image. Dann installiert man grub auf der Flash (vorausgesetzt, man hat grub auf dem Arbeitsrechner installiert):

  • mount -t ext2 /dev/sda1 /sda1
  • grub-install --no-floppy --root-directory=/sda1 /dev/sda

Dann erzeugt man /sda1/boot/grub/menu.lst. Die Laufwerksangaben dort beziehen sich auf die Flash im Embedded-Rechner:

  • default 0
  • timeout 5
  •  
  • title Debian-Installer
  • root (hd0,0)
  • kernel /vmlinuz root=/boot.img.gz vga=normal
  • initrd /initrd.gz

Bei Ubuntu muß man noch Kernel-Parameter anfügen, z.B. priority=low für "Expert-Mode", die findet man auch da, wo die Boot-Dateien sind, in einem Readme.

Ich muß bei den Kernel-Parametern noch anfügen (als letztes):

  • -- console=ttyS0,115200n8

Dann kann ich auf dem Arbeitsrechner minicom starten und die beiden Rechner mit einem Nullmodemkabel verbinden.

 

Wie kommt man ins BIOS Setup Menü

AMI Del (Entf)
Award Ctrl-Alt-Esc (Strg-Alt-Esc) oder Del (Entf)
Phoenix Ctrl-Alt-Esc (Strg-Alt-Esc) oder Ctrl-Alt-S (Strg-Alt-S) oder F1
IBM PS/2 Ctrl-Alt-Insert nach Ctrl-Alt-Delete (Ctrl-Alt-Einfg nach Ctrl-Alt-Entf)
DTK   Esc

Weitere Informationen: http://www.tldp.org/HOWTO/Hard-Disk-Upgrade/install.html.

Einige Intel-x86-Rechner haben kein CMOS-Konfigurationsmenü im BIOS. Sie brauchen ein Setup-Programm auf Diskette. Wenn man das nicht hat: ftp://ftp.simtel.net/pub/simtelnet/msdos/

 

Mailbox beobachten

nice xterm -geometry 54x5+172+960 -e watch 'cat Mail/mbox | grep -i "^From: "'

  • nice: führt den Rest der Zeile aus mit niedrigerer Priorität
  • xterm: Textterminal in einem Fenster unter X
    • -geometry Textspalten x Textzeilen + Abstand links (Pixel) + Abstand oben (Pixel)
    • -e Kommandozeile, die im xterm ausgeführt werden soll
  • watch: wiederholt das folgende Kommando alle zwei Sekunden
    • Mail/mbox: Pfad zur Eingangsmailbox

 

XFCE - Wenn das Startpanel nicht startet

Das muß ein Bug sein in XFCE4. Man denkt: Jetzt kann ich nichts mehr machen. Man kann X verlassen mit ctrl-alt-Backspace, aber davon allein kommt das Panel nicht wieder.

Wenn man auf einem der Desktops schon ein xterm offen hat, geht man auf dieses Desktop mit ctrl-alt-Links / ctrl-alt-Rechts und startet in dem xterm:

xfce4-panel

Das kann man stehenlassen bis die Sitzung beendet ist, dann wird es vom Session-Manager wieder gespeichert für den nächsten Start.

Wenn man kein einziges xterm geöffnet hat, geht man z.B. auf die dritte Textkonsole mit ctrl-alt-F3 und loggt sich ein als derselbe User, der die X-Session gestartet hat. Dann gibt man ein:

DISPLAY=:0.0 xterm

Das läßt man so stehen bis zum Beenden der X-Session. Man kommt zurück nach X mit alt-F7 und da ist das xterm.

 

Die Mausgeschwindigkeit verstellen

In allen mir bekannten Desktop-Umgebungen kann man mit den grafischen Tools zwei Mausparameter einstellen: Beschleunigung und Schwellwert (Acceleration und Threshold). Es gibt aber drei:

  • Grundgeschwindigkeit
  • Beschleunigung
  • Schwellwert

Die Grundgeschwindigkeit kann man nur in der Konfigurationsdatei von X, nur als "root", und nur dann einstellen, wenn X nicht läuft. Man muß also X beenden (am einfachsten mit Ctrl-Alt-Backspace (Strg-Alt-große-Löschtaste). Anschließend muß man evtl. auf eine Textkonsole wechseln: Ctrl-Alt-F1 bis Ctrl-Alt-F6 und sich als "root" einloggen.

Konfigurationsdatei:

  • /etc/X11/xorg.conf oder
  • /etc/X11/XF86Config-4 oder
  • /etc/X11/XF86Config

Darin folgenden Abschnitt suchen:

  • Section "InputDevice"
    • Identifier   "Mouse0"
    • Driver           "mouse"
    • Option "Protocol" "MouseManPlusPS/2"
    • Option "Device" "/dev/psaux"
    • Option "Resolution" "350"
    • Option "Buttons" "5"
    • Option "ZAxisMapping" "4 5"
  • EndSection

Folgende Parameter kann man sinnvollerweise anpassen:

  • Protocol:
    • Auto
    • Microsoft
    • MouseSystems
    • MMSeries
    • Logitech
    • MouseMan
    • MMHitTab
    • GlidePoint
    • IntelliMouse
    • ThinkingMouse
    • ValuMouseScroll
    • AceCad
    • PS/2
    • ImPS/2
    • ExplorerPS/2
    • ThinkingMousePS/2
    • MouseManPlusPS/2
    • GlidePointPS/2
    • NetMousePS/2
    • NetScrollPS/2
    • BusMouse
    • SysMouse
    • WSMouse
    • USB
    • Xqueue.
  • Device:
    • /dev/mouse
    • /dev/psaux
  • Resolution:
    • Das ist die Grundgeschwindigkeit
    • etwa zwischen 100 und 500
  • Buttons:
    • Ein Rad zählt wie zwei Buttons
  • ZAxisMapping
    • welche Buttons gehören dem Rad

Datei wieder speichern.

Dann wieder X starten, also entweder auf die grafische Konsole zurück: Alt-F7 oder startx.

Das Ganze muß man evtl. mehrmals wiederholen, bis einem die Maus gefällt.

 

Variablen, Zeilen und Abschnitte in einer Datei ändern/einfügen mit "ed"

Zum automatischen (skriptgesteuerten) Ändern von Textdateien (Quelltexten, Konfigurationsdateien und normalen Texten) werden üblicherweise "sed" und "patch" verwendet. Für einige Fälle, nämlich wenn man die Inhalte von Variablen oder wenn man ganze Zeilen einfügen will, ist aber sed umständlich und patch unübersichtlich. Dann ist ed gerade richtig.

So sieht ein ed-Skript z.B. aus:

ed /root/xorg.conf.new <<EOF
.
/Driver.*"kbd"/
+1i
Model "$KBMODEL"
Layout "$KBLAYOUT"
.
/Option.*"Protocol"/c
Option "Protocol" "$MPROT"
.
w /etc/X11/xorg.conf
Q
EOF

Erläuterungen zum ed-Skript:

ed /root/xorg.conf.new <<EOF lädt /root/xorg.conf.new in ed und gibt die folgenden Befehle bis "EOF"
(zum Operator "<<" siehe "man bash" unter "Here Documents").
. "in dieser Zeile: nichts" (Rückkehr in den Kommandomodus)
/Driver.*"kbd"/ "in die Zeile mit diesem Text": 'Driver (null oder mehrere Zeichen) "kbd"'
(zum Ausdruck ".*" siehe "man grep" unter "REGULAR EXPRESSIONS")
+1i "eine Zeile tiefer: einfügen" (insert), dabei werden Variablenwerte eingesetzt
(zu Variablen siehe "man bash" unter "EXPANSION")
Model "$KBMODEL" "diesen Text einfügen" (wir sind im Einfügemodus)
Layout "$KBLAYOUT" (weiter einfügen)
. (Kommandomodus)
/Option.*"Protocol"/c (in die Zeile mit diesem Text) und: "Änderungsmodus" (change)
Option "Protocol" "$MPROT" "die Zeile ändern zu diesem Text"
. (Kommandomodus)
w /etc/X11/xorg.conf "Pufferinhalt in der Datei /etc/X11/xorg.conf speichern" (write)
Q "ed beenden" (quit)
EOF (das Ende der Befehlsfolge, vgl. "EOF" oben)

Noch ein Beispiel für ed:

cd /tmp
mcedit x

zeile 1 ist wertlos
hier drüber einfügen
zeile 3 wird geändert
zeile 4 bleibt gleich

mcedit y

ed x <<EOF
.
/zeile 1/
+1i
eingefügt 1
eingefügt 2
.
/zeile 3/c
dies ist jetzt anders
.
w z
Q
EOF

chmod +x y
./y
cat z

zeile 1 ist wertlos
eingefügt 1
eingefügt 2
hier drüber einfügen
dies ist jetzt anders
zeile 4 bleibt gleich

 

Autologin - Damit man sich in seinen eigenen, privaten Rechner nicht "einloggen" muß

Ich kenne zwei Moeglichkeiten fuer Autologin. Bei beiden ersetzt man eine der Zeilen in inittab, die so aussehen:

6:2345:respawn:/sbin/agetty tty1 9600

Wenn man nur eine Textkonsole haben will:

6:2345:respawn:/usr/bin/openvt -c 6 -s -w -- su - joern

Wenn man ein Skript abgearbeitet haben will:

6:2345:respawn:/sbin/agetty -n -l /root/autojoern tty6 9600

In das Skript schreibt man z.B.:

#!/bin/bash
chown joern.tty /dev/tty6
echo "press Enter"
read line
/bin/su - joern --login -i -s -c /usr/X11R6/bin/startx

Oder auch, wenn man den Rechner einschalten möchte, er startet gleich X, und wenn man X verläßt, fährt er herunter und schaltet sich aus:

#!/bin/bash
chown joern.tty /dev/tty6
/bin/su - joern --login -i -s -c /usr/X11R6/bin/startx
halt

 

Mit einem "Drag and Drop" ein Directory auf CD brennen

Man macht sich einen Button, der zeigt auf ein Skript in /usr/local/bin. Wenn man dann im Filebrowser (Dateimanager) ein Directory mit der Maus anfaßt und auf diesen Button zieht, wird der Inhalt des Directories auf CD gebrannt. (Man benötigt das Paket "cdrtools" von Jörg Schilling.)

Kommandozeile für den Button:

xterm -hold -e /usr/local/bin/cdburn

(je nach Windowmanager bzw. Filemanager muß man evtl. noch %f oder so etwas dazuschreiben, um zu sagen: "Das was ich hier fallenlasse, mußt Du als Parameter übergeben.")

Die Datei /usr/local/bin/cdburn (anlegen im Terminalfenster als root):

#!/bin/sh
test -z "$1" && exit 1
mkisofs -r -J -o /tmp/iso "$1" &&
DEV=`cdrecord -scanbus | grep -i 'CD-R' | awk '{print $1}'` &&
cdrecord -v -fs=12m -speed=12 dev=$DEV /tmp/iso
rm -f /tmp/iso

(Je nach CD-Laufwerk muß man statt 'CD-R' etwas anderes schreiben, und je nach Geschwindigkeit für '-speed=12' ebenfalls.)

Die Datei ausführbar machen mit dem Kommando:

chmod +x /usr/local/bin/cdburn

 

Alle Dateinamen in einem Verzeichnis umbenennen in Kleinbuchstaben

Die Datei /usr/local/bin/klein (anlegen im Terminalfenster als root):

#!/bin/sh
for x in *
do
      lc=`echo "$x"   | tr '[:upper:]' '[:lower:]'`
      if [ "$lc" != "$x" ]
      then
              mv -i "$x" "$lc"
      fi
done

Die Datei ausführbar machen mit dem Kommando:

chmod +x /usr/local/bin/klein

 

Nach Information suchen, an mehreren Stellen im Rechner (mit Debian/GNU-Linux):

Die Datei /usr/local/bin/suche (anlegen im Terminalfenster als root):

#!/bin/sh
if [ "$1" = "" ] ; then echo 'Search for available Information'
echo 'Usage: '`basename $0`' "<string>"' ; exit 0 ; fi
T=$HOME/`basename $0`.txt
echo " "
echo "All results go into: $T"
echo " "
echo "Now searching ..."
echo "Search results for \"$1\":" > $T
echo "-------------" >> $T
echo "   - manual pages (man -k):" | tee -a $T
echo " " >> $T
man -k "$1" | grep -v "nothing appropriate" >> $T
echo "-------------" >> $T
echo "   - info pages (info --apropos):" | tee -a $T
echo " " >> $T
info --apropos "$1" 2>/dev/null | grep -v "No available info" >> $T
echo "-------------" >> $T
echo "   - configuration files (/etc/*):" | tee -a $T
echo " " >> $T
grep -ril "$1" /etc/* 2>/dev/null | grep -v "Permission denied" >> $T
echo "-------------" >> $T
echo "   - installed packages (/var/lib/dpkg/info/*.list):" | tee -a $T
echo " " >> $T
grep -il "$1" /var/lib/dpkg/info/*.list >> $T
echo "-------------" >> $T
echo "   - docs and HOWTOS (/usr/share/doc):" | tee -a $T
echo " " >> $T
find /usr/share/doc -type f -name "*\.html" | xargs grep -il "$1" >> $T
find /usr/share/doc -type f -name "*.txt" | xargs grep -il "$1" >> $T
find /usr/share/doc -type f -name "*.txt.gz" | xargs zgrep -il "$1" >> $T
echo "-------------" >> $T
echo "   - kernel docs (/usr/src/linux/Documentation):" | tee -a $T
echo " " >> $T
grep -ril "$1" /usr/src/linux/Documentation/* >> $T
echo "-------------" >> $T
echo "   - available packages (apt-cache search):" | tee -a $T
echo " " >> $T
cat apt-cache search "$1" >> $T
echo " " >> $T
echo "Finished"
echo "============="
cat $T
echo "============="
echo "(Result file is: $T)"

Die Datei ausführbar machen mit dem Kommando:

chmod +x /usr/local/bin/suche

 

Alle Dateien in "diesem" Directory und Unterdirectories nach einem Text durchsuchen

Die Datei /usr/local/bin/ts (anlegen im Terminalfenster als root):

#!/bin/sh
if [ "$1" = "" ] ; then echo 'Text search in current directory'
echo 'Usage: '`basename $0`' "<string>"' ; exit 0 ; fi
find . -type f | egrep -v "*.gz" | xargs grep -il "$1"
find . -type f -name "*.gz" | xargs zgrep -il "$1"
find . -type f -name "*.bz2" | xargs bzgrep -il "$1"

Die Datei ausführbar machen mit dem Kommando:

chmod +x /usr/local/bin/ts

 

Zählen, wie oft in einem Text ein bestimmtes Zeichen vorkommt

Zum Beispiel muß man manchmal feststellen, wieviele Schrägstriche (Slashes) ein Pfad enthält, und nur dann, wenn es genau einer ist, dürfen bestimmte Aktionen ausgeführt werden:

test "`echo $PATH | tr -cd '/' | wc -c`" = "1" && (aktionen)

abatz.de Jörn Abatz - Technische Software Impressum