Quick QR code creator

Johannes Widmer, Quickly transfer a text or a long number from the PC to the mobile phone? Type a short message on your computer and then send it from your mobile? That's easy if you have a mobile phone with a camera and a QR scanning software: You create your QR code on your PC (this black-white square as can be seen in the example right hand), and in this square your text is coded. You can now take a picture of this image, and your QR software decodes reliably the original text. As QR software I use "QR Droid" on an Android phone, but any QR scanner will do. Now, I finally need a quick button, to easily create a QR code on my screen:
  • First, install the package "qrencode". (Run "Ubuntu Software Center", type "qrencode" into the search field top right, click at the respectively found entry "QR Code encoder", then click "install")
  • The same way, install the package "zenity" ("Display graphical dialog boxes")
  • In your home-folder, create a new folder "bin"
  • In there, create a new empty file named "qr.sh". Open this file (e.g. with the text editor gedit) and copy the following code into it: #!/bin/sh qrtext=`zenity --entry --text="Please enter the text to generate the QR code from:"` qrencode -o /tmp/qr.png "$qrtext" gnome-open /tmp/qr.png
  • Make that file executable (right-click, properties, permissions, allow executing ... as program) Now, the script is ready to be started and tried. If you run it, you will be presented a window to enter your text. After clicking at OK, the QR code is displayed on your screen.
  • At last, make the script accessible through the Unity dash home main menu
  • Copy the QR code displayed above (or any other suitable icon) into the directory "bin", which was created before and name it qr.png
  • Start the file manager (nautilus) and make it display hidden files (in the drop-down menu "view"), and change into the directory ".local/share/applications"
  • There, create a file named "qr.desktop" (same procedure as described above) and copy the following code into it and replace "username" by your user name in the line "icon":
    [Desktop Entry]
    Name=Quick QR code
    Comment=Create and display a QR code from text
    Exec=bin/qr.sh
    Icon=/home/username/bin/qr.png
    Terminal=false
    Type=Application
    OnlyShowIn=GNOME;Unity;
  • Finally, re-start Unity by pressing Alt-F2 and enter the command "unity --restart" and press Enter.
  • Now, the QR script can be started directly through the Unity home dash main menu (e.g. press the Windows key and enter qr.)
Have fun with that! :) Sunday April 15th, 2012, 05:18 PM

Quickly transfer a text or a long number from the PC to the mobile phone? Type a short message on your computer and then send it from your mobile? That’s easy if you have a mobile phone with a camera and a QR scanning software: You create your QR code on your PC (this black-white square as can be seen in the example right hand), and in this square your text is coded. You can now take a picture of this image, and your QR software decodes reliably the original text. As QR software I use “QR Droid” on an Android phone, but any QR scanner will do. Now, I finally need a quick button, to easily create a QR code on my screen:

  • First, install the package “qrencode”. (Run “Ubuntu Software Center”, type “qrencode” into the search field top right, click at the respectively found entry “QR Code encoder”, then click “install”)
  • The same way, install the package “zenity” (“Display graphical dialog boxes”)
  • In your home-folder, create a new folder “bin”
  • In there, create a new empty file named “qr.sh”. Open this file (e.g. with the text editor gedit) and copy the following code into it: #!/bin/sh qrtext=`zenity –entry –text=”Please enter the text to generate the QR code from:”` qrencode -o /tmp/qr.png “$qrtext” gnome-open /tmp/qr.png
  • Make that file executable (right-click, properties, permissions, allow executing … as program) Now, the script is ready to be started and tried. If you run it, you will be presented a window to enter your text. After clicking at OK, the QR code is displayed on your screen.
  • At last, make the script accessible through the Unity dash home main menu
  • Copy the QR code displayed above (or any other suitable icon) into the directory “bin”, which was created before and name it qr.png
  • Start the file manager (nautilus) and make it display hidden files (in the drop-down menu “view”), and change into the directory “.local/share/applications”
  • There, create a file named “qr.desktop” (same procedure as described above) and copy the following code into it and replace “username” by your user name in the line “icon”:
    [Desktop Entry]
    Name=Quick QR code
    Comment=Create and display a QR code from text
    Exec=bin/qr.sh
    Icon=/home/username/bin/qr.png
    Terminal=false
    Type=Application
    OnlyShowIn=GNOME;Unity;
  • Finally, re-start Unity by pressing Alt-F2 and enter the command “unity –restart” and press Enter.
  • Now, the QR script can be started directly through the Unity home dash main menu (e.g. press the Windows key and enter qr.)

Have fun with that! :)

(Deutsch) CIFS (Samba) Laufwerk mit Benutzerrechten mounten

Johannes Widmer,

Sorry, this entry is only available in Deutsch.

Friday August 13th, 2010, 11:51 AM

Sorry, this entry is only available in Deutsch.

Refresh rate for external monitor

