Debian Package erstellen – Quick&Dirty

Friday, 18. September 2009

Zunächst erstellt man folgende Verzeichnisstruktur.  Wichig ist ein Ordner namens “debian“, in diesem werden die Unterordner wie folgt erstellt:

debianpackage1

Das Verzeichnis DEBIAN/ ist Pflicht (und sollte im weiteren korrekterweise noch mehrere Dateien beinhalten, aber wir halten uns an die minimal Methode)

Das Verzeichnis usr/ ist bereits die Verzeichnisstruktur mit den selbst erstellten Dateien wie sie am System nach der installation aussehen sollte. “debian” ist hier quasi das root (/) Verzeichnis.

Nun ist noch der Inhalt der Datei “control” von hoher Wichtigkeit und sollte in etwa das Folgende beinhalten.

Package: revvnc
Version: 0.1
Section: x11
Priority: optional
Architecture: all
Depends: xtightvncviewer, x11vnc, python
Maintainer: xapient <x@gmx.net>
Description: Reverse-VNC GUI for Viewer and Server
 This script provides an easy to use userinterface for tightvnc and x11vnc

Ist die Verzeichnisstruktur erstellt und mit dem eigenen Programm befüllt kann man in der Konsole bereits das .deb Paket erstellen. Hierfür bedient man sich folgender Kommandozeile:

dpkg-deb --build debian
mv debian.deb revvnc_0.1_all.deb

Das Paket namens revvnc_0.1_all.deb wurde erstellt und kann mit einfachem Doppelklick installiert werden 😀

PS: Es ist anzunehmen das Debianmaintainer mir dieses Paket nachschmeissen würden. Ich werde das Howto sobald ich wieder Zeit finde verfeinern. Es fehlen noch einige WICHTIGE Aspekte (owner, permissons, fileextension, copyrightfile, manpage, changelog, etc. müssen noch bedacht werden)

Debian Package erstellen – auf dem Weg zur Besserung

An dieser Stelle ist es wichtig die Pakete “fakeroot” und “lintian” vorzustellen. Beides findet man über den Paketmanager und dient der Verifizierung und Erstellung ordentlicher Debianpakete. Lintian hilft Fehler aufzuzeigen und die Richtlinien einzuhalten – Fakeroot hilft Dateibesitzer und Zugriffsrechte in die richtige Richtung zu biegen.

fakeroot dpkg-deb --build debian | lintian debian.deb
mv debian.deb revvnc_0.2-1_all.deb
sudo dpkg -i revvnc_0.2-1_all.deb

Geht man wie oben vor, so werden die Dateien im Paket dem Benutzer “root” zugeteilt (wie es sich gehört) und das Paket “debian.deb” sogleich von Lintian auf Schwachstellen überprüft. Hat man bis jetzt das HowTo befolgt so wird Lintian an vielen Stellen protestieren. Zunächst ist es vielleicht hilfreich sich die Verzeichnisstruktur eines Paketes anzusehen, welches von Lintian abgesegnet wurde.

paket1

Wie man unschwer erkennen kann sind einige Dateien hinzugekommen. “changelog.Debian.gz” und “revvnc.1.gz” (die manpages müssen für jede Datei im Verz. ./usr/bin/ vorhanden sein) sind mit gzip komprimiert – dies wird vorrausgesetzt! # gzip -9 revvnc.1 hilft hier z.B.

Die Scripts im Verzeichnis ./usr/bin/ sollten keine Dateiendung besitzen und die Rechte 0755 zugewiesen bekommen. Lintian wird hier für jede Datei im Paket sehr genaue Auskünfte geben und dem geneigten Paketersteller die Details abnehmen. Auch die Manpages, die Copyrightdatei und die Changelogdatei sollten einem genauen Syntax folgen. Auf dieser Seite erhält man zu jeder Lintianmeldung Information: http://lintian.debian.org/tags.html

Den ungefähren Syntax der wichtigsten Dateien kann man sich auf seinem eigenen System in den ensprechenden Verzeichnissen von anderen Applikationen ablesen bzw. das im Screenshot erstellte Paket genauer begutachten:  http://flexible.xapient.net/?p=234

🙂 🙂

Viel Erfolg!

pyPhonelog – laden mehrerer Instanzen verhindern

Thursday, 17. September 2009

