Autostart OpenSSH mit Public Keys unter Windows XP und Windows 7 mit cygwin und Userrechten

Posted on 9. August 2013 Comments

Diese YouTube Video hat mir sehr geholfen: Install OpenSSH in Windows 7

Die Rechte waren allerdings schon gesetzt und sie vergisst einen Befehl. Wer sich das nicht alles anhören möchte kann einfach auch die Anleitung(lokale Kopie) befolgen.

update: Es könnte sein, dass /var/empty muss dem root/Administrator gehören muss:

chown Administrator /var/empty

Jetzt gibt es 2 Probleme:

1. Es mangelt an Userrechten zum Starten des Services mit dem User-Account

2. Mit dem vorinstallierten Dienst funktioniert aufgrund fehlender Rechte das PublicKey Verfahren zur Anmeldung nicht.
Die Lösung ist, den Windows Dienst nicht zu verwenden. Dazu lässt sich mit dem Befehl /usr/sbin/sshd -D der SSH-Daemon starten und dann funktionieren auch alle in /home/username/.ssh/authorized_keys eingetragenen Public Keys(Das Verzeichnis muss vorher erstellt werden). Wenn man diesen Schritt vergisst bekommt man ein Permission denied. Natürlich muss man auch noch in /etc/sshd_config die Parameter RSAAuthentication yes und PubkeyAuthentication yes einkommentieren bzw. PasswordAuthentication no
einstellen.

Nun muss man also diesen Befehl irgendwie als Dienst installiert bekommen. Leider muss man den Dienst als Administrator laufen lassen. Dabei helfen die Dateien srvany.exe und instsrv.exe (Alternative, s.u.), die man bei Microsoft findet. Davon ausgehend, dass sich die beiden Dateien in C:\cygwin befinden kann man einen Dienst folgendermaßen installieren:

C:\cygwin\instsrv.exe opensshd c:\cygwin\srvany.exe

Dann habe ich die Datei C:\cygwin\startopensshd.cmd noch erstellt und folgendes reingeschrieben:

C:\cygwin\bin\mintty.exe -e "/usr/sbin/sshd.exe"

mintty ist die Shell von Cygwin, die man bekommt, wenn man auf dem Desktop das Symbol anklickt.

Unter dem Registry-Key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\opensshd findet man erstellt man jetzt den Key Parameters. Dort erstellt man einen String(REG_SZ) mit dem Namen Application. Dieser enthält den Pfad zu C:\cygwin\startopensshd.cmd.

Damit jetzt auch unter User der Service mit Administrator-Rechten gestartet wird, muss man den Service nicht mit dem lokalen Account starten, sondern als Administrator unter der Diensteverwaltung(services.msc im cmd-Fenster) den Administrator eintragen:

opensshd_service_adminkonto

 

Bei Windows 8.1 funktioniert der Ansatz mit instsrv.exe und srvany.exe nicht mehr. Also habe ich den Dienst unter services.msc wieder deinstalliert bzw. deaktiviert.

Danach kann man mit dem NSSM(Non-Sucking Service Manager) dieselbe startopensshd.cmd von oben als Dienst installieren. Vorher muss man die nssm.exe in den gewünschten(z.B. C:\cygwin) Ordner verschieben, weil sie ja von dem Service referenziert wird.

nssm install opensshd

Es öffnet sich ein Fenster, in dem die startopensshd.cmd eingetragen werden kann.

Gerade auf diesem Weg sollte man aber zusehen, dass man ordentliche Updates hinbekommt, sowohl von cygwin als auch von OpenSSH.

update: wenn man die 64-Bit Version installiert funktioniert das auch, allerdings heißt das Verzeichnis dann C:\cygwin64.

Grub installieren ohne Linux mit Wechsel der Startreihenfolge unter Windows

Posted on 9. August 2013 Comments

GRUB ist ein Bootloader, der häufig für Linuxsysteme zum Einsatz kommt. Besonders praktisch ist er für Dual-Boot Systeme, wenn man z.B. noch die Windows Installation für ein paar Programme braucht und sonst auf Linux arbeitet oder auch andersherum, kann man beim Start des Computers auswählen, welches System starten soll. Oder unterschiedliche Linux Distributionen. Oder oder oder…halt auch 2 Windows Installationen. Dafür braucht es allerdings kein Linux, da man GRUB natürlich auch ohne ein Linux läuft.