Johannes Widmer, After upgrading to Ubuntu 10.04 Lucid Lynx, the refresh rate of my additional external monitor was not detected correctly. Instead of displaying with 100 Hz, the frequency was stuck at 60 Hz, without an option to increase it. My eyes hurt. So, this is the fix: First, I open a Terminal. There, I have the current configuration of my monitors displayed, where I can see their internal names:
xrandr
There, between a lot of numbers, I find the internal names of the two connected monitors, the external monitor is identified as CRT1, which I can see from the following line:
CRT1 connected 1280x1024+1280+0 (normal left inverted  right x axis y axis) 0mm x 0mm
Now, I create a so-called Modeline, which I need to configure my monitor. For this, I use the command cvt. I want to configure my monitor with a resolution of 1280 x 1024 at 100 Hz, so I enter
cvt 1280 1024 100
and receive the result
# 1280x1024 99.96 Hz  (CVT) hsync: 108.66 kHz; pclk: 189.50 MHz
Modeline  "1280x1024_100.00"  189.50  1280 1376 1512 1744  1024 1027 1034 1087  -hsync +vsync
I copy the part after "Modeline" to the clipboard (marking with the mouse, then Shift+Ctrl+C), and I need it right afterwards in the next command, where I add the new configuration to the system:
xrandr --newmode "1280x1024_100.00"  189.50  1280 1376 1512  1744  1024 1027 1034 1087 -hsync +vsync
(pasting from the clipboard via Shift+Ctrl+V) Now I can assign this new Modline, which has the name "1280x1024_100.00", to the external monitor
xrandr  --addmode CRT1 "1280x1024_100.00"
and activate it
xrandr  --output CRT1 --mode "1280x1024_100.00"
The best about it: The new frequency is directly active, no need to reboot or restart Gnome. :) The configuration is now temporarily activated. If satisfied, with the result, the configuration can be written into the system configuration, so it will be applied every time after restarting the computer. For this, I copy the last three xrandr commands into the file /etc/X11/Xsession.d/45custom_xrandr-settings by executing the following command in the Terminal:
gksudo gedit /etc/X11/Xsession.d/45custom_xrandr-settings &
A window opens and I copy the last three xrandr commands into this window, it looks like this:
xrandr --newmode "1280x1024_100.00"  189.50  1280 1376 1512 1744  1024 1027 1034 1087 -hsync +vsync
xrandr --addmode CRT1 "1280x1024_100.00"
xrandr --output CRT1 --mode "1280x1024_100.00"
I save the file – finished. :) Source: ubuntuusers.deSaturday May 15th, 2010, 12:06 PM

After upgrading to Ubuntu 10.04 Lucid Lynx, the refresh rate of my additional external monitor was not detected correctly. Instead of displaying with 100 Hz, the frequency was stuck at 60 Hz, without an option to increase it. My eyes hurt.

So, this is the fix:

First, I open a Terminal. There, I have the current configuration of my monitors displayed, where I can see their internal names:

xrandr

There, between a lot of numbers, I find the internal names of the two connected monitors, the external monitor is identified as CRT1, which I can see from the following line:

CRT1 connected 1280x1024+1280+0 (normal left inverted  right x axis y axis) 0mm x 0mm

Now, I create a so-called Modeline, which I need to configure my monitor. For this, I use the command cvt. I want to configure my monitor with a resolution of 1280 x 1024 at 100 Hz, so I enter

cvt 1280 1024 100

and receive the result

# 1280x1024 99.96 Hz  (CVT) hsync: 108.66 kHz; pclk: 189.50 MHz
Modeline  "1280x1024_100.00"  189.50  1280 1376 1512 1744  1024 1027 1034 1087  -hsync +vsync

I copy the part after “Modeline” to the clipboard (marking with the mouse, then Shift+Ctrl+C), and I need it right afterwards in the next command, where I add the new configuration to the system:

xrandr --newmode "1280x1024_100.00"  189.50  1280 1376 1512  1744  1024 1027 1034 1087 -hsync +vsync

(pasting from the clipboard via Shift+Ctrl+V) Now I can assign this new Modline, which has the name “1280x1024_100.00”, to the external monitor

xrandr  --addmode CRT1 "1280x1024_100.00"

and activate it

xrandr  --output CRT1 --mode "1280x1024_100.00"

The best about it: The new frequency is directly active, no need to reboot or restart Gnome. :)

The configuration is now temporarily activated. If satisfied, with the result, the configuration can be written into the system configuration, so it will be applied every time after restarting the computer. For this, I copy the last three xrandr commands into the file /etc/X11/Xsession.d/45custom_xrandr-settings by executing the following command in the Terminal:

gksudo gedit /etc/X11/Xsession.d/45custom_xrandr-settings &

A window opens and I copy the last three xrandr commands into this window, it looks like this:

xrandr --newmode "1280x1024_100.00"  189.50  1280 1376 1512 1744  1024 1027 1034 1087 -hsync +vsync
xrandr --addmode CRT1 "1280x1024_100.00"
xrandr --output CRT1 --mode "1280x1024_100.00"

I save the file – finished. :)

Source: ubuntuusers.de

Replace text in many files at once

Johannes Widmer, If you want to replace the text 'asdf' by 'qwert' in all '*.txt' files in a directory at once, use the following command: sed -i -e 's/asdf/qwert/g' *.txtWednesday July 8th, 2009, 01:39 PM