wer shr-unstable bzw. mein image welches auf diesem basiert verwendet (link) hat sicherlich schon bemerkt dass “notifier” bei einem missed call auf klick den phonelog öffnet.. und zwar jedesmal einen neuen, selbst wenn dieser bereits offen ist..

da der phonelog seine tabellen refreshed wenn man zwischen diesen hin und her klickt ist aber ein langsamer neustart der applikation völlig zeitraubend und vorallem überflüssig!!  wie bekomm ich “phonelog” dazu sich nicht mehrmals zu starten? so zb.: —>

import os
from subprocess import Popen, PIPE

pids = Popen("/bin/ps -e x | /bin/grep /usr/bin/phonelog | /bin/grep -v grep | /bin/sed -e 's/.*bin.//'", shell=True, stdout=PIPE).communicate()[0].splitlines().count("phonelog")

if pids == 2:
 pidoflog = os.getpid()
 pidoflog = str(pidoflog)
 print "pyphonelog is already running!"
 os.system("kill " +pidoflog)

diesen code einfach ganz zu beginn der datei /usr/bin/phonelog einfügen .. das wars.. (vorsicht mit den indents.. da ist python happig)

eine version meiner “phonelog” datei gibt es hier : phonelog
diese datei müsste ausführbar gemacht und in das verzeichnis /usr/bin verschoben werden.

viel spass allen neo fans mit dem freien telefon!!

Linux … wie alles begann

Thursday, 17. September 2009

The Origins of Linux – Linus Torvalds – auf YouTube.

Der Titel ist eigentlich selbsterklärend. Für alle die wissen wollen, wie Linux entstand, ein sehr empfehlenswertes Video.
Have fun! 😉

Reverse VNC GUI – Server&Client tbc.

Thursday, 17. September 2009

Nachdem ich vor einiger Zeit die Idee des “reverse” VNC zu schätzen gelernt habe, da bei dieser variante der Supporter, nicht der Hilfesuchende eingehende Verbindungen zulassen muss (und somit die Probleme mit dem Portforwarding aus der Welt sind), habe ich mich nun entschlossen ein kleines GUI für VNC zu schreiben.

Outdated !!!! Der folgende Abschnitt ist veraltet. Der aktuelle Stand der Mini-Applikation befindet sich am Ende des Beitrags.

Das Ganze ist in Python und QT (anm. qt4.5 required) geschrieben.. (sorry GTK-Freunde pyQT ist einfach eine “winning combination”)

vncviewer

Das GUI für den Viewer (linux only) setzt vorraus, dass “xtightvncviewer” installiert ist und bietet Zugriff auf dessen wichigste Kommandozeilenparameter.

Das GUI für den Server benötigt “x11vnc” (die Abhängigkeiten sollten vom Paketmanager automatisch gelöst werden)

Als kleines Zusatzfeature habe ich die Option eingebaut an den VNC Server (x11vnc) ein Signal zu senden, welches diesen, sofern der ebenfalls programmierte Daemon läuft, dazu veranlasst die reverse VNC Verbindung zu initialisieren ohne weiteres Zutun des Hilfesuchenden. Momentan sind Server und Viewer noch als zwei getrennte Applikationen angelegt- vl. werde ich das in naher Zukunft in ein einziges UI zusammenfassen.

Und hier für alle die das Programm mal ausprobieren wollen:
(link zur neuesten Version am Ende des Blog-Eintrags)

revvnc_0.1_all.deb
revvnc_0.1.tar.gz

Feedback ist natürlich erwünscht und falls jemand was vom Programmieren versteht wären Verbesserungen natürlich auch gern gesehen (das Ganze ist zugegebnermassen von der “inneren” Schönheit her mehr “proof of concept” als formschöne Programmierung – und zumindest die Möglichkeit mit “passwort” zu arbeiten sollte noch implementiert werden 🙂 )

Update 21 Sept. 2009

Viewer und Server finden sich nun im selben übersichtlichen GUI wieder. Zudem wurden ein paar Bugs beseitigt und diverse Abläufe verbessert. Der revvncserverd lässt sich über die Datei /etc/revvncserverd.conf auch dazu bringen beim Bootvorgang automatisch zu starten (startserver = True)

Download:
revvnc_0.3-1_all.deb
revvnc_0.3-1_all.tar.gz

Update 23 Sept. 2009