In diesem Beispiel habe ich erst Windows XP und Windows 7 installiert. Wie das geht, ohne dass die beiden sich in die Quere kommen, habe ich in einem anderen Blog-Eintrag geschrieben. Diese Anleitung geht davon aus, dass XP und 7 bereits installiert sind.

1. Linux Live CD downloaden.

Ich habe Ubuntu genommen, die Live-CD bekommt man auf der Website. Einfach starten und den Live Modus auswählen.

 

2. GRUB 2 deinstallieren

Für dieses Beispiel werde ich GRUB 1/GRUB Legacy verwenden. Es basiert auf einer simplen Textdatei, die übersichtlich und gut editierbar ist.

sudo apt-get remove grub*

3. GRUB 1 installieren

sudo apt-get install grub

4. ext2 Partition erstellen

gparted aus dem Startmenü wählen. Bei der Installation von Windows XP und Windows 7 habe ich so viel Platz gelassen, dass man hinter den beiden Partitionen noch eine z.B. 256MB große Partition erstellen kann, aufgrund der verfügbaren Windows Tools zum Lesen bzw. Schreiben von Linux Partionen nehme ich hier ext2. Ist die Partition erstellt, gebe ich dieser Partition das boot-flag.

 

5. GRUB auf dieser Partition installieren

Erstmal die neu erstellte Partition mounten. Nach Windows XP(/dev/sda1) und Windows 7(/dev/sda2) ist das hier logischerweise /dev/sda3. Gemountet wird sie hier z.B. nach /mnt.

sudo mount /dev/sda3 /mnt

Jetzt kommt die eigentliche Installation, die GRUB in den MBR schreibt und damit Windows 7 dort überschreibt. Das root-directory flag gibt an, wohin GRUB die Dateien schiebt. /dev/sda ist das Gerät(!) auf dem der MBR geschrieben wird, hier also nicht die Partition angeben!

sudo grub-install --root-directory=/mnt /dev/sda

Fertig 🙂 Jetzt muss man nur noch die Datei /mnt/boot/grub/menu.lst erstellen. Man kann sich eine default Variante erstellen mit folgendem Befehl

sudo update-grub

Ihr findet dann in /boot/grub/menu.lst eine Vorlage, die man erstmal 1:1 kopieren kann in /mnt/boot/grub/menu.lst.

Um Windows XP und Windows 7 nebeneinander zu booten muss man wie im letzten Blog Artikel erklärt die hidden Flags setzen. Für Sicherungen, bei denen man ganze Festplatten sichert ist es aber nötig die hidden flags beide zu entfernen. Hierfür habe ich mir einen Dummy Eintrag gebastelt, der an dritter Stelle steht. Den Kernel gibt es natürlich auf meiner Installation nicht und sollte man versuchen diesen Eintrag zu starten gibt er eine Fehlermeldung aus. Beim Start von Windows XP muss man jeweils Windows 7 ausblenden und anders herum. Meine menu.lst sieht(im relevanten Teil)  so aus:

title        WindowsXP
hide        (hd0,1)
unhide        (hd0,0)
root        (hd0,0)
makeactive
savedefault
chainloader    +1

title        Windows7
hide        (hd0,0)
unhide        (hd0,1)
root        (hd0,1)
makeactive
savedefault
chainloader    +1

title        Dummy
unhide        (hd0,0)
unhide        (hd0,1)
root        (hd0,0)
kernel        /boot/memtest86+.bin

 

Natürlich gibt es hier auch die Möglichkeit neue Einträge im GRUB hinzuzufügen. Wenn man die User aussperren möchte, legt man also ein Passwort fest. Dies am besten nicht im Klartext; Grub bietet hier allerdings nur MD5 an.

Benutzt z.B. dieses Perl Skript von mir um euer Passwort lokal in einen MD5 Hash umzuwandeln.

Dann kommt einfach dieser Eintrag hinzu

password --md5 $1$MD5HASH

6. Wechsel zwischen Windows XP und Windows 7 als default Eintrag.