If you want to replace the text ‘asdf’ by ‘qwert’ in all ‘*.txt’ files in a directory at once, use the following command:

sed -i -e 's/asdf/qwert/g' *.txt

(Deutsch) VirtualBox im Headless-Mode

Johannes Widmer, [lang_de]Der Headless mode von VirtualBox kann verwendet werden, um eine virtuelle Maschine auf einem Host ohne grafisches Frontend zu betreiben.

Host-System

Betriebssystem

Ubuntu Server ohne grafische Benutzeroberfläche als Standard-Installation mit OpenSSH-Server. (Getestet mit 8.04)

VirtualBox installieren

Der Headless mode ist nur in der non-OSE-Version von VirtualBox verfügbar. Die non-OSE-Version ist nicht bei Ubuntu dabei, daher muss erst das VirtualBox-Repository hinzugefügt werden.
sudo bash -c "echo deb http://download.virtualbox.org/virtualbox/debian hardy non-free > /etc/apt/sources.list.d/virtualbox.list"
sudo wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install mc virtualbox-2.0
sudo adduser vboxuser
sudo usermod -a -G vboxusers vboxuser
sudo usermod -a -G admin vboxuser

Netzwerkbrücke einrichten (bridged networking)

Damit ein Server-Dienst auf dem Gast erreichbar ist, muss die virtuelle Netzwerkkarte mit Hilfe einer Netzwerkbrücke an die Host-Netzwerkkarte angeschlossen werden (siehe auch http://wiki.ubuntuusers.de/VirtualBox). Achtung: Die Netzwerkkarte, an die die virtuellen Maschinen angekoppelt werden, muss als eth0 konfiguriert sein. (Dies kann ggf. in /etc/udev/rules.d/70-persistent-net.rules angepasst werden.) Auf dem Host werden die Pakete bridge-utils und uml-utilities benötigt:
sudo apt-get install bridge-utils uml-utilities
Beim Systemstart muss die Netzwerkbrücke erstellt und mit eth0 verbunden werden und für jede virtuelle Maschine wird ein virtuelles Netzwerkgerät tap erstellt:
sudo mcedit /etc/init.d/iapp-network-bridge.sh
Der Inhalt der Datei:
#!/bin/bash 

NUMBER_OF_TAPS=1

BRCTL=/usr/sbin/brctl
IFCONFIG=/sbin/ifconfig
DHCLIENT=/sbin/dhclient
CHMOD=/bin/chmod
CHGRP=/bin/chgrp
TUNCTL=/usr/sbin/tunctl

test -f $BRCTL || exit 0
test -f $IFCONFIG || exit 0
test -f $DHCLIENT || exit 0
test -f $CHMOD || exit 0
test -f $CHGRP || exit 0
test -f $TUNCTL || exit 0

. /lib/lsb/init-functions

case "$1" in
start)   log_daemon_msg "Starting network bridge" "iapp-network-bridge"
         $BRCTL addbr br0
         $BRCTL addif br0 eth0
         $DHCLIENT br0
         $IFCONFIG eth0 0.0.0.0
         $CHMOD 0660 /dev/net/tun
         $CHGRP vboxusers /dev/net/tun
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do $TUNCTL -t tap$i -u vboxuser
            ifconfig tap$i up
            brctl addif br0 tap$i
            i=i+1
         done
         log_end_msg $?
         ;;
stop)    log_daemon_msg "Stopping network bridge" "iapp-network-bridge"
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do ifconfig tap$i down
            brctl delif br0 tap$i
            i=i+1
         done
         $IFCONFIG br0 down
         $BRCTL delbr br0
         $DHCLIENT eth0
         log_end_msg $?
         ;;
restart) /etc/init.d/iapp-network-bridge.sh stop
         /etc/init.d/iapp-network-bridge.sh start
         ;;
esac
exit 0
Die Anzahl der virtuellen Netzwerkkarten (taps), die erstellt werden, kann in der ersten Programmzeile festgelegt werden. Die erstellten Devices werden, beginnend mit tap0, tap1 etc. durchnummeriert. Mit den folgenden Kommandos wird die Netzwerkbrücke automatisch beim Systemstart gestartet.
sudo chmod a+x /etc/init.d/iapp-network-bridge.sh
sudo ln -s ../init.d/iapp-network-bridge.sh /etc/rc2.d/S50iapp-network-bridge
sudo /etc/init.d/iapp-network-bridge.sh start

Virtuelle Maschine einrichten

Eine virtuelle Maschine neu erstellen und installieren