revvncpasswdDas GUI bietet nun die Möglichkeit ein Passwort für den Server zu definieren. Darüber hinaus werden Passwort, Hostname und Port auf Gültigkeit überprüft, die Anzeige eines bereits laufenden Prozesses wurde verbessert (es wird nun wirklich überprüft ob ein vnc Prozess läuft ^^)

Es gibt ein window Icon und der Serverdaemon (der von Anfang an eher ein Konzeptversuch als sinnvoll war) ist rausgeflogen.. das GUI erlaubt ohnehin auch normalen Server-Client betrieb.

Download:
revvnc_0.5-1_all.deb
revvnc_0.5-1_all.tar.gz

Update 14 Feb. 2010

vncneu Nach erneutem Testen musste ich einen schweren Fehler bemerken als der VNC Server im Normalbetrieb versucht hat den Viewer zu starten. Darüber hinaus habe ich die KDE Abhängigkeit der “kled” beseitigt und durch eine Statuszeile ersetzt.

Für das einfache Weiterbearbeiten und Untersuchen des Sourcecodes habe ich wie immer das Original “debian” Verzeichnis vor der Paketerstellung hochgeladen sowie ein einfach zu installierendes debian-Paket für jene die das nur mal kurz ausprobieren wollen.

Download:
revvnc_0.5-2_all.tar
revvnc_0.5-2_all.deb


uBook Theme – Gnome

Wednesday, 16. September 2009

Das ist meine momentane Theme-Komposition mit ein paar Modifikationen hie und da. Zum Großteil funktioniert das Ganze recht gut, ein paar Feinheiten würde es noch auszubessern geben. Als Login-Screen verwende ich Humanoid.  Hier aber erstmal einige Screenshots:

uBook01

Bild vergrößern

uBook02

Bild vergrößern

uBook03

Bild vergrößern

Das Hintergrundbild gibt es auf Flickr (DOWNLOAD).

Die Dateien für das Theme von Gtk 2 (Metal) und Metacity (Humanoid OS X) sowie das Icon Theme (Royal Blue) habe ich alle in einer Datei verpackt (DOWNLOAD), die man ganz einfach per “Erscheinungsbild” – Dialog installieren kann, indem man das Archiv in das Fenster hinein zieht, oder es per “Installieren” einrichtet.

So weit so gut, hat man das Themenpaket erstmal installiert und eingerichtet, ist ein nicht unwesentlicher Teil der Arbeit getan, doch es bleibt noch mehr zu tun.

Terminal:

Zuerst öffnet man das gnome-terminal und geht auf “Bearbeiten” => “Profileinstellungen”. Dort wält man unter “Hintergrundtyp” die Option “Hintergrundbild” und klickt auf das kleine Ordnersymbol. Im Ordner “$HOME/.themes/Metal-0.6/gtk-2.0/Menu-Menubar/” wählt man das Bild “menubar.png”. Auf Wunsch kann man auch noch Titel und Menüleiste anpassen.

Da das Terminal zwar ein Hintergrundbild verwenden kann, dieses aber nicht automatisch in der Größe anpasst, muss man den Aufruf des Terminals bearbeiten. Dazu verwendet man den Menüeditor und sucht sich den Terminal Eintrag, der bei Ubuntu unter “Anwendungen” => “Zubehör” zu finden ist. Als Befehl empfehle ich folgenden:

gnome-terminal --geometry=105x25+200+200

Panel:

Zuerst brauchen wir eine Datei, die die Farbe des Panels festlegt. Dazu erstellt man in seinem Home Verzeichnis die Datei “.gtkrc-2.0”, in die man folgende Zeilen einträgt:

#Schriftfarbe im Panel
style "panelColor" {
fg[NORMAL] = "#FFFFFF" # Farbe Weiß
}
widget "*PanelWidget*" style "panelColor"
widget "*Applet*" style "panelColor"
widget_class "*PanelApplet*" style "panelColor"

Damit auch der Panel dazu passt rechts-klickt man auf ihn und wählt “Eigenschaften” => “Hintergrund”. Dort wählt man als Farbe tief schwarz und als Stil “Deckend”.

Ubuntu auf dem MacBook

Tuesday, 15. September 2009

Passend zu jeder MacBook Version gibt es auf der Ubuntu Community Seite eine große Sammlung an maßgeschneiderten Hilfe-Wikis. Für MacBooks der 2. Generation ist beispielsweise hier Hilfe zu finden, auch passend zur jeweils aktuellsten Ubuntu Version.

