Entries filed under Linux

Windows PCs mit Linux Server herunterfahren

Posted on 12. April 2013 Comments

Das Hochfahren von PCs ist von jeder Platform aus eigentlich ziemlich einfach. Wenn das BIOS WakeOnLAN unterstützt bzw. überhaupt vorhanden ist(der Raspberry Pi hat z.B. keins), dann kann mit einem beliebigen Programm von jedem Betriebssystem so ein Aufweck-Paket geschickt werden.

Herunterfahren gestaltet sich da schon schwieriger, weil es dort natürlich keinen Standard gibt. Gerade um eine große Menge an Computern runterzufahren ist natürlich so eine Batch Lösung ganz angenehm. Das Problem ist nur, dass wir keine Windows-Server haben. Die meisten laufen unter irgendeiner Art von SuSE. Für einen remote shutdown gibt es das Programm PowerOff von Jorgen Bosman. Das Programm wird nicht mehr weiterentwickelt, funktioniert aber für WindowsXP noch wunderbar. Es gibt sogar eine Online Dokumentation. Wie allgemein bekannt sein dürfte, können Windows Programme unter Linux mit wine ausgeführt werden. Dazu wird allerdings meistens eine GUI gestartet, was sich natürlich in einem Bash-Script, welches z.B. über einen cronjob gestartet wird ziemlich unpraktisch ist. Obwohl das Program auch über Kommandozeile steuerbar ist, öffnet sich trotzdem irgendwie eine GUI. Um das zu vermeiden kann man dann das Programm wineconsole nehmen. Damit es zu keiner Fehlermeldung kommt habe ich in dem Skript, welches den PC-Pool herunterfährt nicht den Standard Display genommen sondern vorher durch ein export DISPLAY:=1 auf einen virtuellen Display umgeleitet. Für den virtuellen Display sorgt das Programm Xvfb. Damit dieses einen Display mit der Nummer 1 startet, gibt man einfach den Befehl Xvfb :1 & ein. Der muss natürlich nur einmal gestartet werden, nicht in jedem Skript neu.
Der Befehl für das Herunterfahren eines PCs mit der IP 192.168.1.10 ist:

wineconsole /usr/local/bin/pwo.exe -quiet poweroff -warn -warntime 1 -msg „Shutdown initiated“ -force -nocancel -password yourPWhere -remote 192.168.1.10

Wie man sieht habe ich die PowerOff Binary in /usr/local/bin verschoben, zeige keine ErrorMessage an, warne nur für 1 Sekunde mit dem Hinweis „Shutdown initiated“, das Abbrechen ist deaktiviert(ist in 1 Sekunde auch quasi unmöglich). Das Herunterfahren ist als Service auf dem entsprechenden Windows-Kisten installiert und braucht ein Passwort(„yourPWhere“). Dahinter dann noch die enstprechende IP-Adresse.

Um die eventuell noch an den Rechnern sitzenden User zu warnen, verwende ich folgenden Befehl:

wineconsole /usr/local/bin/pwo.exe -quiet no_action -warn -warntime 300 -msg “ Dieser Computer wird in 5 Minuten abgeschaltet. Bitte alle Anwendungen schliessen und abmelden! “ -force -nocancel -password yourPWhere -remote 192.168.1.10

Wie man hier sieht, führe ich aufgrund des no_action Schalters nichts direkt aus, sondern warne nur.

Nach ein paar Durchläufen führt das bei mir anscheinend zu irgendeiner Art von Speicherüberlauf, deswegen kill ich den Xvfb-Prozess über einen cronjob einmal am Tag und starte ihn neu.

Nützlich könnte auch dieser Artikel von mir sein, in dem ich beschriebe wie man mit einem einfachen Perl-Skript Cronjobs ein und anschaltet. Am Wochenende sind z.B. bei uns die Computer sowieso aus. Außerdem habe ich schonmal darüber gebloggt, wie man feststellt ob Computer einer bestimmten IP-Range online sind, indem man alle mal anpingt.

Automatisches Ausloggen im Kiosk Modus bei Inaktivitaet mithilfe von xscreensaver

Posted on 11. April 2013 Comments