Virtuelle Maschine erstellen und für die Installation der Betriebssystems konfigurieren:
VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine
MAC=MAC-Adresse_ohne_Doppelpunkte_z.B._001122334455
INSTALL_ISO=ISO-Datei_der_Installations-CD_absoluter_Pfad
sudo -H -u vboxuser VBoxManage createvm -name $VBOXNAME -register
sudo -H -u vboxuser VBoxManage createvdi -filename $VBOXNAME.vdi -size 10240 -register
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -ostype ubuntu -memory 2000 -hda $VBOXNAME.vdi -nic1 hostif -hostifdev1 $TAPDEVICE -macaddress1 $MAC
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -pae off -dvd $INSTALL_ISO -boot1 dvd
Virtuelle Maschine für Betriebssystem-Installation starten:
sudo -H -u vboxuser VBoxHeadless -startvm $VBOXNAME -vrdp on &
Jetzt m.H.v. "rdesktop <IP-Adresse des Hosts>" mit der virtuellen Maschine verbinden und Betriebssystem installieren. Dabei ist darauf zu achten, dass auf der virtuellen Maschine ein SSH-Server installiert und aktiviert wird. Falls das Gast-System Ubuntu ist, muss der Generic-Kernel installiert werden, da der Standard-Kernel nur im PAE/NX-Modus mit der Virtuellen Maschine kompatibel ist. (Der PAE/NX-Modus kann nur bei aktiviert werden, wenn nur ein Gast auf dem Host läuft, sonst bricht die Zuverlässigkeit dramatisch ein; er sollte daher generell vermieden werden.)
  • Die virtuelle Maschine herunterfahren und die Installation-CD erneut einhängen
    sudo -H -u vboxuser VBoxManage controlvm $VBOXNAME poweroff
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd $INSTALL_ISO -boot1 dvd
  • Im Rettungsmodus starten, dort den Generic-Kernel installieren
    apt-get install linux-generic
    exit
  • Den Gast neu starten und von Festplatte booten, dabei per Escape-Taste ins Grub-Menü springen und den Generic-Kernel (dritter Eintrag) booten
  • Im Boot-Menü die Boot-Abschnitte so sortieren, dass der Generic-Kernel an erster Stelle steht
    sudo apt-get install mc
    sudo mcedit /boot/grub/menu.lst
  • Den Gast herunterfahren
    sudo halt
Nun kann die virtuelle Maschine für den regulären Betrieb vorbereitet werden (ISO-Image aushängen, PAE/NX-Modus deaktivieren):
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none -boot1 disk -pae off

Eine virtuelle Maschine umziehen

1. Auf der virtuellen Maschine Die virtuelle Maschine muss heruntergefahren werden:
sudo halt
2. Auf dem Ursprungs-Host Den Namen der virtuellen Maschine definieren:
VBOXNAME=Name_der_virtuellen_Maschine
Eine virtuelle Maschine kann nur umgezogen werden, wenn keine Datenträger an sie angeschlossen sind. Zunächst muss also die Festplatte ausgehängt werden:
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda none
Dann kann die virtuelle Maschine von VirtualBox abgemeldet werden:
sudo -H -u vboxuser VBoxManage unregistervm $VBOXNAME
3. Auf dem Ziel-Host Den Namen der virtuellen Maschine definieren:
VBOXNAME=Name_der_virtuellen_Maschine
VBOXSOURCEHOST=IP_des_Ursprungs-Hosts
Nun werden das Festplattenimage und die Virtuelle Maschine auf das Zielsystem kopiert:
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/VDI
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp -r $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/Machines/$VBOXNAME ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/VDI/$VBOXNAME.vdi ~vboxuser/.VirtualBox/VDI/
Nun müssen die Dateien bei VirtualBox registriert werden:
sudo -H -u vboxuser VBoxManage registerimage disk $VBOXNAME.vdi
sudo -H -u vboxuser VBoxManage registervm Machines/$VBOXNAME/$VBOXNAME.xml
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda $VBOXNAME.vdi
Ggf. muss nun noch das richtige TAP-Device angegeben werden:
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hostifdev1 TAP-Device
Nun ist die virtuelle Maschine lauffähig.

Startup- und Shutdown-Skripte erstellen

Die Skripte sind notwendig, wenn die virtuelle Maschine automatisch beim Systemstart gestartet werden soll. Sie sorgen auch dafür, dass beim Herunterfahren des Systems auch die virtuelle Maschine automatisch eingefroren und beim nächsten Booten an derselben Stelle fortgesetzt wird. Zunächst wird das Skript erstellt:
VBOXNAME=Name_der_virtuellen_Maschine
sudo mcedit /etc/init.d/iapp-vbox-$VBOXNAME.sh
Der Inhalt der Datei:
#!/bin/bash

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine

VBOXHEADLESS=/usr/bin/VBoxHeadless
VBOXMANAGE=/usr/bin/VBoxManage
IFCONFIG=/sbin/ifconfig

test -f $VBOXHEADLESS || exit 0
test -f $VBOXMANAGE || exit 0
test -f $IFCONFIG || exit 0

. /lib/lsb/init-functions

case "$1" in
start)    log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp off &
          sleep 1
          log_end_msg $?
          exit 0
          ;;
start_with_vrdp) log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp on &
          sleep 1
          echo You can connect the virtual machine now using \"rdesktop `ifconfig br0 | grep -oe "inet addr:\\([0-9]\\+\\.\\?\\)\\+" | grep -oe "\\([0-9]\\+\\.\\?\\)\\+"`\"
          log_end_msg $?
          exit 0
          ;;