In dem Wiki  ist eigentlich alles erklärt, was man braucht, um ein Ubuntu voller Vergnügen auf einem MacBook laufen lassen zu können. Den Punkt “Power Saving” kann man in etwas ausführlicher Form auf unserem Blog nachlesen: “Energieverbrauch reduzieren“.

Ein weiterer Punkt, den ich etwas angepasst habe ist die Touchpad Konfiguration. Meine Einstellungen haben das Tapping deaktiviert (was man zusätzlich noch unter System => Einstellungen => Maus -> Touchpad -> “Aktiviere Mausklicks mit dem Touchpad” einstellen bzw. abhaken muss) und die Geschwindigkeit sowie Beschleunigung sind etwas gedrosselt damit es sich etwas weicher und kontrollierter navigiert (mMn). Ansonsten hat es alle Gustostücken, wie etwa 2-Finger-Scrollen, 2-Finger-Klicks = rechte Maustaste, 3-Finger-Klicks = mittlere Maustaste. Meine “/etc/hal/fdi/policy/appletouch.fdi” sieht folgendermaßen aus:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.touchpad">
<match key="info.product" contains="appletouch">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.SHMConfig" type="string">true</merge><merge key="input.x11_options.VertEdgeScroll" type="string">false</merge>
<merge key="input.x11_options.HorizEdgeScroll" type="string">false</merge>
<merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>
<merge key="input.x11_options.HorizTwoFingerScroll" type="string">false</merge>

<merge key="input.x11_options.VertScrollDelta" type="string">20</merge>

<merge key="input.x11_options.RTCornerButton" type="string">false</merge>
<merge key="input.x11_options.RBCornerButton" type="string">false</merge>
<merge key="input.x11_options.LBCornerButton" type="string">false</merge>
<merge key="input.x11_options.LTCornerButton" type="string">false</merge>

<merge key="input.x11_options.TopEdge" type="string">0</merge>
<merge key="input.x11_options.LeftEdge" type="string">0</merge>
<merge key="input.x11_options.RightEdge" type="string">1100</merge>
<merge key="input.x11_options.BottomEdge" type="string">800</merge>

<merge key="input.x11_options.FingerLow" type="string">5</merge>
<merge key="input.x11_options.FingerHigh" type="string">15</merge>

<merge key="input.x11_options.ClickFinger1" type="string">1</merge>
<merge key="input.x11_options.ClickFinger2" type="string">3</merge>
<merge key="input.x11_options.ClickFinger3" type="string">2</merge>

<merge key="input.x11_options.MinSpeed" type="string">0.5</merge>
<merge key="input.x11_options.MaxSpeed" type="string">2.3</merge>
<merge key="input.x11_options.AccelFactor" type="string">0.13</merge>

<merge key="input.x11_options.PalmDetect" type="string">true</merge>
</match>
</match>
</device>
</deviceinfo>

Energieverbrauch reduzieren

Tuesday, 15. September 2009

Speziell auf Notebooks ist es immer wieder lästig, wenn das geliebte Linux stromhungriger als konkurrierende Betriebssysteme ist. Mit einigen Tricks und Kniffen kann man aber noch einiges an Stromverbrauch reduzieren. Da es im Internet eine Menge an verschiedenen Vorschlägen gibt, möchte ich einige davon hier zusammenfassen, vor allem um nicht immer auf unzähligen Seiten nachlesen zu müssen. Getestet wurde auf einem MacBook2.1 unter Ubuntu 9.04 x64.

Grundlagen:

Jeder Dienst, Daemon oder Prozess, der im Hintergrund lauft, jedes Stückchen Hardware das verwendet wird verbraucht Strom. Daher sollte man selten verwendete Dienste schon am Starten hindern und sie nur bei Bedarf aktivieren. Daher gilt zu aller erst: nicht benötigte Programme schließen, Bildschirmhelligkeit verringern, nicht benötigte Hardware deaktivieren und USB-Geräte abstecken.

Dienste am Starten hindern:

Bluetooth ist so ein Kandidat, der bei mir selten in Verwendung ist, daher wird er gar nicht erst gestartet. Um das ganze etwas komfortabel zu gestalten, installiert man das Paket “sysv-rc-conf“:

sudo apt-get install  sysv-rc-conf