Für das Umschalten zwischen Windows Installationen habe ich 2 Batchdateien erstellt: bootwinxp.bat und bootwin7.bat. Beide befinden sich in C:\Windows\system32, also im PATH. Wie man ext2 zum Schreibenrechten mountet erfahrt ihr in meinem anderen Blog-Eintrag. Ich gehe einfach mal davon aus, dass die eben erstellte GRUB-Partition auf X:\ gemountet ist. Der Einfachheit halber mache ich dort keine komplizierten Textersetzungsbefehle sondern erstelle einfach eine menu.xp und eine menu.7 Datei auf dieser Partition. Diese enthalten entweder einen anderen Wert für default in menu.lst oder eine andere Reihenfolge, d.h. jeweils Windows XP oder Windows 7 steht zuerst in der Datei(default ist standardmässig auf 0). Diese beiden Dateien überschreiben dann mit

COPY X:\boot\grub\menu.xp X:\boot\grub\menu.lst

bzw.

COPY X:\boot\grub\menu.7 X:\boot\grub\menu.lst

in bootxp.bat bzw. boot7.bat einfach nur die aktuelle menu.lst und beim nächsten Bootvorgang wird dann das jeweilige Betriebsystem gebootet. Wenn man mehrere Rechner verwaltet, kann man diese Batch Datei z.B. auch über SSH aufrufen.

Liste von Programmen gegen Uberwachung

Posted on 1. Juli 2013 Comments

Alle Programme setzen auf Verschlüsselung und die meisten zusätzlich noch auf Dezentralität, so dass es keinen Betreiber gibt, der ggf. mithören könnte, wenn es keine Ende-zu-Ende Verschlüsselung gibt. Sie sind kostenlos und OpenSource in irgendeiner Art und Weise(außer anders gekennzeichnet).

update: jemand hat hier aufgrund der ganzen #Prism und #Tempora Geschichte eine ziemlich vollständige Liste zusammengestellt: prism-break.org

update2: Der Artikel ist von 2013, ggf. sind die Informationen veraltet.

Sprache

SRTP/ZRTP

  • RedPhone (Android), update: heisst jetzt Signal und ist auch für iOS verfügbar
  • Jitsi (Linux, Windows, MacOS)
  • Skype sollte man als NICHT SICHER ansehen

 

Text/Chat/Mail

OTR

GPG/OpenPGP

Misc

  • AES Verschlüsselung für SMS: BlackSMS  (iOS, Achtung: nicht OpenSource)

 

Dateiverschlüsselung

  • TrueCrypt (Linux, MacOS, Windows)
    • update: TrueCrypt wird nicht mehr aktiv weiterentwickelt, stattdessen kann man den Nachfolger VeraCrypt benutzen (danke, Sophie)
  • LUKS (Linux)
  • ownCloud (in der Cloud, s. unten)

 

Cloud

  • owncloud (PHP, MySQL/SQLite + moderner Browser)

 

Browser/Surfen

Tor

Misc

  • i2p (Linux, MacOS, Windows)

 

VPN

 

Social Networks/Microblogging

 

Misc

 

to be continued…

Weiterlesen

Scuttle Bookmarks in Owncloud App

Posted on 21. Juni 2013 Comments

Ich habe ein kleines PHP-Skript geschrieben, was aus einer Scuttle Installation die Bookmarks ausliest und in die Owncloud Bookmark App einfügt.

In der jetzigen Version wird nur MySQL (noch kein SQLite) unterstützt und aus  einem mir nicht erklärlichen Grund funktionieren die Tags nicht. Vielleicht kommt ja jemand dahinter.

Den Quellcode findet man auf github.

Alternativen zu movie2k.to

Posted on 31. Mai 2013

 

Findet ihr in meinem Artikel Alternativen zu kino.to.

update: movie2k.to scheint als movie4k.to wieder da zu sein. Unter „F**k the police“ findest man folgenden Text:

„[…]Ihr könnt die Willen der Menschen nicht unterdrücken! Geht eine Seite offline, kommen in den nächsten Tagen fünf neue die deren Platz einnehmen wollen. Ist es nicht an der Zeit etwas an dem aktuellen Geschäftsmodell zu ändern und den Einfluss der neuen Medien zu akzeptieren?[…]“

 

update2: auch hier habe ich das Problem mit Google Adsense Richtlinien, deswegen sind die Kommentare ausgeschaltet. Schickt mir gerne eine E-Mail oder kontaktiert mich auf anderem Wege

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;
        }
}

Mit Arduino und Android 434MHz Funk Steckdosen schalten

Posted on 10. April 2013 Comments