stop)     log_daemon_msg "Stopping virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME savestate
          log_end_msg $?
          exit 0
          ;;
reset)    log_daemon_msg "Resetting virtual machine $VBOXNAME" ""
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME reset
          log_end_msg $?
          exit 0
          ;;
poweroff) log_daemon_msg "Switching off virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME poweroff
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          log_end_msg $?
          exit 0
          ;;
esac
echo No valid option found. Valid options are: start, start_with_vrdp, stop, reset, poweroff
exit 0
... und dann ausführbar gemacht und ins System eingetragen:
sudo chmod a+x /etc/init.d/iapp-vbox-$VBOXNAME.sh
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc2.d/S99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc0.d/K99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc6.d/K99iapp-vbox-$VBOXNAME
sudo /etc/init.d/iapp-vbox-$VBOXNAME.sh start

Virtuelle Maschine manuell starten/stoppen

  • Mit Hilfe des Startup-Skripts:
    • Starten: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start
    • Einfrieren für späteres Fortsetzen an derselben Stelle: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh stop
    • Reset bei abgestürztem Gast-System: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh reset
    • Ausschalten bei abgestürztem Gast-System: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh poweroff
    • Starten mit rdp-Protokoll (zum Verbinden via rdesktop host-ip): /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start_with_vrdp
  • Direkt mit den VirtualBox-Kommandos VBoxManage und VBoxHeadless (als Benutzer vboxuser):
    • Virtuelle Maschinen und ihre Konfigurationen anzeigen lassen: VBoxManage list vms | less
    • Aktuell laufende virtuelle Maschinen anzeigen lassen: VBoxManage list runningvms
    • Virtuelle Maschine konfigurieren: VBoxManage modifyvm Name_der_virtuellen_Maschine Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Virtuelle Maschine starten: VBoxHeadless -s Name_der_virtuellen_Maschine -vrdp on|off
    • Virtuelle Maschine anhalten/resetten/etc.: VBoxManage controlvm Name_der_virtuellen_Maschine Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Eine Liste aller verfügbaren Aktionen erscheint direkt nach Eingabe von VBoxManage

Quellen/Links

[/lang_de]Sunday September 28th, 2008, 07:49 PM

[lang_de]Der Headless mode von VirtualBox kann verwendet werden, um eine virtuelle Maschine auf einem Host ohne grafisches Frontend zu betreiben.

Host-System

Betriebssystem

Ubuntu Server ohne grafische Benutzeroberfläche als Standard-Installation mit OpenSSH-Server. (Getestet mit 8.04)

VirtualBox installieren

Der Headless mode ist nur in der non-OSE-Version von VirtualBox verfügbar. Die non-OSE-Version ist nicht bei Ubuntu dabei, daher muss erst das VirtualBox-Repository hinzugefügt werden.

sudo bash -c "echo deb http://download.virtualbox.org/virtualbox/debian hardy non-free > /etc/apt/sources.list.d/virtualbox.list"
sudo wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install mc virtualbox-2.0
sudo adduser vboxuser
sudo usermod -a -G vboxusers vboxuser
sudo usermod -a -G admin vboxuser

Netzwerkbrücke einrichten (bridged networking)

Damit ein Server-Dienst auf dem Gast erreichbar ist, muss die virtuelle Netzwerkkarte mit Hilfe einer Netzwerkbrücke an die Host-Netzwerkkarte angeschlossen werden (siehe auch http://wiki.ubuntuusers.de/VirtualBox).

Achtung: Die Netzwerkkarte, an die die virtuellen Maschinen angekoppelt werden, muss als eth0 konfiguriert sein.
(Dies kann ggf. in /etc/udev/rules.d/70-persistent-net.rules angepasst werden.)

Auf dem Host werden die Pakete bridge-utils und uml-utilities benötigt:

sudo apt-get install bridge-utils uml-utilities

Beim Systemstart muss die Netzwerkbrücke erstellt und mit eth0 verbunden werden und für jede virtuelle Maschine wird ein virtuelles Netzwerkgerät tap erstellt:

sudo mcedit /etc/init.d/iapp-network-bridge.sh

Der Inhalt der Datei:

#!/bin/bash 

NUMBER_OF_TAPS=1

BRCTL=/usr/sbin/brctl
IFCONFIG=/sbin/ifconfig
DHCLIENT=/sbin/dhclient
CHMOD=/bin/chmod
CHGRP=/bin/chgrp
TUNCTL=/usr/sbin/tunctl

test -f $BRCTL || exit 0
test -f $IFCONFIG || exit 0
test -f $DHCLIENT || exit 0
test -f $CHMOD || exit 0
test -f $CHGRP || exit 0
test -f $TUNCTL || exit 0

. /lib/lsb/init-functions

case "$1" in
start)   log_daemon_msg "Starting network bridge" "iapp-network-bridge"
         $BRCTL addbr br0
         $BRCTL addif br0 eth0
         $DHCLIENT br0
         $IFCONFIG eth0 0.0.0.0
         $CHMOD 0660 /dev/net/tun
         $CHGRP vboxusers /dev/net/tun
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do $TUNCTL -t tap$i -u vboxuser
            ifconfig tap$i up
            brctl addif br0 tap$i
            i=i+1
         done
         log_end_msg $?
         ;;