In der Konsole startet man es dann, wieder mit Root-Rechten, und entfernt alle [X] bei der Zeile “bluetooth”, indem man den Cursor mit den Pfeiltasten darüber navigiert und auf die Leertaste drückt. Das Verfahren kann man bei jedem nicht benötigten Dienst anwenden, somit hat man schonmal einen recht sauberen Start hingelegt.

PowerTop für Intel Prozessoren:

Ein sehr hilfreiches Tool für alle, die eine Intel CPU besitzen. Es wird ganz einfach per Paketverwaltung installiert (oder von lesswatts.org heruntergeladen) und mit Rootrechten ausgeführt:

sudo apt-get install powertop
sudo powertop

Möchte man es nicht immer erst aufrufen und durchlaufen müssen, so kann man die Befehle, die es verwendet, per Copy&Paste in  einer Textdatei sammeln. Hat man eine Samlung, mit der man zufrieden ist, kann sie nun auf zwei Arten weiter verwenden:

  1. Eine ausführbare Datei daraus machen, die per Menü aufgerufen werden kann
  2. Direkt in die Datei “rc.local” kopieren, damit sie gleich beim Bootvorgang ausgeführt werden

1. Ausführbare Datei:

Hierzu fügt man folgendes als erste Zeile ein:

#!/bin/bash

und macht die Datei dann ausführbar, wozu man per Konsole oder Terminal erstmal in den Ordner geht, in dem die Datei gespeichert ist und tippt dann folgenden Befehl ein, wobei man “<Dateiname>” natürlich mit dem Namen der Datei ersetzt:

chmod +x <Dateiname>

Optional kann man das Skript als Eintrag in das Hauptmenü verfrachten. Dazu ruft man per Rechtsklick auf das Menü den Editor auf und fügt einen neuen Eintrag hinzu. Bei dem Punkt Befehl kann man mittels “Durchsuchen” das erstellte Skript wählen. Icon und Name kann beliebig gewählt werden.

2. Eintrag in die Datei “rc.local”:

Unter Ubuntu 9.04 liegt die Datei im  Ordner “/etc”, diese öffnet man mit Rootrechten (“sudo kwrite /etc/rc.local” oder “sudo gedit /etc/rc.local”). Jetzt kopiert man einfach die Sammlung vor die Zeile “exit 0” und kann neu starten. Auf meinem MacBook sieht die Datei folgendermaßen aus:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#Autosuspend für USB-Geräte aktivieren
for DEVICE in /sys/bus/usb/devices/*; do
if [ -w $DEVICE/power/autosuspend ]; then
echo 0 > $DEVICE/power/autosuspend
fi
if [ -w $DEVICE/power/level ]; then
echo auto > $DEVICE/power/level
fi
done

#Verhindern, dass das CD-Laufwerk abgefragt wird
/usr/bin/hal-disable-polling –device /dev/cdrom

#Writebacktime erhöhen
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

exit 0

Prozessortaktstufen unter Gnome:

Unter Gnome kann man das Applet  “Überwachen der Prozessortaktstufen” dazu verwenden, die Geschwindigkeit der CPU einzustellen. Vom Modus “Powersave” ist hier aber eher abzuraten, wer mehr darüber erfahren will findet auf “Repat’s Blog” einen ausführlichen Eintrag dazu (“Powersave heißt nicht Energie sparen”).

Laptop Mode:

Um den Laptop Modus zu starten genügt folgender Befehl:

sudo /etc/init.d/laptop-mode start

Will man ihn permant gestartet haben öffnet man die Datei “acpi-support” mit Rootrechten (“sudo gedit /etc/default/acpi-support” oder “sudo kwrite /etc/default/acpi-support”) und ändert dort den Eintrag “ENABLE_LAPTOP_MODE=false” auf “ENABLE_LAPTOP_MODE=true“.

Zu dem Laptop Modus gibt es noch einige weitere Einstellungsmöglichkeiten, die in einem Ubuntu-Wiki aufgelistet sind.

USB-Autosuspend:

Um des Autosuspend zu aktivieren, kopiert man die Zeilen nach “#Autosuspend für USB-Geräte aktivieren” aus dem oben geposteten Auszug der “rc.local” in die eigene.

Blinkender Cursor in Textfeldern:

Laut einem Post in den Ubuntu Foren bringt es zusätzlich etwas, den blinkenden Cursor in Textfeldern zu deaktivieren. Die Einstellungen hierzu findet man unter Gnome im Menü:

System => Einstellungen => Tastatur => Allgemein