Das Problem bei Rechnern im Kiosk Modus ist, dass die Benutzer sich manchmal nicht ausloggen und so prinzipiell jeder, der sich als nächstes an den Rechner setzt einfach diverse Accounts übernehmen kann, weil z.B. die Cookies noch vorhanden sind. Dieser Artikel basiert auf dem vorherigen Raspberry Pi als Kiosk mit resourcenschonendem Browser und VESA Mount. Da dieser Brower sich neu startet, wenn der Prozess mit 5 Sekunden Pause nicht läuft, kann man ihn einfach killen.

Zur Messen der Inaktivität haben sich die Leute vom xscreensaver-Projekt schon genug Gedanken gemacht, also möchte ich das hier nutzen, statt etwas eigenes zu schrieben oder timeoutd zu nutzen. Die Timeout Zeit setzt man in ~/.xscreensaver.

In den man-pages von xscreensaver-command findet man folgendes Perl-Skript. Ich habe es ein bisschen meinen Anforderungen angepasst. Perl muss natürlich vorher installiert werden.

sudo apt-get install perl

Es piped in der Variable IN den Befehl xscreensaver-command -watch, welcher den xscreensaver beobachtet. Sollte dort nun also die Meldung BLANK(Bildschirmschoner geht an) oder LOCK(Bildschirmschoner lockt) auftauchen(passiert nach der eben definierten Zeit), dann deaktiviert er ihn sofort wieder, killt den Browser und setzt ein flag. Das wiederrum löst UNBLANK aus(Bildschirmschoner geht aus) und das flag wird zurückgesetzt, da er sonst im nächsten Schleifendurchlauf sofort wieder den Browser killen würde. Durch das Skript aus dem eben genannten Artikel prüft der Rechner sowieso, ob der Browser läuft und wenn nicht, startet den Prozess. Damit wird nach spätestens 5 Sekunden der Browser neu gestartet und man muss ihn hier nicht starten. Die Datei habe ich xscreensaver-command.pl genannt, nach /usr/local/bin geschoben und in den Autostart in .xsession eingetragen.

Code (Download)

 

my $blanked = 0;
open (IN, "xscreensaver-command -watch  |");
while(<IN>) {
        if (m/^(BLANK|LOCK)/) {
                if (!$blanked) {
                        # Schliesse Browser
                        # Starte Browser neu
                        print "Deaktiviere xscreensaver...\n";
                        system "xscreensaver-command -deactivate";
                        print "Beende Browser...\n";
                        system "killall browser-repat";
                        print "In 5 Sekunden wird der Browser neu gestartet";
                        $blanked = 1;
                 }
        } elsif (m/^UNBLANK/) {
                $blanked = 0;
        }
}

Raspberry Pi als Kiosk mit resourcenschonendem Browser und VESA Mount

Posted on 22. März 2013 Comments

Auf der Arbeit sollte ich einen Raspberry Pi zu einem reinen Service-PC im Kiosk-Modus umwandeln. Dafür habe ich ein VESA kompatibles Gehäuse auf ebay gekauft, das man hinten an den Monitor schrauben kann. Über einen DVI-HDMI Adapter wird das Bild ausgeliefert, dazu noch eine Maus und Tastatur über USB und ein Netzwerkkabel. Anleitungen wie man Raspbian installiert gibt es schon genügend, also überspringe ich mal den ganzen Installations- und Konfigurationspart. An Browsern habe ich Chromium aufgrund des eingebauten Kiosk Modus ausprobiert und dann noch Midori, weil der vorinstalliert ist. Chromium hat schlicht zu viele Resourcen gefressen und Midori hat nicht das geboten, was ich wollte. Ich wollte einen Browser, der absolut idiotensicher nur diese eine Seite anzeigt, kein Adressfeld, kein Quelltext ansehen o.ä.Ich stieß dann irgendwann auf den kiosk-browser von Peter Schultz auf github. Im Grunde sind es nurIMG_20130322_155429

ein paar Zeilen C-Code, die ein Fenster mit GTK+ öffnet und darin ein WebKit-Widget lädt. Das ist übrigens dasselbe Framwork, das auch Chromium benutzt. Zusätzlich hat er noch 2 Signale auf Tasten auf dem Keyboard gemappt, eins für Aktualisieren(F5) und eins um den Vollbildmodus zu verlassenn(F11). Das Aktualisieren habe ich drin behalten, aber da ich keine Notwendigkeit sehe, den Vollbildmodus zu verlassen, diese Zeile Code einfach auskommentiert.
Dann habe ich natürlich noch die Standardwebsite geändert. Mit nodm(s.u.) machte er trotzdem Proleme also habe ich noch folgende Zeilen hinzugefügt um das Bild immer mittig zu halten und in der Größe meines Bildschirms darzustellen:

gtk_window_set_default_size(GTK_WINDOW(window), 1280, 1024);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);

Den vollen Quelltext findet ihr hier: browser-repat.c und aktuelle Versionen zuerst auf GitHub.

Auch die Makedatei hat bei mir nicht funktioniert, ich habe ein Haufen Fehler nach diesem Schema bekommen:

undefined reference to `gtk_XXX

Stattdessen funktionierte bei mir dieser Befehl:

gcc -o browser browser.c $(pkg-config --libs --cflags gtk+-2.0 webkit-1.0)

Schlussendlich habe ich noch xorg und nodm installiert um lightdm bzw. lxde (wegen den ganzen Tastenkombinationen) los zu werden. Dabei habe ich diese Anleitung von nexxylove befolgt.

Die browser-Datei wandert in /usr/local/bin und in ~/.xsession steht nur:

#!/bin/bash
/usr/local/bin/browser

Dann wird noch in /etc/X11/default-display-manager statt /usr/sbin/lightdm einfach /usr/sbin/nodm  eingetragen und in /etc/default/nodm der Wert NODM_ENABLED auf true gesetzt.

OpenVPN TLS Handshake failed auf Port 443

Posted on 4. Februar 2013 Comments

Gerade habe ich den folgenden Fehler bekommen:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed

Passiert ist das, weil ich die Portsperre umgehen wollte und von Port 1194 auf Port 443(also „HTTPS“) umgestellt habe. Dabei habe ich aber vergessen, dass durch die Firewall nur TCP-Verkehr durchgelassen wird(HTTPS geht über TCP). Da OpenVPN aber standardmässig UDP benutzt, bekommt man trotz offenem Port diese Fehlermeldung.

Einfach in der client.conf und der server.conf die Zeile proto tcp einkommentieren und proto udp auskommentieren. Wenn man zusätzlich noch UDP möchte, muss man 2 OpenVPN Instanzen laufen lassen. Das geht natürlich auf die Performance, hilft aber gegen blöde Firewalls.

GPG Fehler beim Spotify Repository unter Ubuntu

Posted on 4. Februar 2013 Comments

Eine Weile lang bekam ich bei einem apt-get update den folgenden Fehler:

W: GPG-Fehler: http://repository.spotify.com stable InRelease:
Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist:
NO_PUBKEY 082CCEDF94558F59

Abhilfe schafft dieser Befehl:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 082CCEDF94558F59

Ausloggen über Konsolenbefehl bei Ubuntu

Posted on 14. Dezember 2012 Comments

Letztens habe ich mich ein bisschen beim Wechsel der Windowmanager verdaddelt. Zum Glück konnte ich mich noch über SSH einloggen und kam dann mit dem folgenden Befehl zurück zur Anmeldung:

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1

(Credits)

How to get facebook back online #facebookdown

Posted on 11. Dezember 2012 Comments

Seems like facebook has some kind of DNS-Problem right now(#facebookdown). To fix this enter the facebook IPs in your hosts-file. To get them, have a look at your DNS Cache with a tool like dig(or use the ones I provide below).

 

Linux

repat@laptop:~$ dig facebook.com

; <<>> DiG 9.8.1-P1 <<>> facebook.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11887
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;facebook.com.            IN    A

;; ANSWER SECTION:
facebook.com.        6010    IN    A    69.171.229.16
facebook.com.        6010    IN    A    173.252.100.16
facebook.com.        6010    IN    A    173.252.101.16
facebook.com.        6010    IN    A    66.220.152.16
facebook.com.        6010    IN    A    66.220.158.16
facebook.com.        6010    IN    A    69.171.224.32

 

So just enter this into your /etc/hosts file:

#vi /etc/hosts

66.220.158.16   facebook.com
66.220.158.16   www.facebook.com


Windows
Windows has a similar file, which is located in %SystemRoot%\system32\drivers\etc\hosts. Where %SystemRoot% is your Windows directory, so most likely C:\Windows.

At least in Windows 7 the file is locked by the system, so unless you have notepad++, which doesn’t care about all this, you have to open your explorer, go to C:\Windows\system32\, right-click notepad.exe and select „start with admin rights“(or something like that…). Then click File/open, go to C:\Windows\system32\drivers\etc and select „all files“ on the right side(see screenshot). Then again open the file and enter the following:

66.220.158.16   facebook.com
66.220.158.16   www.facebook.com

 

 

 

 

MacOS

1. Click on the looking glass icon in the top right corner of the screen
2. Type „Terminal“ and press Enter, a new app called „Terminal“ will appear
3. Don’t get confused by it, just follow the steps
4. Copy this text into your clipboard : echo „173.252.101.16 www.facebook.com“ | sudo tee -a /etc/hosts
5. Paste it into the „Terminal“ window and press Enter
6. You will be prompted to enter your password (it will not show up on the screen, don’t worry about it), press Enter again when you finished typing your password.
7. The line „173.252.101.16 www.facebook.com“ will appear on the screen.
8. Done!

Mauszeiger unsichtbar machen unter Linux

Posted on 9. November 2012 Comments

Diese Methode funktioniert auf jeden Fall auf dem Raspberry Pi mit Debian 7.0 und Ubuntu 12.04:

Installiert unclutter

sudo apt-get install unclutter

Dann mit den Standardparametern starten:

unclutter ­grab ­visible &

Sobald man den Mauszeiger wieder bewegt ist er wieder da. Für weitere Möglichkeiten siehe:

man unclutter

Sound funktioniert nach alsa-base Installation nicht mehr mit mpg123

Posted on 6. November 2012 Comments

Beim Raspberry Pi hab ich eben das Paket ein apt-get upgrade durchgeführt. Nicht installiert wurde dabei das Paket alsa-base. Als ich dieses manuell per apt-get install installiert hab, hat er dafür linux-sound-base runtergeschmissen. Weil ich mpg123 vorher installiert hatte, konnte ich jetzt keine Musikdateien mehr abspielen. Abhilfe hat eine Neukonfiguration von mpg123 geschaffen:

sudo dpkg-reconfigure mpg123

Das sollte eigentlich auch bei allen anderen Programmen funktionieren.

Die Fehlermeldung war:

pi@raspberrypi ~ $ mpg123 toto.mp3
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
exec of JACK server (command = "/usr/bin/jackd") failed: No such file or directory
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel

Ging ewig so weiter…

Bildschirm in den Standby-Modus fahren über CEC via HDMI

Posted on 2. November 2012 Comments

Das mit dem Bildschirm verdunkeln und das HDMI Signal kappen war ja schon eine nette Sache aber Bildschirme haben ja auch nicht umsonst eine Standby Funktion. Diese wird normalerweise aktiviert, wenn man auf den Power-Off Knopf auf der Fernbedienung drückt. Manche Bildschirme können das auch zeitgesteuert oder beim Rausziehen eines Kabels (sollte hier auch aktiviert sein). Wenn man einen Bildschirm über HDMI angeschlossen hat und beide Geräte es unterstützen, kann man über das Kabel ein paar Steuersignale über die CEC-Schnittstelle senden. Die Implementierung von CEC heißt bei den Herstellern unterschiedlich, man findet es also ggf. im Monitor Menü nicht unter diesem Namen. Jetzt wollte ich ja wie gesagt mit einem Raspberry Pi den Bildschirm ein- und ausschalten. Dafür kann man den cec-client benutzen. Ich habe dafür die neuste Version(1.9.0) von Christoph vom Blog selfprogramming als .deb runtergeladen und installiert. Eventuelle Versionen, die über apt-get installiert wurden, müssen vorher deinstalliert werden, ebenso solche, die über github installiert wurden. Zusätzlich braucht man noch ein paar packages, sonst bekommt man folgende Meldung:

libcec.so.1: cannot open shared object file: No such file or directory

Also die folgenden packages installieren:

sudo apt-get install libraspberrypi-dev libplist1 libmicrohttpd10 libtinyxml2.6.2 libyajl2 libssh-4  libmysqlclient18 liblzo2-2 libfribidi0 libcurl3-gnutls liblockdev1

Eine Auflistung der CEC-fähigen devices ergibt folgendes:

pi@raspberrypi$ cec-client -l
Found devices: 1
device: 1
com port: RPI
firmware version: 1
type: Raspberry Pi

Ausschalten bzw. Standby funktioniert folgendermaßen:

echo "standby 0" | cec-client -s

Dabei steht der -s für single, also einfache Ausführung, damit der Client danach nicht weiter verbunden bleibt.

Anschalten funktioniert jetzt wie man sich es schon fast denken könnte:

echo "on 0" | cec-client -s