stop)    log_daemon_msg "Stopping network bridge" "iapp-network-bridge"
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do ifconfig tap$i down
            brctl delif br0 tap$i
            i=i+1
         done
         $IFCONFIG br0 down
         $BRCTL delbr br0
         $DHCLIENT eth0
         log_end_msg $?
         ;;
restart) /etc/init.d/iapp-network-bridge.sh stop
         /etc/init.d/iapp-network-bridge.sh start
         ;;
esac
exit 0

Die Anzahl der virtuellen Netzwerkkarten (taps), die erstellt werden, kann in der ersten Programmzeile festgelegt werden. Die erstellten Devices werden, beginnend mit tap0, tap1 etc. durchnummeriert.
Mit den folgenden Kommandos wird die Netzwerkbrücke automatisch beim Systemstart gestartet.

sudo chmod a+x /etc/init.d/iapp-network-bridge.sh
sudo ln -s ../init.d/iapp-network-bridge.sh /etc/rc2.d/S50iapp-network-bridge
sudo /etc/init.d/iapp-network-bridge.sh start

Virtuelle Maschine einrichten

Eine virtuelle Maschine neu erstellen und installieren

Virtuelle Maschine erstellen und für die Installation der Betriebssystems konfigurieren:

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine
MAC=MAC-Adresse_ohne_Doppelpunkte_z.B._001122334455
INSTALL_ISO=ISO-Datei_der_Installations-CD_absoluter_Pfad
sudo -H -u vboxuser VBoxManage createvm -name $VBOXNAME -register
sudo -H -u vboxuser VBoxManage createvdi -filename $VBOXNAME.vdi -size 10240 -register
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -ostype ubuntu -memory 2000 -hda $VBOXNAME.vdi -nic1 hostif -hostifdev1 $TAPDEVICE -macaddress1 $MAC
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -pae off -dvd $INSTALL_ISO -boot1 dvd

Virtuelle Maschine für Betriebssystem-Installation starten:

sudo -H -u vboxuser VBoxHeadless -startvm $VBOXNAME -vrdp on &

Jetzt m.H.v. “rdesktop <IP-Adresse des Hosts>” mit der virtuellen Maschine verbinden und Betriebssystem installieren. Dabei ist darauf zu achten, dass auf der virtuellen Maschine ein SSH-Server installiert und aktiviert wird.
Falls das Gast-System Ubuntu ist, muss der Generic-Kernel installiert werden, da der Standard-Kernel nur im PAE/NX-Modus mit der Virtuellen Maschine kompatibel ist. (Der PAE/NX-Modus kann nur bei aktiviert werden, wenn nur ein Gast auf dem Host läuft, sonst bricht die Zuverlässigkeit dramatisch ein; er sollte daher generell vermieden werden.)

  • Die virtuelle Maschine herunterfahren und die Installation-CD erneut einhängen
    sudo -H -u vboxuser VBoxManage controlvm $VBOXNAME poweroff
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd $INSTALL_ISO -boot1 dvd
  • Im Rettungsmodus starten, dort den Generic-Kernel installieren
    apt-get install linux-generic
    exit
  • Den Gast neu starten und von Festplatte booten, dabei per Escape-Taste ins Grub-Menü springen und den Generic-Kernel (dritter Eintrag) booten
  • Im Boot-Menü die Boot-Abschnitte so sortieren, dass der Generic-Kernel an erster Stelle steht
    sudo apt-get install mc
    sudo mcedit /boot/grub/menu.lst
  • Den Gast herunterfahren
    sudo halt

Nun kann die virtuelle Maschine für den regulären Betrieb vorbereitet werden (ISO-Image aushängen, PAE/NX-Modus deaktivieren):

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none -boot1 disk -pae off

Eine virtuelle Maschine umziehen

1. Auf der virtuellen Maschine
Die virtuelle Maschine muss heruntergefahren werden:

sudo halt

2. Auf dem Ursprungs-Host

Den Namen der virtuellen Maschine definieren:

VBOXNAME=Name_der_virtuellen_Maschine

Eine virtuelle Maschine kann nur umgezogen werden, wenn keine Datenträger an sie angeschlossen sind. Zunächst muss also die Festplatte ausgehängt werden:

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda none

Dann kann die virtuelle Maschine von VirtualBox abgemeldet werden:

sudo -H -u vboxuser VBoxManage unregistervm $VBOXNAME

3. Auf dem Ziel-Host

Den Namen der virtuellen Maschine definieren:

VBOXNAME=Name_der_virtuellen_Maschine
VBOXSOURCEHOST=IP_des_Ursprungs-Hosts

Nun werden das Festplattenimage und die Virtuelle Maschine auf das Zielsystem kopiert:

sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/VDI
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp -r $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/Machines/$VBOXNAME ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/VDI/$VBOXNAME.vdi ~vboxuser/.VirtualBox/VDI/

Nun müssen die Dateien bei VirtualBox registriert werden:

sudo -H -u vboxuser VBoxManage registerimage disk $VBOXNAME.vdi
sudo -H -u vboxuser VBoxManage registervm Machines/$VBOXNAME/$VBOXNAME.xml
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda $VBOXNAME.vdi

Ggf. muss nun noch das richtige TAP-Device angegeben werden:

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hostifdev1 TAP-Device

Nun ist die virtuelle Maschine lauffähig.

Startup- und Shutdown-Skripte erstellen

Die Skripte sind notwendig, wenn die virtuelle Maschine automatisch beim Systemstart gestartet werden soll. Sie sorgen auch dafür, dass beim Herunterfahren des Systems auch die virtuelle Maschine automatisch eingefroren und beim nächsten Booten an derselben Stelle fortgesetzt wird.
Zunächst wird das Skript erstellt:

VBOXNAME=Name_der_virtuellen_Maschine
sudo mcedit /etc/init.d/iapp-vbox-$VBOXNAME.sh

Der Inhalt der Datei:

#!/bin/bash

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine

VBOXHEADLESS=/usr/bin/VBoxHeadless
VBOXMANAGE=/usr/bin/VBoxManage
IFCONFIG=/sbin/ifconfig

test -f $VBOXHEADLESS || exit 0
test -f $VBOXMANAGE || exit 0
test -f $IFCONFIG || exit 0

. /lib/lsb/init-functions

case "$1" in
start)    log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp off &
          sleep 1
          log_end_msg $?
          exit 0
          ;;
start_with_vrdp) log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp on &
          sleep 1
          echo You can connect the virtual machine now using \"rdesktop `ifconfig br0 | grep -oe "inet addr:\\([0-9]\\+\\.\\?\\)\\+" | grep -oe "\\([0-9]\\+\\.\\?\\)\\+"`\"
          log_end_msg $?
          exit 0
          ;;
stop)     log_daemon_msg "Stopping virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME savestate
          log_end_msg $?
          exit 0
          ;;
reset)    log_daemon_msg "Resetting virtual machine $VBOXNAME" ""
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME reset
          log_end_msg $?
          exit 0
          ;;
poweroff) log_daemon_msg "Switching off virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME poweroff
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          log_end_msg $?
          exit 0
          ;;
esac
echo No valid option found. Valid options are: start, start_with_vrdp, stop, reset, poweroff
exit 0

… und dann ausführbar gemacht und ins System eingetragen:

sudo chmod a+x /etc/init.d/iapp-vbox-$VBOXNAME.sh
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc2.d/S99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc0.d/K99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc6.d/K99iapp-vbox-$VBOXNAME
sudo /etc/init.d/iapp-vbox-$VBOXNAME.sh start

Virtuelle Maschine manuell starten/stoppen

  • Mit Hilfe des Startup-Skripts:
    • Starten:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start
    • Einfrieren für späteres Fortsetzen an derselben Stelle:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh stop
    • Reset bei abgestürztem Gast-System:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh reset
    • Ausschalten bei abgestürztem Gast-System:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh poweroff
    • Starten mit rdp-Protokoll (zum Verbinden via rdesktop host-ip):
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start_with_vrdp
  • Direkt mit den VirtualBox-Kommandos VBoxManage und VBoxHeadless (als Benutzer vboxuser):
    • Virtuelle Maschinen und ihre Konfigurationen anzeigen lassen:
      VBoxManage list vms | less
    • Aktuell laufende virtuelle Maschinen anzeigen lassen:
      VBoxManage list runningvms
    • Virtuelle Maschine konfigurieren:
      VBoxManage modifyvm Name_der_virtuellen_Maschine
      Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Virtuelle Maschine starten:
      VBoxHeadless -s Name_der_virtuellen_Maschine -vrdp on|off
    • Virtuelle Maschine anhalten/resetten/etc.:
      VBoxManage controlvm Name_der_virtuellen_Maschine
      Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Eine Liste aller verfügbaren Aktionen erscheint direkt nach Eingabe von VBoxManage

Quellen/Links

[/lang_de]

Rename many files at once

Johannes Widmer, Quite frequently it happens that you have to rename many files at once replacing, expanding or removing parts of the file names of many files in the same way. While any real linux freak will instantly build an extended command line for this, there's a simple way to do this task hardly touching the command line. For this you have to install "mc" (via Synaptec package administration) and then run "mc" by pressing the Alt+F2 keys entering "mc", checking "run in terminal" and then starting the command. Within the mc, which opens up now, you navigate to the folder containing the desired files, using the up/down arrow keys and the enter key. Once you located the files you select them using the Insert key of you keyboard, selected files appear in yellow font. Now you press the F6 key (renaming files), in the following dialog window you enter the way the files should be renamed - changing parts of the filenames you replace by the * character. E.g. to rename a number of pictures from "Image 1.jpg", "Image 2.jpg" etc. to "Picture 1.jpg", "Picture 2.jpg" etc., you enter "Image*.jpg" into the first line and "Picture*.jpg" into the second of the green lines, press enter to confirm and done, all the files are renamed.Wednesday August 20th, 2008, 12:48 AM

