<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>[pimp my shell] &#187; how-tos</title>
	<atom:link href="http://blog.pimpmyshell.de/category/tutorials/how-tos/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pimpmyshell.de</link>
	<description>leben im text-modus</description>
	<lastBuildDate>Thu, 26 Aug 2010 18:04:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>fbcmd &#8211; update</title>
		<link>http://blog.pimpmyshell.de/2010/06/17/fbcmd-update/</link>
		<comments>http://blog.pimpmyshell.de/2010/06/17/fbcmd-update/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 00:04:44 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[user-skripte]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2010/06/17/fbcmd-update/</guid>
		<description><![CDATA[Nur eine kurze (und hoechstwahrscheinlich unelegente) Methode, mittels &#8220;fbmcd&#8221; eine Liste aller Geburtstage der Kontakte in Facebook direkt auf der Konsole zu erhalten: fbcmd allinfo &#8220;=all&#8221; > temp_file&#038;&#038;month=`date&#124;awk &#8216;{print $3}&#8217;`&#038;&#038;cat temp_file&#124;grep $month&#124;grep birthday&#038;&#038;rm temp_file Leider wird die Ausgabe nicht aufsteigend nach Datum sortiert, funktioniert bei mir jedoch prima und reicht fuer meine Zwecke vollkommen aus.]]></description>
			<content:encoded><![CDATA[<p>Nur eine kurze (und hoechstwahrscheinlich unelegente) Methode, mittels &#8220;fbmcd&#8221; eine Liste aller Geburtstage der Kontakte in Facebook direkt auf der Konsole zu erhalten:</p>
<blockquote><p>
fbcmd allinfo &#8220;=all&#8221; > temp_file&#038;&#038;month=`date|awk &#8216;{print $3}&#8217;`&#038;&#038;cat temp_file|grep $month|grep birthday&#038;&#038;rm temp_file
</p></blockquote>
<p>Leider wird die Ausgabe nicht aufsteigend nach Datum sortiert, funktioniert bei mir jedoch prima und reicht fuer meine Zwecke vollkommen aus.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2010/06/17/fbcmd-update/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>fbcmd &#8211; facebook in der shell</title>
		<link>http://blog.pimpmyshell.de/2010/05/28/fbcmd-facebook-in-der-shell/</link>
		<comments>http://blog.pimpmyshell.de/2010/05/28/fbcmd-facebook-in-der-shell/#comments</comments>
		<pubDate>Fri, 28 May 2010 10:06:02 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[programme]]></category>
		<category><![CDATA[tutorials]]></category>
<category>cmd</category><category>facebook</category><category>fbcmd</category><category>shell</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2010/05/28/fbcmd-facebook-in-der-shell/</guid>
		<description><![CDATA[Nachdem der Facebook-Chat nun mit bitlbee abgedeckt ist, waere es ebenso interessant, die Nachrichten und News-Streams von Facebook in der Konsole angezeigt zu bekommen. Ich habe versucht, das ganze mit w3m oder lynx zu stemmen, jedoch ist Facebook in einem Konsolenbrowser nicht wirklich benutzbar (jedenfalls für mich) also suchte ich nach einem einfachen textbasierten Interface [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem der Facebook-Chat nun mit bitlbee abgedeckt ist, waere es ebenso interessant, die Nachrichten und News-Streams von Facebook in der Konsole angezeigt zu bekommen. Ich habe versucht, das ganze mit w3m oder lynx zu stemmen, jedoch ist Facebook in einem Konsolenbrowser nicht wirklich benutzbar (jedenfalls für mich) also suchte ich nach einem einfachen textbasierten Interface welches die Facebook-API nutzt um die wichtigsten Aufgaben direkt mit einem Befehl von der Shell aus in Facebook zu erledigen. </p>
<p>Das Programm traegt den Namen <strong>fbcmd</strong> &#8211; der Name sagt eigentlich alles.<br />
Das Programm, die Funktionen und die Installation sind<a href="http://fbcmd.dtompkins.com/"> sehr gut dokumentiert</a>.</p>
<p>Ich musste unter Debian über die Repos noch <strong>php5-cli</strong> nachinstallieren um das Installationscript nutzen zu koennen. Ansonsten war es sehr angenehm zu installieren: </p>
<blockquote><p>
curl -O http://github.com/dtompkins/fbcmd/raw/master/fbcmd_update.php<br />
sudo php fbcmd_update.php<br />
sudo php fbcmd_update.php install
</p></blockquote>
<p>Nach der Installation kann man das Programm auch als User mit fbcmd starten und wird aufgefordert, den Authorisationscode von Facebook einzugeben &#8211; sehr einfach: Den generierten Link in den Browser einfügen, Bestätigen, Auth-Code Kopieren und mit folgendem Befehl dem Programm mitteilen. Danach kann es auch schon losgehen:</p>
<blockquote><p>fbcmd auth XXXXXX</p></blockquote>
<p>Nun reicht ein <strong>fbcmd inbox</strong> aus, um direkt auf der Konsole die letzten Nachrichten zu sehen, die man sich dann mit <strong>fbcmd msg nr. </strong>anschauen kann. Es gibt natuerlich noch viele weitere Befehle und Features in diesem Programm, die man sich im <a href="http://fbcmd.dtompkins.com/commands">Wiki des Projektes</a> auch genauer anschauen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2010/05/28/fbcmd-facebook-in-der-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bitlbee &#8211; alles in einem!</title>
		<link>http://blog.pimpmyshell.de/2010/05/28/bitlbee-alles-in-einem/</link>
		<comments>http://blog.pimpmyshell.de/2010/05/28/bitlbee-alles-in-einem/#comments</comments>
		<pubDate>Fri, 28 May 2010 09:23:19 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
				<category><![CDATA[berichte]]></category>
		<category><![CDATA[how-tos]]></category>
		<category><![CDATA[tutorials]]></category>
<category>bitlbee</category><category>facebook</category><category>icq</category><category>irc</category><category>irssi</category><category>jabber</category><category>msn</category><category>oscar</category><category>perl</category><category>screen</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2010/05/28/bitlbee-alles-in-einem/</guid>
		<description><![CDATA[Ich bin noch immer Stammgast auf div. Unix/Linux Systemen und genieße meine Zeit die ich ausserhalb meines Jobs in der Shell verbringen kann. Leider hatte ich lange das Problem &#8211; in der Shell nicht mehr mit den ueblichen Verdaechtigen der Social-Networks verbunden zu sein &#8211; also waren ICQ,Google-Talk,Jabber,Twitter und Facebook immer in anderen grafischen Applikationen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin noch immer Stammgast auf div. Unix/Linux Systemen und genieße meine Zeit die ich ausserhalb meines Jobs in der Shell verbringen kann. Leider hatte ich lange das Problem &#8211; in der Shell nicht mehr mit den ueblichen Verdaechtigen der Social-Networks verbunden zu sein &#8211; also waren ICQ,Google-Talk,Jabber,Twitter und Facebook immer in anderen grafischen Applikationen irgendwo auf dem System und nicht in der Shell präsent, wo ich sie gerne haette.</p>
<p>Abhilfe schafft ein Programm, welches ich schon frueher genutzt, aber mittlerweile fast vergessen hatte: Bitlbee</p>
<p>Bitlbee ist ein kleiner lokaler IRC-Server, welcher mit einem rudimentären Bot ausgestattet, als Gateway zwischen ICQ,MSN,AIM,Jabber,Twitter,Facebook-Chat und dem IRC-Protokoll dient. Man kann sich nach der Installation mit dem IRC-Client seiner Wahl mit ihm verbinden und sich anmelden, die IM-Konten hinzufuegen und munter los-chatten.</p>
<p>Ich verbinde mich nun in meiner Screen-Session auf einer dezentralen Maschine über irssi auf den lokalen Bitlbee-Server und kann mich dann mit nur einem Befehl bei allen IM-Diensten anmelden und die Verwaltung der Chat anfragen und Gespräche sind wesentlich stressfreier und übersichtlicher als mit den meisten Multiprotokollmessangern die ich im grafischen Umfeld probiert habe.</p>
<p>Der Ablauf ist wie folgt:</p>
<p>Man installiert das Programm entweder per Hand oder aus den Repos seiner Distribution und verbindet sich danach mit dem IRC-Client seiner Wahl auf den IRC-Standardport(6667) des localhost.<br />
Automatisch wird man nach dem Verbinden auf den bitlbee-channel (&#038;bitlbee) geleitet, in dem zusammen mit @root erst einmal gar nichts passiert. Man kann sich jedoch über den &#8220;help&#8221; Befehl, einen Überblick über die Funktionen des Programms schaffen. </p>
<p>Um sich für die Zukunft am Bitlbee-Server anzumelden gibt man folgenden Befehl ein (mit eigenem Kennwort versteht sich): </p>
<blockquote><p>register password</p></blockquote>
<p>Nun ist man mit seinem Nicknamen am Server registriert und kann sich in zukünftigen Sessions mit folgendem Befehl anmelden:</p>
<blockquote><p>identify password</p></blockquote>
<p>Hat man Konten hinzugefügt, werde diese dann automatisch geladen und verbunden. Kommen wir genau zu diesem Punkt:<br />
Um ein Konto zu registrieren, muss man wissen welche Protokolle unterstützt werden und wie diese heißen:</p>
<ul>
<li>oscar = ICQ/AIM</li>
<li>msn = MSN</li>
<li>jabber = Jabber, Google-Talk, Facebook, GMX/WEB.de Messanger</li>
<li>twitter = twitter</li>
</ul>
<p>Nun also zur Registrierung. Nehmen wir als Beispiel ein ICQ Konto. Im &#038;bitlbee Channel geben wir folgenden Befehl ein:</p>
<blockquote><p>account add oscar icq-nummer passwort</p></blockquote>
<p>Will man einsehen, welche Konten mittlerweile registriert sind, geschieht dies durch:</p>
<blockquote><p>account list</p></blockquote>
<p>Nehmen wir an, das ICQ-Konto hat die Nummer 0, kann man sich wie folgt anmelden:</p>
<blockquote><p>account on 0</p></blockquote>
<p>Nun erscheinen die ICQ Kontakte im &#038;bitlbee-Kanal und man kann die personen per Query oder durch Voranstellen des Nicknamen ansprechen. Um Hilfe zu den div. Protokollen und der Syntax zu erhalten gibt man folgenden Befehl ein:</p>
<blockquote><p>help account add (oscar, twitter, jabber, msn, etc)</p></blockquote>
<p>Ich bin sehr von dieser Lösung überzeugt und kann sie nur weiter empfehlen. Auch die Möglichkeit, den Bitlbee-Server im Netz oder über SSH/VPN freizugeben und sich von einem beliebigen Client und OS aus darauf zu Verbinden hat seinen Charme. Viel Spaß beim Chatten und Twiitern. </p>
<p><strong>Anmerkungen:</strong></p>
<ul>
<li>Bitlbee unterstützt Twitter erst in den neueren Versionen. Ich musste die aktuellste (V.1.2.7) aus dem Quellcode kompillieren. </li>
<li>Projektwebseite:<a href="http://www.bitlbee.org">http://www.bitlbee.org/</a></li>
<li>Howto: <a href="http://www.nowhere.dk/articles/facebook-chat-in-bitlbee">Bitlbee und Facebook</a></li>
<li>Facebook-Rename-Script für Irssi: <a href="http://github.com/avar/irssi-bitlbee-facebook-rename">(Fix-nach Facebook-Update)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2010/05/28/bitlbee-alles-in-einem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>gcalcli &#8211; google calendar auf der shell</title>
		<link>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/</link>
		<comments>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 11:53:08 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[programme]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/</guid>
		<description><![CDATA[Wenn man auf mehr als nur einem PC arbeitet und damit vielleicht sogar verschiedene Plattformen vor sich hat, gibt es oft das Problem, dass Daten nicht synchron sind. Nehmen wir als Beispiel Terminverwaltung: Wie kann man ein Microsoft Outlook, einen Windows Mobile Gerät, den Mozilla Sunbird synchronisieren, dass jeder dieser Instanzen die gleichen Termine empfängt [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man auf mehr als nur einem PC arbeitet und damit vielleicht sogar verschiedene Plattformen vor sich hat, gibt es oft das Problem, dass Daten nicht synchron sind. Nehmen wir als Beispiel Terminverwaltung: Wie kann man ein Microsoft Outlook, einen Windows Mobile Gerät, den Mozilla Sunbird synchronisieren, dass jeder dieser Instanzen die gleichen Termine empfängt und eintragen kann? Die Antwort ist der Google-Calendar, man kann die Kalender über das Internet abbonieren auch mit Terminen füttern.</p>
<p>Nun, da ich mich wieder auf die Shell konzentriere, hatte ich das Problem, das ich unter der Shell die Termine nicht abrufen und eintragen konnte. Doch mit einem kleinen Python-Skript kann ich nun auch diese Hürde überwinden: <a href="http://code.google.com/p/gcalcli/">gcalcli</a></p>
<p>Leider war die installation von gcalcli nicht so trivial.</p>
<p><strong>How-To:</strong></p>
<ul>
<li>gcalcli von der <a href="http://code.google.com/p/gcalcli/">Projektwebseite herunterladen</a></li>
<li>tarball entpacken</li>
<li>nach /usr/local/bin kopieren</li>
<li>.gcalclirc im Home-Verzeichnis anlegen</li>
</ul>
<p><strong>Die .gcalclirc sollte folgendermaßen aussehen:</strong></p>
<blockquote><p>[gcalcli]<br />
user: benutzer@googlemail.com<br />
pw: passwort<br />
cals: owner</p></blockquote>
<ul>
<li>Abhängigkeiten erfüllen:</li>
<p><a href="http://code.google.com/p/gdata-python-client/">Gdata-Python</a>, <a href="http://effbot.org/zone/element-index.htm">Elementree</a>, <a href="http://www.labix.org/python-dateutil">Dateutil-Python<br />
</a></p>
<li>jeweils aktuellste Versionen der Abhängigkeiten herunterladen und entpacken. In die jeweiligen Verzeichnise wechseln und mit &#8220;python setup.py install&#8221; als Superuser die Module installieren.</li>
<li>Sind die Module installiert kann man testen ob die Abfrage funktioniert: als user &#8220;gcalcli agenda&#8221; eingeben</li>
<ul>
<p>Bekommt man als Belohnung keine aktuellen Termine auf der Shell sondern mehrere Zeilen Fehlermeldungen, liegt es &#8211; wie in meinem Fall Wahrscheinlich an der Codierung:</p>
<p>Dies lässt sich mit folgendem Bugfix des Scripts beheben:</p>
<p><strong>Die Zeilen 66+67 sollte man folgendermaßen anpassen:</strong></p>
<blockquote><p>sys.stdout =  codecs.getwriter(&#8216;utf-8&#8242;)(sys.stdout)<br />
sys.stdin = sys.stdin = codecs.getreader(&#8216;utf-8&#8242;)(sys.stdin)</p></blockquote>
<p><strong>Im oberen Teil des Skripts sollten sie noch Atom-Support aktivieren durch einfügen von:</strong></p>
<blockquote><p>import atom<br />
atom.XML_STRING_ENCODING = None</p></blockquote>
<p>Nach dem Speichern sollte das Skript einwandfrei funktionieren. Folgende Abfragemöglichkeiten gibt es:</p>
<p><code><strong>gcalcli agenda</strong></code><br />
Zeigt die aktuellen Termine an, die anstehen.</p>
<p><code><strong>gcalcli calw</strong></code><br />
Zeigt einen ASCII Kalender, mit den Terminen der aktuellen Woche an</p>
<p><code><strong>gcalcli calm</strong></code><br />
Zeigt den aktuellen Monatskalender mit allen Einträgen an</p>
<p><strong>Termine werden über den quick-command eingetragen:</strong></p>
<blockquote><p>gcalcli quick &#8220;Termintext Uhrzeit TT.MM.YYYY&#8221;</p></blockquote>
<p>Ein kleines Schmankerl am Rand: Man kann in den Einstellungen des Google-Calendars eine SMS-Benachrichtigungsfunktion aktivieren, mit der man dann kostenlos per SMS an die eingetragenen Termine erinnert wird. Viel Spaß beim konfigurieren und Termine verwalten auf der Shell. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2008/02/12/gcalcli-google-calendar-auf-der-shell/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Pimp your (Bash) Prompt</title>
		<link>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/</link>
		<comments>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 22:17:00 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[shells]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/</guid>
		<description><![CDATA[Du bist gelangweilt von dem hans@wurst:~$ &#8211; Prompt deiner Bash? Möchtest gerne mehr Informationen gezeigt bekommen? Du hättest gerne Augenschmerzen vor lauter Farben? In folgendem Artikel werde ich erklären, wie du Deinen Prompt personalisieren, einfärben, und visuell vollkommen verunstalten kannst. (Kleiner Hinweis vorweg: Der eine oder andere mag es bereits bemerkt haben, ich beziehe mich [...]]]></description>
			<content:encoded><![CDATA[<p>Du bist gelangweilt von dem <em>hans@wurst:~$</em> &#8211; Prompt deiner Bash? Möchtest gerne mehr Informationen gezeigt bekommen? Du hättest gerne Augenschmerzen vor lauter Farben?</p>
<p>In folgendem Artikel werde ich erklären, wie du</p>
<ul>
<li>Deinen Prompt personalisieren,</li>
<li>einfärben,</li>
<li>und visuell vollkommen verunstalten kannst.</li>
</ul>
<p><span id="more-96"></span><br />
<small>(Kleiner Hinweis vorweg: Der eine oder andere mag es bereits bemerkt haben, ich beziehe mich im ganzen Artikel ausschliesslich auf die <acronym title="Bourne again Shell">Bash</acronym>.  Selbstverständlich lassen sich die meisten anderen Shells ebenfalls über ihre Variablen individualisieren. Das soll keinerlei Wertung sein, ich habe einfach keine Zeit, mich mit anderen Shells wie der <em>zsh</em> zu beschäftigen. Sollte also jemand von euch Zeit und Lust haben einen Artikel dazu loszuwerden, lade ich ihn hiermit herzlich ein. :) )</small></p>
<h3>Grundlagen</h3>
<p>In der <acronym title="Bourne again Shell">Bash</acronym> wird der primäre Prompt über die Variable <strong>PS1</strong> gesteuert. Neben PS1 existieren noch PS2, PS3 und PS4, wobei für uns nur die ersten Beiden interessant sind.</p>
<ul>
<li><strong>PS1</strong> &#8211; In dieser Variable wird der primäre Prompt der <acronym title="Bourne again Shell">Bash</acronym> gespeichert. Der Standardwert ist in dem meisten Linuxdistributionen <em>\u@\h:\w\$</em>.</li>
<li><strong>PS2</strong> &#8211; Der sekundäre Prompt. Dieser Prompt wird ausgegeben, wenn auf eine Eingabe des Users gewartet wird. Der Standardwert ist <em>&gt;</em>. Der sekundäre Prompt lässt sich beispielsweise mit einem unvollendeten Befehl wie &#8220;ls |&#8221; ausgeben.</li>
<li><strong>PS3</strong> &#8211;  wird vom internen select Befehl verwendet.</li>
<li><strong>PS4</strong> &#8211; Die Variable &#8220;PS4&#8243; wird vor den Debug-Meldungen ausgegeben, die durch die Shell-Option &#8220;-x&#8221; [execute trace] ausgegeben werden. Der Standardwert ist hier meist <em>+</em>.</li>
</ul>
<p><strong>Die Veränderungen treten sofort ein, bleiben jedoch erst dann erhalten, wenn der &#8220;export&#8221;-Befehl in die Datei <em>~/.bashrc</em> eingetragen wird.</strong></p>
<p>Zunächst löschen wir einfach mal den Inhalt von PS1:</p>
<pre><code>unset $PS1</code></pre>
<p>Nun fehlt jegliche Eingabeaufforderung. Das bedeutet natürlich nicht, dass keine Befehle mehr eingegeben werden können. Es gibt einfach keinen Prompt mehr, der ausgegeben werden könnte.</p>
<p>Mit <kbd>export</kbd> können Umgebungsvariablen gesetzt werden. Ein schnelles:</p>
<pre><code>export $PS1="pimp my shell &gt;"</code></pre>
<p>zum Beispiel erzeugt folgenden sinnlosen aber witzigen Prompt:</p>
<pre><code>pimp my shell &gt;</code></pre>
<p>Aber wie lasse ich mir Informationen statt nur einfachen Text <del>prompten</del> <ins>ausgeben</ins>? Über so genannte Escape-Sequenzen. Nun wird es interessant. Es gibt einen ganzen Haufen Escape-Sequenzen, welche etwa Arbeitsverzeichnis, Benutzername oder Uhrzeit ausgeben:</p>
<table width="100%">
<tr>
<td><strong>\a</strong></td>
<td>Das ASCII-Zeichen für eine Glocke (&#8220;\007&#8243; sollte auch funktionieren). Dies erzeugt einen Ton, welcher (falls vorhanden) aus dem PC-Speaker tönt. Das ist aber nicht zu empfehlen, da dieser dann bei jedem ausgegebenen Prompt mit dieser Escape-Sequenz der Speaker einen nervigen Ton von sich gibt.</td>
</tr>
<tr>
<td><strong>\d</strong></td>
<td>Zeigt das Datum im &#8220;Wochentag Monat Datum&#8221;-Format (<abbr title="Beispielsweise">Bspw.</abbr> &#8220;Tue May 26&#8243;)</td>
</tr>
<tr>
<td><strong>\D{format}</strong></td>
<td>Der Inhalt der beiden geschweiften Klammern wird an <a href="http://opengroup.org/onlinepubs/007908799/xsh/strftime.html">strftime</a> gesendet und das Ergebnis zurück in den Prompt-String. Leer gelassen erzeugt das meist ein locale-Spezifisches Datum. Die geschweiften Klammern sind pflicht.</td>
</tr>
<tr>
<td><strong>\e</strong></td>
<td>Ein ASCII Escape-Zeichen (&#8220;\033&#8243; sollte auch funktionieren.)</td>
</tr>
<tr>
<td><strong>\h</strong></td>
<td>Der Hostname bis zum ersten &#8220;.&#8221;</td>
</tr>
<tr>
<td><strong>\H</strong></td>
<td>Der komplette Hostname</td>
</tr>
<tr>
<td><strong>\j</strong></td>
<td>Gibt die Anzahl der Hintergrundprozesse aus.</td>
</tr>
<tr>
<td><strong>\l</strong></td>
<td>Name der Shell</td>
</tr>
<tr>
<td><strong>\n</strong></td>
<td>Erzeugt eine neue Zeile (Ja, Prompts können mehrzeilig sein).</td>
</tr>
<tr>
<td><strong>\r</strong></td>
<td><a href="http://en.wikipedia.org/wiki/Carriage_return" title="Link zum englischen Wikipedia-Artikel">Carriage-Return</a></td>
</tr>
<tr>
<td><strong>\s</strong></td>
<td>Der Name der Shell. Logischerweise <em><acronym title="Bourne again Shell">Bash</acronym></em></td>
</tr>
<tr>
<td><strong>\t</strong></td>
<td>Die Zeit im 24-Stunden <em>HH:MM:SS</em> Format</td>
</tr>
<tr>
<td><strong>\T</strong></td>
<td>Die Zeit im 12-Stunden <em>HH:MM:SS</em> Format</td>
</tr>
<tr>
<td><strong>\@</strong></td>
<td>Die Zeit im 12-Stunden <em>AM/PM</em> Format</td>
</tr>
<tr>
<td><strong>\A</strong></td>
<td>Die Zeit im 24-Stunden <em>HH:MM</em> Format</td>
</tr>
<tr>
<td><strong>\u</strong></td>
<td>Name des Benutzers</td>
</tr>
<tr>
<td><strong>\v</strong></td>
<td>Versionsnummer der <acronym title="Bourne again Shell">Bash</acronym> (<abbr title="Beispielsweise">Bspw.</abbr> 3.2)</td>
</tr>
<tr>
<td><strong>\V</strong></td>
<td>Wie /v, jedoch mit Patch-Level (<abbr title="Beispielsweise">Bspw.</abbr> 3.2.25)</td>
</tr>
<tr>
<td><strong>\w</strong></td>
<td>Das aktuelle Arbeitsverzeichnis, wobei $HOME mit einer Tilde (~) abgekürzt wird.</td>
</tr>
<tr>
<td><strong>\W</strong></td>
<td>Das aktuelle Arbeitsverzeichnis (, jedoch ohne höhere Ebenen), wobei $HOME mit einer Tilde (~) abgekürzt wird.</td>
</tr>
<tr>
<td><strong>\!</strong></td>
<td>Die History-Nummer des Befehls. Dies kann natürlich je nach <em>.bash_history</em> variieren.</td>
</tr>
<tr>
<td><strong>\#</strong></td>
<td>Anzahl der bereits aufgerufenen Kommandos während der Shell-Session</td>
</tr>
<tr>
<td><strong>\$</strong></td>
<td>Wenn <acronym title="User IDentification Number">UID</acronym> = 0, ein #, andernfalls ein $. Zu deutsch: Normale User sehen ein &#8220;$&#8221;, Root ein &#8220;#&#8221;.</td>
</tr>
<tr>
<td><strong>\nnn</strong></td>
<td>Zeichen entsprechend der oktalen Zahl <em>nnn</em></td>
</tr>
<tr>
<td><strong>\\</strong></td>
<td>Ein Backslash</td>
</tr>
<tr>
<td><strong>\[</strong></td>
<td>Beginn einer Sequenz von nicht-darstellbaren Zeichen.</td>
</tr>
<tr>
<td><strong>\]</strong></td>
<td>Ende einer Sequenz von nicht-darstellbaren Zeichen</td>
</tr>
</table>
<p>Damit lässt sich schon viel anstellen. Sinnvoll sind und bleiben natürlich Benutzername, Verzeichnis und Hostname. Nach ein wenig herumspielen könnte der Inhalt von <strong>PS1</strong> zum Beispiel so aussehen:</p>
<pre><code>[&#92;d &#92;A, Bash Version &#92;V, &#92;# Commands, &#92;j Jobs, tty #&#92;l]&#92;n[&#92;u@&#92;H:&#92;w] &#92;$</code></pre>
<p>, was bei mir in etwa folgenden Prompt erzeugt:</p>
<pre><code>[Mo Dez 10 23:05, Bash Version 3.2.25, 116 Commands, 0 Jobs, tty #2]
[jxn@david:~] $</code></pre>
<p>Die eckigen Klammern sind übrigens reine Kosmetik ;)</p>
<h3>Farben</h3>
<div style="float:right;">
<table>
<tr>
<td><strong>Farbe</strong></td>
<td><strong><acronym title="Vordergrund">VG</acronym> / <acronym title="Hintergrund">HG</acronym></strong></td>
</tr>
<tr>
<td>Schwarz</td>
<td>30 / 40</td>
</tr>
<tr>
<td>Rot</td>
<td>31 / 41</td>
</tr>
<tr>
<td>Grün</td>
<td>32 / 42</td>
</tr>
<tr>
<td>Braun</td>
<td>33 / 43</td>
</tr>
<tr>
<td>Blau</td>
<td>34 / 44</td>
</tr>
<tr>
<td>Violett</td>
<td>35 / 45</td>
</tr>
<tr>
<td>Cyan</td>
<td>36 / 46</td>
</tr>
<tr>
<td>Weiss</td>
<td>37 / 47</td>
</table>
</div>
<p>Zufrieden mit der Ausgabe? Weiter gehts mit optischer hervorhebung durch Farben.</p>
<p>Farbangaben müssen über die Escape-Sequenz <strong>\e</strong> (/033 sollte auch funktionieren) eingeleitet werden. Diese Escape-Sequenz wird jedoch vom genutzten Terminal verarbeitet, nicht von der <acronym title="Bourne again Shell">Bash</acronym>. Deswegen funktioniert die Einfärbung von Prompts auch nicht überall, selbst wenn die <acronym title="Bourne again Shell">Bash</acronym> genutzt wird.</p>
<p>Eine Farbangabe besteht aus dem Escape-Zeichen &#8220;\e&#8221;, den Farbcodes &#8220;x;yy;zz&#8221; (Eigenschaft;Vordergrund;Hintergrund) und einem abschliessendem &#8220;m&#8221;. Beispiele für Farbcodes können der nebenstehenden Tabelle entnommen werden, wobei die 30er für die Vordergrund- und die 40er für die Hintergrundfarben stehen. Sinnvolle Werte für die Schrifteigenschaft (x) sind: 0 (Standard), 1 (heller), 22 (nicht heller), 4 (unterstrichen), 24 (nicht unterstrichen), 5 (blinkend), 25 (nicht blinkend), 7 (invers), 27 (nicht invers).</p>
<p>Die Codes in der Farbangabe können übrigens in beliebiger Reihenfolge gesetzt werden. Ein &#8220;5;41;32&#8243; ergibt <abbr title="Beispielsweise">Bspw.</abbr> das Gleiche wie ein &#8220;41;5;32&#8243;, das Entscheidende ist der Code, nicht die Reihenfolge.</p>
<p>Färben wir einfach mal den oben erwähnten Standardprompt &#8220;\u@\h:\w\$&#8221; hellgrün mit einem rotem Hintergrund:</p>
<pre><code>export PS1="&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$ "</code></pre>
<p>Das Problem: Nun ist nicht nur der Prompt hellgrün, sondern der gesamte Text in unserer Shell. Das lässt sich mit einem schliessenden "\e[0m" verhindern. Auf diese Weise wird die Farbangabe auf Null zürückgesetzt. Ein</p>
<pre><code>export PS1="&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$&#92;e[0m "</code></pre>
<p>sieht schon gleich viel besser aus. Aber das reicht leider immer noch nicht. Die sowieso nicht darstellbaren Zeichen unserer Farbangaben müssen mit den Sequenzen "\[" und "\]" auch als solche gekennzeichnet werden. Sonst gibt es hässliche Darstellungsfehler, sollte ein Kommando einmal das rechte Ende des sichtbaren Bereichs erreichen. Das Ergebnis sollte also wie folgt aussehen:</p>
<pre><code>export PS1="&#92;[&#92;e[1;32;41m&#92;u@&#92;h:&#92;w&#92;$&#92;e[0m&#92;] "</code></pre>
<p>Natürlich können in einem Prompt auch mehrere Farbangaben verwendet werden. Aber jeder sollte für sich entscheiden, wieviel <em>Bunt</em> seine Augen ertragen können. ;)</p>
<h3>Noch nicht genug? Bashish rocks your socks!</h3>
<p><a href="http://bashish.sourceforge.net/">Bashish</a> ist eine Theme-Engine für allerlei Terminals und Shells. Mit Bashish lassen sich Farbe, Schriftart, Transparenz und Hintergrundbild für einzelne Programme unabhängig voneinander personalisieren. Ausserdem kann man mit Bashish die Prompts verbreiteter Shells wie die Bash, zsh und tcsh konfigurieren. Was mit Bashish möglich ist, wird bei <a href="http://bashish.sourceforge.net/screenshot.html">den Screenshots</a> sehr gut veranschaulicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/12/10/pimp-your-prompt/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>.bash_history für mehrere Shells</title>
		<link>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/</link>
		<comments>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 21:58:32 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[how-tos]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/</guid>
		<description><![CDATA[Du kennst das. Du hast ein Terminal geöffnet und tippst fleißig deine Befehle ein, öffnest ein zweites Terminal und &#8211; es erinnert sich nicht an die gerade eben eingetippten Kommandos. Und es kommt sogar noch schlimmer: Wenn du zuerst das erste Terminal und danach das Zweite schließt, werden die Befehle des ersten Terminals aus der [...]]]></description>
			<content:encoded><![CDATA[<p>Du kennst das. Du hast ein Terminal geöffnet und tippst fleißig deine Befehle ein, öffnest ein zweites Terminal und &#8211; es erinnert sich nicht an die gerade eben eingetippten Kommandos. Und es kommt sogar noch schlimmer: Wenn du zuerst das erste Terminal und danach das Zweite schließt, werden die Befehle des ersten Terminals aus der Datei <em>~/.bash_history</em> überschrieben. Doppelt nervig.<br />
<span id="more-113"></span><br />
Die Bash speichert die <em>.bash_history</em> nur beim schließen eines Terminals, und nicht nach jedem eingetippten Kommando. Das lässt sich leicht ändern:</p>
<pre><code>nano ~/.bashrc</code></pre>
<p>(An Ubuntuuser: Man beachte, kein sudo hier. Die Datei gehört dem User, nicht dem System. Und selbstverständlich lässt sich auch jeder andere Texteditor wie gedit, kate, vi oder emacs nehmen.)</p>
<p>Füge nun die folgenden Zeilen hinzu:</p>
<pre><code>shopt -s histappend
PROMPT_COMMAND='history -a'</code></pre>
<p>und speichere das ganze ab (In Nano mit <kbd>Strg+O</kbd>. &#8220;^&#8221; steht in den meisten Fällen für <kbd>Strg</kbd>. Also macht die Statuszeile in Nano doch ein wenig Sinn. ;) )</p>
<p>Dies sorgt dafür, dass der Kommandoverlauf von der Bash <strong>angehängt</strong> (und nicht einfach überschrieben) wird. Ausserdem wird jedes mal, wenn ein Prompt ausgegeben wird, abgespeichert.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/12/03/bash-history-fuer-mehrere-shells/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>muttrc &#8211; builder</title>
		<link>http://blog.pimpmyshell.de/2007/03/13/muttrc-builder/</link>
		<comments>http://blog.pimpmyshell.de/2007/03/13/muttrc-builder/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 21:22:07 +0000</pubDate>
		<dc:creator>Gregor</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[webseiten]]></category>
<category>mutt</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/03/13/muttrc-builder/</guid>
		<description><![CDATA[Jeder, der sich mutt auseinander setzt, begreift schnell, dass mutt der wahrscheinlich mächtigste Email-Client ist, den es im Unixumfeld gibt. Er ist extrem variabel aufgebaut und lässt sich bis aufs kleinste Detail konfigurieren. Um dies zu meistern &#8211; sprich sich die perfekte muttrc zu basteln bedarf es erst einmal viel Zeit, die man sich nehmen [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder, der sich <strong><a href="http://pimpmyshell.de/wiki/index.php?title=Email#mutt">mutt </a></strong>auseinander setzt, begreift schnell, dass <strong>mutt </strong>der wahrscheinlich mächtigste <a href="http://pimpmyshell.de/wiki/index.php?title=Email">Email-Client </a>ist, den es im Unixumfeld gibt. Er ist extrem variabel aufgebaut und lässt sich bis aufs kleinste Detail konfigurieren. </p>
<p>Um dies zu meistern &#8211; sprich sich die perfekte <strong>muttrc</strong> zu basteln bedarf es erst einmal viel Zeit, die man sich nehmen muss, um die Man-Files, die unzaehligen How-Tos und die Tutorials durchzuarbeiten.</p>
<p>Beim surfen habe ich eine Internetseite gefunden, die ich als &#8220;Extrem-Hilfreich&#8221; einstufe:<br />
<a href="http://muttrcbuilder.org/"><br />
Der Muttrc-Builder</a></p>
<p>Mit Hilfe dieser Seite kann man sich eine Konfigurationsdatei basteln, die aus Mutt genau den Email-Client macht, den man sich immer gewünscht hat &#8211; inklusive der Farbgebung, Verschlüsselung, Imap- oder Pop3-konfiguration, Lese- und Sendeoptionen etc. </p>
<p>Probiert es aus! Ein Segen für jeden von Natur aus faulen Konsolen-Nutzer :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/03/13/muttrc-builder/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>das Image von Linux</title>
		<link>http://blog.pimpmyshell.de/2007/03/11/das-image-von-linux/</link>
		<comments>http://blog.pimpmyshell.de/2007/03/11/das-image-von-linux/#comments</comments>
		<pubDate>Sun, 11 Mar 2007 00:57:17 +0000</pubDate>
		<dc:creator>hogdarog</dc:creator>
				<category><![CDATA[hintergrundwissen]]></category>
		<category><![CDATA[how-tos]]></category>
		<category><![CDATA[programme]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2007/03/11/das-image-von-linux/</guid>
		<description><![CDATA[Ich habe mir vor Jahren angewöhnt, von jeder Windows-Installation ein Image mittels Norton Ghost bzw. PartitionImage zu ziehen. Das spart so manche Neuinstallation mit der darauffolgenden Konfigurationsorgie&#8230; Als ich zum Linux-Lager schwenkte, wollte ich so etwas natürlich auch für meine Linuxrechner haben, aber bitte mit quelloffener Software&#8230; Es wurde schnell klar, dass dd das Mittel [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mir vor Jahren angewöhnt, von jeder Windows-Installation ein Image mittels Norton Ghost bzw. PartitionImage zu ziehen. Das spart so manche Neuinstallation mit der darauffolgenden Konfigurationsorgie&#8230;<br />
Als ich zum Linux-Lager schwenkte, wollte ich so etwas natürlich auch für meine Linuxrechner haben, aber bitte mit quelloffener Software&#8230;</p>
<p>Es wurde schnell klar, dass <strong>dd</strong> das Mittel der Wahl dafür ist. Und dabei ist es auch noch so einfach zu bedienen:</p>
<blockquote><p><em> dd if=/dev/hda1 of=/mnt/backup/hda1.dd bs=1024K</em></p></blockquote>
<p>schreibt ein Image der ersten Partition der ersten IDE-Platte in ein Image namens <em>/mnt/backup/hda1.dd</em><br />
Die einzelnen Parameter bedeuten dabei:<br />
<em>if</em>=input file  = das Blockgeraet, von welchem gelesen wird<br />
<em>of</em>=output file = die Datei, in die das Image geschrieben wird<br />
<em>bs</em>=block size  = die Blockgröße, d.h. wie viele Daten auf einmal transferiert werden</p>
<p>Dabei kann sowohl die <em>input</em> als auch die <em>output-file</em> eine echte Datei als auch ein Blockgerät sein.</p>
<p>Man könnte also z.B. direkt von einer Platte / Partition auf die andere (hier: hda nach hdb) klonen,</p>
<blockquote><p><em>dd if=/dev/hda of=/dev/hdb</em></p></blockquote>
<p>oder von einer Datei in eine andere schreiben&#8230;<br />
Den Oberhammer finde ich aber, dass man das Ganze auch pipen und übers Netzwerk verschicken kann:</p>
<p>z.B.</p>
<p>Eine ganze Platte übers Netzwerk klonen:</p>
<blockquote>
<div><em>dd if=/dev/hdb | ssh user@host &#8220;dd of=/dev/hdb&#8221;</em></div>
</blockquote>
<p>Ein Partitions-Image während dem Vorgang komprimieren und auf einem anderen Rechner ablegen:</p>
<blockquote>
<div><em>dd if=/dev/sda3 | gzip -c | ssh user@host &#8220;cat &gt; /mnt/backup/otherhost.dd.gz&#8221;</em></div>
</blockquote>
<p>Zurückgespielt wird das Ganze ebenso einfach:</p>
<blockquote>
<div><em>ssh user@host &#8220;cat /mnt/backup/otherhost.dd.gz | gunzip&#8221; | dd of=/dev/sda3</em></div>
</blockquote>
<blockquote>
<div></div>
</blockquote>
<div>Viel Spass beim Klonen!</div>
<blockquote></blockquote>
<div>Disclaimer: Es versteht sich von selbst, dass dd gerade wegen seiner Macht auch viel Schaden anrichten kann. Daher übernehme ich keinerlei Verantwortung für die Anwendung der obigen Tips! Sowas probiert man eh erstmal an nem Testrechner aus&#8230;</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2007/03/11/das-image-von-linux/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>suchen und skripten mit screen</title>
		<link>http://blog.pimpmyshell.de/2006/12/30/suchen-und-skripten-mit-screen/</link>
		<comments>http://blog.pimpmyshell.de/2006/12/30/suchen-und-skripten-mit-screen/#comments</comments>
		<pubDate>Sat, 30 Dec 2006 17:31:50 +0000</pubDate>
		<dc:creator>hogdarog</dc:creator>
				<category><![CDATA[gnu_screen]]></category>
		<category><![CDATA[how-tos]]></category>
<category>screen tip howto</category>
		<guid isPermaLink="false">http://blog.pimpmyshell.de/2006/12/30/suchen-und-skripten-mit-screen/</guid>
		<description><![CDATA[Suchen: Die schönsten Dinge weiss man erst zu schätzen, wenn man sie vermisst: Ich musste kürzlich ohne screen (quasi nackt) auf der Console arbeiten und da fiel mir erst mal auf, wie oft ich eigentlich die Suchfunktion von screen brauche&#8230; Man erreicht die Suche, indem man in den sog. &#8220;Copy-Mode&#8221; wechselt (defaultmässig belegt mit [C-a][ESC]). [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Suchen:</strong></p>
<p>Die schönsten Dinge weiss man erst zu schätzen, wenn man sie vermisst: Ich musste kürzlich ohne screen (quasi nackt) auf der Console arbeiten und da fiel mir erst mal auf, wie oft ich eigentlich die Suchfunktion von screen brauche&#8230;<span id="more-52"></span></p>
<p>Man erreicht die Suche, indem man in den sog. &#8220;<em>Copy-Mode</em>&#8221; wechselt (defaultmässig belegt mit [C-a][ESC]). Es erscheint die entsprechende Meldung und nun kann man mit [?] eine Rückwärtssuche starten (rückwärts deswegen, weil man sich ganz am Ende des Buffers befindet). Also z.b. [?]error[ENTER] sucht nach dem letzten Vorkommen des Wortes &#8220;error&#8221;. Ein Druck auf [n] setzt die Suche fort bis ganz nach oben an den Anfang des <em>Scrollbackbuffers.</em></p>
<p>Achtung: Die Suche ist case-sensitive. D.h. &#8220;Error&#8221; ist nicht gleich &#8220;error&#8221;!</p>
<p>Mit dem <em>Copy-Mode </em>kann man noch andere Sachen machen, z.B. Text kopieren: Dazu navigiert man mit den Cursortasten, setzt mittels [SPACE] die erste Marke, navigiert weiter und setzt durch ein erneutes [SPACE] die zweite Marke. Jeder Text zwischen der ersten und der zweiten Marke (was durchaus mehrere Seiten umfassen kann) wird dadurch in den Copy-Buffer kopiert und kann mit [C-a][}] eingefuegt werden&#8230;</p>
<p>Diese Features sind für mich Grund genug, meinen <em>Scrollbackbuffer</em> von screen relativ hoch zu setzen: &#8220;defscrollback 15000&#8243;, was 15000 Zeilen (pro Fenster) bedeutet. Tja, Komfort hat seine (Speicher-)Kosten&#8230;</p>
<p><!--more--><br />
<strong>Skripten: </strong></p>
<p>Auf der screen-mailingliste wurde auf folgenden Blog-Artikel hingewiesen, der kurz und prägnant auf die scripting-Möglichkeiten von screen eingeht:</p>
<p><a title="http://www.jerri.de/blog/archives/2006/05/02/T22_41_44/" href="http://www.jerri.de/blog/archives/2006/05/02/T22_41_44/">http://www.jerri.de/blog/archives/2006/05/02/T22_41_44/</a></p>
<p>&#8220;Scripting&#8221; ist vielleicht ein bisschen hoch gegriffen &#8211; im Prinzip geht es darum, screen fernzusteuern; sprich: screen-Kommandos von einem Fenster aus in einem Anderen auszuführen bzw. eine komplette screen-session von aussen zu beeinflussen&#8230; So zeigt der Author z.B. eine Möglichkeit, die Anzeige des Text-Browser w3m von einem anderen Fenster heraus zu aktualisieren. Sehr schön finde ich auch den Tip, eine bestehende screen-session quasi als Diashow darzustellen, und alle Fenster darin automatisch wechselnd anzuzeigen:</p>
<p><em>while true; do screen -S sessionname -X next; sleep 10s; done</em></p>
<p>Achtung: der Befehl funktioniert nur vernuenftig, wenn er AUSSERHALB der Sitzung [sessionname] aufgerufen wird!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2006/12/30/suchen-und-skripten-mit-screen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mpd (Music Player Daemon)</title>
		<link>http://blog.pimpmyshell.de/2006/12/21/mpd-music-player-daemon/</link>
		<comments>http://blog.pimpmyshell.de/2006/12/21/mpd-music-player-daemon/#comments</comments>
		<pubDate>Thu, 21 Dec 2006 15:25:13 +0000</pubDate>
		<dc:creator>Xukashi</dc:creator>
				<category><![CDATA[how-tos]]></category>
		<category><![CDATA[programme]]></category>

		<guid isPermaLink="false">http://blog.pimpmyshell.de/2006/12/21/mpd-music-player-demon/</guid>
		<description><![CDATA[MPD ist ein Audio-Player der, wie der Name schon verrät als Daemon im Hintergrund des Systems läuft. Er besitzt eine Playlistverwaltung, eine Musikdatenbank und unterstützt ogg, vorbis, mp3, flac, aac, mod und wave also alles was man braucht, oder? Nein &#8211; das hört sich noch nach einem zu &#8220;normalen&#8221; Audioplayer an, denn das wohl schönste [...]]]></description>
			<content:encoded><![CDATA[<p>MPD ist ein Audio-Player der, wie der Name schon verrät als Daemon im Hintergrund des Systems läuft. Er besitzt eine Playlistverwaltung, eine Musikdatenbank und unterstützt o<em>gg, vorbis, mp3, flac, aac, mod</em> und <em>wave</em> also alles was man braucht, oder? </p>
<p>Nein &#8211; das hört sich noch nach einem zu &#8220;normalen&#8221; Audioplayer an, denn das wohl schönste Feature ist: <span id="more-50"></span></p>
<p>Die Client/Server-Struktur in dem er sogar über das lokale Netzwerk bedienbar ist. (<em>sehr WG-tauglich</em>) Also los gehts:</p>
<p><strong>1) Installation</strong></p>
<p>Als erstes muss man natürlich den <strong>mpd</strong> installieren. In den meisten fällen, ist <strong>mpd</strong> in den Repositories der Distributionen die man einset zt enthalten. Mit, apt-get, pacman, emerge, etc. installieren.</p>
<p><strong>2) Konfiguration</strong></p>
<p>Nachdem <strong>mpd</strong> nun installiert ist, sollten erstmal zwei Verzeichnisse im Home-Verzeichnis erstellt werden. Das ist wichtig, damit man später <strong>mpd</strong> auch als Benutzer laufen lassen kann.</p>
<blockquote><p><code>mkdir ~/.mpd/<br />
mkdir ~/.mpd/playlists</strong></code>
</p></blockquote>
<p><strong>2a) Die <em>mpd.conf.example</em></strong></p>
<p>Nun geht es an die eigentliche Konfiguration: </p>
<p>Bei der Installation hat <strong>mpd</strong> in <em>/etc/</em> eine mpd .conf.example angelegt, die man bearbeiten muss und anschließend als mpd.conf abspeichert. Öffnet diese Datei mit dem Editor eurer Wahl.</p>
<p>z.B.:</p>
<blockquote><p><code>nano /etc/mpd.conf.example</code></p></blockquote>
<p>Das Erste, was einem auffällt ist das die ganze Konfiguratonsdatei mit einer Raute (#) auskommentiert ist. Bei allen Einstellungen die jetzt vorgenommen werden ist zu beachten, daß die Raute vor der jeweiligen Zeile zu entfernen ist.</p>
<p><strong>2b) music_directory &amp; playlist_directory</strong></p>
<p>Das wohl Wichtigste ist, mpd zu sagen wo sich das Musikverzeichnis befindet. Dazu muß der <strong>komplette</strong> Pfad angegeben werden. Dies sieht bei mir z.B. so aus:</p>
<blockquote><p><code># An example configuration file for MPD<br />
# See the mpd.conf man page for a more detailed description of each parameter.</p>
<p>#####REQUIREDPATHS#############<br />
<strong>music_directory                 "/media/sda5/Musi"<br />
playlist_directory              "~/.mpd/playlists"</strong><br />
db_file                         "~/.mpd/mpd.db"<br />
log_file                        "~/.mpd/mpd.log"<br />
error_file                      "~/.mpd/mpd.error"<br />
############################<br />
</code></p></blockquote>
<p>Die <em>playlist_directory</em> haben wir in unserem Home-Verzeichnis angelegt den wir damit direkt angeben. <strong>db</strong>_, <strong>log</strong>_ und <strong>error</strong>_file legt <strong>mpd</strong> selbst an, also sind keine Änderungen erforderlich.</p>
<p><strong>2c) User-Variable</strong></p>
<p>Jetzt gehts zum <strong>mpd</strong> als Benutzer laufen zu lassen. Hierfür setzt man einfach seinen Benutzernamen in die User-Variable, wie z.B. in meinem Fall:</p>
<blockquote><p><code>##########DAEMON OPTIONS ################<br />
#<br />
# If started as root, MPD will drop root privileges and run as<br />
# this user instead.  Otherwise, MPD will run as the user it was<br />
# started by.  If left unspecified, MPD will not drop root<br />
# privileges at all (not recommended).<br />
#<br />
<strong>user                            "ben"</strong><br />
#<br />
# The address and port to listen on.<br />
#<br />
<strong>bind_to_address                 "any"<br />
port                            "6600"</strong><br />
#</code></p></blockquote>
<p>Das <em>bind_to_address</em> kann man ruhig auf &#8220;<em>any</em>&#8221; lassen, damit sagt man nur das jeder der im LAN angemeldet ist, auf <strong>mpd</strong> zugreifen darf. (nur was Musik hören angeht) Der port &#8220;6600&#8243; ist der Standartport und braucht nicht verändert werden, da er nur für den Client später wichtig ist.</p>
<p><strong>2d) ***PREMISSIONS***</strong></p>
<p>Dem Punkt <em>******PREMISSIONS******</em> braucht man keine Beachtung schenken, weil man mpd nur als root updaten oder verändern kann. Wer will kann natürlich trotzdem ein Password angeben und Rechte verteilen. </p>
<p><strong>2e) Sound-Device</strong></p>
<p>Benutzt du <strong>alsa</strong>, und willst <strong>mpd</strong> auch über alsa betreiben, so kannst du die Konfigurationsdatei so belassen, wie sie momentan ist. </p>
<p>Wenn du jedoch <strong>esd</strong> oder einen anderen Soundserver installiert hast, wird die Sache komplizierter, denn dann solltest du alsa als Ausgabegerät angeben. Hier die nötigen Einstellungen:</p>
<blockquote><p><code># An example of an ALSA output:<br />
#<br />
<strong>audio_output {<br />
        type                    "alsa"<br />
        name                    "My ALSA Device"<br />
        device                  "hw:0,0"     # optional (oder dmixer)<br />
        format                  "44100:16:2" # optional</strong><br />
}<br />
#<br />
#</p>
<p># An example for controlling an ALSA mixer:<br />
#<br />
<strong>mixer_type                      "alsa"<br />
mixer_device                    "default"  # optional (dmix)<br />
mixer_control                   "PCM"</strong><br />
#<br />
#</code></p></blockquote>
<p><strong>2f) Speichern als&#8230;</strong></p>
<p>So das wars mit der <em>mpd.conf.example</em> nun ist es <strong>wichtig</strong>, sie als<br />
<em>/etc/mpd<strong>.conf</strong></em> abzuspeichern.</p>
<p><strong>3) Los gehts!</strong></p>
<p>Als Erstes erzeugt man eine Datenbank. Hierbei sammelt <strong>mpd</strong> Informationen über die Musik die im (in der mpd.conf angegebenen) Musikverzeichnis ist. Der Befel dafür ist:</p>
<blockquote><p>
<em>/etc/rc.d/mpd create-db</em>
</p></blockquote>
<p>Das kann jetzt ein bischen dauern, je nachdem wie groß die Datenbank ist. Wenn <strong>mpd</strong>  fertig ist (es wird eine entsprechende Meldung ausgegeben) kann man mittels:</p>
<blockquote><p><code>/etc/rc.d/mpd start</code></p></blockquote>
<p>oder als User mit:</p>
<blockquote><p><code>mpd</code></p></blockquote>
<p>den music-player-daemon starten.</p>
<p><strong>4) Und wie höre ich jetzt Musik?</strong></p>
<p>Dazu ist ein Client nötig. Informationen über die gängigsten findet man auf der Projektwebseite von <a href="http://www.musicpd.org/">mpd</a> oder für die Shell natürlich hier.</p>
<p>Wenn noch Fragen offen sind, kann mal die Manpage von mpd zu Rate ziehen, ansonsten viel Spaß beim Musik hören.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pimpmyshell.de/2006/12/21/mpd-music-player-daemon/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