Schon lange wollte ich die Funksteckdosen wieder hervorräumen und mit meinem ebenfalls schon eingestaubten Arduino Uno (rev 3)und einem 434MHz Sender von watterot wieder in Gange bringen. Das Ganze gestaltet sich aufgrund der RCSwitch Library relativ einfach. Ich benutze hier im Gegensatz zum homecontrol4me-Projekt (mit kostenpflichtiger Android App) die Arduino IDE 1.0 aus den Ubuntu Repositories. Das hatte zur Folge, dass man den Beispielcode etwas anpassen muss. Dazu muss man aber auch sagen, dass ich hier keine Sicherheit eingebaut habe, jeder der die (interne) IP vom Arduino kennt, kann HTTP-Requests absenden und damit wild meine Geräte an- und ausschalten, NAT ist ja nicht wirklich ein Sicherheitsfeature.

Arduino

Sketch: Download (github)

Weil Arduino 1.0 die neuen libraries enthält muss für Server immer EthernetServer und für Client immer EthernetClient geschrieben werden. Ausserdem müssen die beiden Dateien EthernetServer.h und EthernetClient.h included werden. Am besten kann man das mit Strg+F(Suchen+Ersetzen) machen.

Die Funktion httpResponseHome() stellt die Website dar. Im Grunde bräuchte man das nicht, wenn man nur die Android App benutzen möchte.

 

Android

Android-Projekt für Eclipse: Download (github)screenshot-lichtsteuerung

Im Grunde muss man nur HTTP-Requests absetzen, die /?1-On usw. hinter der IP stehen haben. In Android dürfen keine langen Operationen, also hier Netzwerkverbindungen, in der MainActivity aufgebaut werden. Dafür habe ich die Klasse Network.java geschrieben, welche über einen AsyncTask Threads mit den HTTP-Requests startet. Weil sich das bei Lampen anbietet, habe ich ToggleButtons genommen. Diese haben das Attribut  android:onClick=“onToggleButton1Clicked“. Für jeden dieser Button habe ich eine entsprechende Methode in der mainActivity.java, die diesem Schema folgen. update: weil es manchmal hakte, hab ich eine loop eingebaut, die die Requests an die Network-Klasse drei mal sendet. Das löst zwar nicht das Problem(was immer es war), aber es funktioniert.

public void onToggleButton1Clicked(View v) {

boolean on = ((ToggleButton) v).isChecked();

        if (on) {
            loop(LICHT1ON);
        } else {
            loop(LICHT1OFF);
        }

 

In Requests.java finden sich ein Haufen Strings nach dem Schema:

public static final String IP = "http://192.168.1.42/";
public static final String LICHT1ON = IP + "?1-on";

Da ich den Code hier sehr simpel (und damit natürlich auch unsicher) gehalten habe, war’s das auch schon. Den Arduino und den Sender habe ich dann in eine Box hinter den Schrank gestellt und ein altes Netzteil zur Stromversorgung benutzt.

arduino-lichtsteuerung

Credits
Den Async Task Code habe ich (leicht editiert) von Konstantin Burov von stackoverflow.com.

Den Code für die ToggleButtons habe ich aus der Developer API von Google.

Der Arduino Code stammt überwiegend von RCSwitch aus der Datei /examples/Webserver/Webserver.pde. Ich habe die oben genannten Anpassungen an Arduino 1.0 vorgenommen, mal abgesehen von der Anpassung an meine Steckdosen.

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.

Bei Perl unter Windows 7 fehlt Tk und lässt sich nicht über cpan installieren

Posted on 7. Februar 2013 Comments

Die neue Perl Version enthält aus irgendeinem Grund Tk nicht (mehr?) standardmässig. Perl schlägt dann vor Tk mit dem folgendem Befehl nachzuinstallieren:

cpan -i Tk

Das funktioniert aber nicht, weil u.a. keine Compiler und Linuxtools wie make installiert sind. Also werden diese automatisch heruntergeladen. Allerdings schlägt die Installation trotzdem mit dem folgenden Ausgaben fehl:

rc -fo tk.res -r -i . -i mTk\win\rc mTk\win\rc\tk.rc
'rc' is not recognized as an internal or external command,
operable prgram or batch file.
dmake.exe: Error code 129, while making 'tk.res'
dmake.exe: Error code 255, while making 'pTk\libpTk.a'.

Was jedoch wunderbar und schnell funktioniert hat ist der folgende Befehl:

ppm install Tk