Quite frequently it happens that you have to rename many files at once replacing, expanding or removing parts of the file names of many files in the same way. While any real linux freak will instantly build an extended command line for this, there’s a simple way to do this task hardly touching the command line. For this you have to install “mc” (via Synaptec package administration) and then run “mc” by pressing the Alt+F2 keys entering “mc”, checking “run in terminal” and then starting the command. Within the mc, which opens up now, you navigate to the folder containing the desired files, using the up/down arrow keys and the enter key. Once you located the files you select them using the Insert key of you keyboard, selected files appear in yellow font. Now you press the F6 key (renaming files), in the following dialog window you enter the way the files should be renamed – changing parts of the filenames you replace by the * character. E.g. to rename a number of pictures from “Image 1.jpg”, “Image 2.jpg” etc. to “Picture 1.jpg”, “Picture 2.jpg” etc., you enter “Image*.jpg” into the first line and “Picture*.jpg” into the second of the green lines, press enter to confirm and done, all the files are renamed.

Burn video DVD

Johannes Widmer, , 12:24 AM

Right now there’s a neatly new digital video camera in front of me and I figured out how to burn the movies which I have recorded on a DVD so I can watch it with my DVD player on the TV set. I found DeVeDe, a practical piece of software which can directly be installed from Ubuntu 8.04, it just works as it should out of the box. First I connect my camera via USB and copy the video files to my hard disk. Then I run DeVeDe and create a new title for each menu item which should appear in the main menu of my DVD. Now I have to add the video file(s) which should be played upon selecting the respective title. When adding a file, I have to apply a de-interlacing filter which makes the movies look much smoother (though this might not be required for every camera). To reach this, I expand the advanced options on bottom of the add-a-file-dialog and select the FFMpeg deinterlacing filter from the quality settings tab. After having added all files I run the conversion procedure by clicking “next” and save the iso file to disk. The procedure takes quite a while, but once it’s finished, I just have to double click on the newly created iso file and directly Ubuntu shows a dialog window where I can write the image on an empty DVD – that’s it, the video DVD is ready. ;)

(Deutsch) Bin-Datei starten

Johannes Widmer,

Sorry, this entry is only available in Deutsch.

Thursday July 24th, 2008, 11:02 AM

Sorry, this entry is only available in Deutsch.

Magic Inkscape

Johannes Widmer, A great site with a lot of tutorials how to paint amazing things using Inkscape is the Inkscape Tutorials weblog – it's definitely worth a visit!Monday March 24th, 2008, 08:19 PM

A great site with a lot of tutorials how to paint amazing things using Inkscape is the Inkscape Tutorials weblog – it’s definitely worth a visit!

Vektorgrafik unter Linux

Johannes Widmer, , 08:15 PM

Inkscape vs. OpenOffice.org Draw

Da ich immer mal wieder Plakate, Poster, Pläne, Flyer, T-Shirts, Postkarten oder ähnliches gestalte, bin ich regelmäßiger Benutzer von Vektorgrafik-Programmen. Unter Windows war ich treuer CorelDraw-Nutzer, aber als ich dann auf Linux umstieg, stellte sich da natürlich gleich die Frage, welches Programm hier am besten geeignet ist. Und ich war überrascht: Es gibt gleich zwei ganz gute Alternativen. Leider sind beide nicht ganz perfekt, aber bisher habe ich jede Herausforderung mit einem der beiden gemeistert. Beide Programme sind bei Ubuntu 7.04 schon dabei, man kann sie direkt über die Paketverwaltung installieren.

  1. Inkscape kommt CorelDraw sicher am nächsten, und das schönste ist, dass es mit dem SVG-Dateityp arbeitet, der sich derzeit langsam aber sicher als Vektorgrafik-Standard herauskristallisiert und inzwischen sogar von Firefox von Haus aus angezeigt wird. Leider befindet es sich derzeit noch merklich im Entwicklungsstadium und neben Problemen beim Export in andere Dateiformate macht mir vor allem die schlechte Performance beim Bearbeiten großer und komplexer Bilder mit vielen Effekten und Tranzparenzen zu schaffen. (Die aktuelle Versionsnummer 0.45 weist ja schon darauf hin, dass es sich noch nicht um ein komplett ausgereiftes Produkt handelt.)
  2. Deutlich besser macht sich da OpenOffice.org Draw, das ist die Grafik-Komponente des OpenOffice.org-Projekts (ich nutze derzeit Version 2.3). Das ist ein rundum tolles, reifes, stabiles Produkt, das wenige Wünsche bezüglich Performance und Anwenderfreundlichkeit offen lässt und einen sehr soliden Funktionsumfang hat … wenn … ja wenn da nicht das große Problem mit den Farben wäre. OOo Draw erlaubt es nicht, die Farbe eines Objekts frei einzustellen, man kann eine Farbe lediglich aus einer vorher definierten Palette auswählen, was die Bedienung unnötig kompliziert macht. Man kann zwar inzwischen die Palette sehr einfach um neue Farben erweitern, aber zur Feinabstimmung der Farben per Try-and-error ist das ganze dann doch leider nicht so gut geeignet.