Mavericks: Clamshell mode

Um den Clamshell mode (MacBook geöffnet, internes Display aus) zu reaktivieren, folgende Schritte ausführen:

  1. Im Terminal: sudo nvram boot-args="iog=0x0"
  2. MacBook neustarten
  3. BlueTooth-Gerät anmelden (vorzugsweise Maus)
  4. Deckel schliessen (der externe Bildschirm sollte jetzt ebenfalls aus gehen)
  5. Maus bewegen!
  6. Voila! Externer Bildschirm geht an, interner nicht.

Um den Default wiederherzustellen einfach das PRAM zurücksetzen. Hier der Link zum Thread.

Mountain Lion: Kill the dashboard

Das Dashboard unter Mac OS X ist für mich recht nutzlos. Es behindert allenfalls die Navigation zwischen den virtuellen Desktops und verbraucht überdies wertvolle Resourcen. Es läßt sich relativ einfach deaktivieren, indem folgende Zeile im Terminal (Terminal.app unter Anwendungen/Dienstprogramme) ausgeführt wird:

defaults write com.apple.dashboard mcx-disabled -boolean YES

Beim nächsten anmelden am Mac bleibt das Dashboard weg. Wer nicht solange warten will, kann mit folgendem Kommandozeilenbefehl das Dock neu starten und somit das noch laufende Dashboard beenden:

killall Dock

Nur zur Vollständigkeit: Wer das Dashboard doch vermissen sollte, kann es mit dem Kommandozeilenbefehl

defaults write com.apple.dashboard mcx-disabled -boolean NO

wieder aktivieren.

Das Prozedere sollte für alle Mac OS X Versionen seit 10.4 funktionieren (siehe hier).

Postfix und zusätzliche Domains

Immer wenn ein Mailserver ausfällt und ein anderer dessen Aufgaben mit übernehmen soll, sitze ich vor dieser doofen Posftfix-Konfigurationsdatei und frage mich, an welchen Stellen ich den zusätzlichen Hostnamen noch eintragen soll. Jetzt schreib‘ ich es einmal auf:  ($IP ist die Adresse des ausgefallenen Servers, $NAME ist sein fully qualified domain name (fqdn). Ich habe es mir zu Angewohnheit gemacht, die IP-Adresse des aufgefallenen Servers auf den Backup-Server zu übertragen, bis dieser wieder einsatzbereit ist.)

  1. IP an Interface anhängen
    # ip addr add $IP dev eth0
  2. /etc/postfix/main.cf editieren
    [...]
    inet_interfaces = $myhostname, localhost, $NAME
    [...]
    mydestination = $myhostname, localhost.$mydomain, localhost, $NAME
    [...]
  3. /etc/init.d/postfix stop
  4. /etc/init.d/postfix start

Das stopstart-Prozedere ist wichtig. Ein einfaches reload reicht nicht aus, restart sollte aber auch gehen.

Snow Leopard: ssh-Login-Problem

Nach einem Update von Mac OS X 10.5 (Leopard) nach 10.6 (Snow Leopard) war ein ssh-Login auf diesem Rechner nicht mehr möglich. Beim Versuch meldete der ssh-Client

$ ssh -vlroot 192.168.2.2
OpenSSH_5.2p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /etc/ssh_config
debug1: Connecting to 192.168.2.2 [192.168.2.2] port 22.
debug1: Connection established.
debug1: identity file /Users/[...]/.ssh/identity type -1
debug1: identity file /Users/[...]/.ssh/id_rsa type -1
debug1: identity file /Users/[...]/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.2
debug1: match: OpenSSH_5.2 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.2
debug1: SSH2_MSG_KEXINIT sent
Connection closed by 192.168.2.2

Hier sind beim Update offensichtlich die Zugriffsrechte der globalen ssh_host Files durcheinander geraten:

# ls -l /etc/ssh*
-rw-r--r-- 1 root wheel 1545 Feb 11 2010 /etc/ssh_config
-rw-rw-rw- 1 root admin 668 Sep 23 2011 /etc/ssh_host_dsa_key
-rw-rw-rw- 1 root admin 590 Sep 23 2011 /etc/ssh_host_dsa_key.pub
-rw-rw-rw- 1 root admin 963 Sep 23 2011 /etc/ssh_host_key
-rw-rw-rw- 1 root admin 627 Sep 23 2011 /etc/ssh_host_key.pub
-rw-rw-rw- 1 root admin 1671 Sep 23 2011 /etc/ssh_host_rsa_key
-rw-rw-rw- 1 root admin 382 Sep 23 2011 /etc/ssh_host_rsa_key.pub
-rw-r--r-- 1 root wheel 3723 Feb 11 2010 /etc/sshd_config

Diese müssen nach 0600 geändert werden, dann sollte es wieder laufen:

$ sudo chmod 600 /etc/ssh_host_*
$ ls -l /etc/ssh_host_*
-rw------- 1 root admin 668 Sep 23 2011 /etc/ssh_host_dsa_key
-rw------- 1 root admin 590 Sep 23 2011 /etc/ssh_host_dsa_key.pub
-rw------- 1 root admin 963 Sep 23 2011 /etc/ssh_host_key
-rw------- 1 root admin 627 Sep 23 2011 /etc/ssh_host_key.pub
-rw------- 1 root admin 1671 Sep 23 2011 /etc/ssh_host_rsa_key
-rw------- 1 root admin 382 Sep 23 2011 /etc/ssh_host_rsa_key.pub

In jedem Fall sollte man sicherstellen, dass sshd (unter SystemeinstellungenFreigabenEntfernte Anmeldung) aktiviert ist ;).

Emacs: Sitzung sichern

Den Zustand des Emacs kann man durch den Aufruf

M-x desktop-save

einfrieren. Hierbei werden alle Buffer, deren Dateinamen, major modes und Positionen gesichert (M-x heißt meistens Altx bzw. x auf dem Mac). Wenn man nach dem Verzeichnis gefragt wird, gibt man am besten sein Home (~/) an. Hier wird eine Datei namens .emacs.desktop.lock angelegt.

Nach einem Neustart des Emacs kann man nun mit

M-x desktop-revert

den vorher gespeicherten Zustand wiederherstellen. Sollte Emacs kein Desktopfile finden kann, muss man mit

M-x desktop-change-dir

das korrekte Verzeichnis angeben. Wer dieses Verhalten grundsätzlich wünscht (also speichern der Sitzung beim beenden und automatisches Laden der letzten Sitzung beim Start von Emacs) trägt ins Initfile (~/.emacs) folgende Zeile ein:

 (desktop-save-mode 1)
Wenn kein Desktop wiederhergestellt werden soll, kann man Emacs mit der Option --no-desktop starten.

Emacs twittering-mode aufhübschen

Hier nur eine kleine Anregung zur Formatierung der Timeline des Emacs twittering-modes: Diese wird über die Variable twittering-status-format kontrolliert. Folgende Zeile in ~/.emacs einfügen und schon wirkt die Timeline aufgeräumter und lesbarer:

(setq twittering-status-format "%i %FACE[bold]{%S} %FACE[shadow]{@%s}\n%FOLD[  ]{%t\n%FACE[shadow]{%RT{Retweeted by @%s} %@}}\n")

%i steht für Avatar-Icon und kann in der Timeline optional mit i ein- und ausgeschaltet werden oder durch setzen von

(setq twittering-icon-mode t)

dauerhaft aktiviert werden. (Ich bevorzuge die Timeline ohne Bilder – siehe Screenshot). Hier noch ein Listing aller Formatierungsanweisungen aus dem Quellcode:

%s - screen_name
%S - name
%i - profile_image
%d - description
%l - location
%L - \" [location]\"
%r - \" sent to user\" (use on direct_messages{,_sent})
%r - \" in reply to user\" (use on other standard timeline)
%R - \" (retweeted by user)\"
%RT{...} - strings rendered only when the tweet is a retweet.
 The braced strings are rendered with the information of the
 retweet itself instead of that of the retweeted original tweet.
 For example, %s for a retweet means who posted the original
 tweet, but %RT{%s} means who retweeted it.
%u - url
%j - user.id
%p - protected?
%c - created_at (raw UTC string)
%C{time-format-str} - created_at (formatted with time-format-str)
%@ - X seconds ago
%T - raw text
%t - text filled as one paragraph
%' - truncated
%FACE[face-name]{...} - strings decorated with the specified face.
%FILL[prefix]{...} - strings filled as a paragraph. The prefix is optional.
You can use any other specifiers in braces.
%FOLD[prefix]{...} - strings folded within the frame width.
 The prefix is optional. This keeps newlines and does not
 squeeze a series of white spaces.
 You can use any other specifiers in braces.
%f - source
%# - id

Emacs twittering-mode

An Twitter-Clients für Linux mangelt es eigentlich nicht. Wer aber schon immer gern einen Command-Line-Client haben wollte, oder beim täglichen arbeiten den Emacs ungern verlässt, dem sei twittering-mode (twmode) empfohlen. Ich will die Installation unter Linux (Scientific Linux 6.2) kurz umreißen (sollte auf dem Mac ähnlich funktionieren; unter Windows muss man auf die mitgelieferten Command-Line-Tools zurückgreifen):

Voraussetzungen:

Als erstes die benötigten Abhängigkeiten (Emacs-23 *lol*, curl, wget, gnutls-utils, openssl, gnupg) installieren. Weiterhin wird ein Webbrowser gebraucht — Auf dem Desktop sicher kein Problem; auf der Konsole empfiehlt sich w3m mit w3m.el. Folgender Befehl installiert die Abhängigkeiten unter RHEL 6

# yum install emacs curl wget gnutls-utils openssl gnupg2

Wenn twittering-mode vom Github-Repository installiert werden soll (was ich empfehle), muss ausserdem Git installiert werden:

# yum install git

Installation

Es empfiehlt sich Emacserweiterungen nach ~/.emacs.d zu installieren, was im folgenden auch beherzigt werden soll.

$ cd ~/.emacs.d
$ git clone git://github.com/hayamiz/twittering-mode.git

Zur Emacs-Konfigurationsdatei ~/.emacs muss folgendes hinzugefügt werden:

(add-to-list 'load-path "~/.emacs.d/twittering-mode")
(require 'twittering-mode)

Jetzt Emacs starten und den Twittering-Mode mit M+x twit[1] starten. TWmode meldet sich mit Authorization via OAuth.

Wer browse-url-generic-program in der Emacskonfiguration gesetzt hat, kann hier y drücken, ansonsten n drücken und den Link unter 1. anklicken oder via Copypaste im Browser der Wahl öffnen. Den angezeigten PIN-Code in den Emacs-Minibuffer eingeben und los geht’s mit Twitter im Emacs:

Dauerhafte Authorisierung:

Um nicht bei jedem Start von twmode erneut gegen Twitter autorisieren zu müssen, kann man folgende Zeilen in die Emacskonfiguration ~/.emacs aufnehmen:

(require 'epa-file)
(epa-file-enable)
(setq twittering-use-master-password t)

Hierzu wird GnuPG und EasyPG benötigt. Zumindest letzteres ist in Emacs 23 standardmäßig integeriert und kann durch die beiden führenden Zeilen im obigen Listing aktiviert werden [Update: Für Emacs 23 werden die zwei führenden Zeilen nicht benötigt — Sie schaden aber auch nicht. Dank an @cvmat]. Der oauth-access-token wird verschlüsselt unter ~/.twittering-mode.gpg gespeichert. Beim Start von twmode fragt pinentry die Passphrase zum Tokenfile ab und erlaubt hiermit die automatische Authorisierung gegen Twitter.

Wichtige Kommandos:

u
Neuer Tweet
d
Neue Direct Message
Enter
Reply
F4
URL Verkürzung via tinyurl
C-c Enter
Retweet mit Zitat
C-u C-c Enter
Retweet
g
Timeline aktualisieren
g
Timeline aktualisieren
f
Timelines durchblättern
V
Beliebige Timeline
L
Timeline beliebiger Liste
C-c C-u
Eigene Timeline
C-c C-f
Following Timeline
C-c C-r
Reply Timeline (Antworten auf eigene Tweets)
C-c C-d
Direct Messages Timeline

C bedeutet Control. Zum Suchen von Begriffen in Tweets öffnet man eine neue Timeline (V) mit :search/SUCHBEGRIFF/.

[1] M+x bedeutet Meta und x gleichzeitig drücken. Meta ist auf PC-Tastaturen meistens auf der Alt und auf Mac-Tastauren auf cmd. In jedem Fall sollte die Tastenfolge Esc, x (nacheinander) funktionieren.

Mac OS X 10.6 Snow Leopard und Canon iR2270 (UFR II)

Ich habe heute versucht einen Canon imageRunner 2270 (iR2270) älteren Baujahrs auf Mac OS X 10.4 (Tiger) und 10.6 (Snow Leopard) zu installieren. Die Postscript-Treiber von der Canon-Website werden von diesem Drucker nicht unterstützt. Wenn man auf selbiger Website etwas nach unten rollt, findet sich ein, sogenannter UFR II Treiber v1.80. Unter Tiger ließ sich der Drucker anschließend installieren, wenn man im Dialog Drucker hinzufügen auf Weitere Drucker klickt. Wie im Bild gezeigt, wird der Drucker dann über Apple Talk gefunden und kann hinzugefügt werden. Hierzu ist es selbstverständlich nötig, dass Apple Talk sowohl vom Drucker als auch vom Mac unterstützt werden.

Die selbe Vorgehensweise führte unter Snow Leopard zu einem Dialog, bei dem der Hinzufügen-Knopf nicht funktioniert (wahrscheinlicher ist, das der UFR II Treiber v1.80 nicht 10.6-kompatibel ist). Auf der Website von Canon USA fand ich einen aktuelleren UFR II Treiber in Version 2.30. Dummerweise gab es jetzt keine Apple Talk-Option mehr (richtig, das wurde ja mit Snow Leopard eingestellt). Also habe ich den Drucker IP-basiert via LPD eingebunden und den UFR-Treiber aus der Liste ausgewählt (siehe Bild). Hierzu muss die IP-Adresse des Druckers bekannt sein, die man aber über sein Konfigurationsmenü erfahren bzw. einstellten kann.

Automatischer Neustart eines Jobs bei Absturz

Manchmal hat man Jobs die einfach nur laufen müssen (z. b. NIS Server, Name Server). Und wenn sie einmal abstürzen, interessiert mich erst einmal gar nicht das Warum. Vielmehr möchte ich das der Jobs einfach wieder los läuft – Am besten von allein. Die näheren Umstände des Absturzes kann ich ja später noch anhand des Logfiles untersuchen. Unter Solaris gibt es hierzu die Service Management Facility (SMF), die sicher stellt, dass Systemdienste laufen und nötigenfalls auch einen (oder mehrere) Neustart(s) des Dienstes versucht, falls dieser abstürzen sollte. Unter Linux habe ich noch kein Äquivalent dazu gefunden. Eine brutale Methode einen Job bei gelegentlichen Abstürzen automatisch erneut zu starten, ist, ihn in einer Endlosschleife aufzurufen:

while true; do ./jobs.sh; done

Diese Methode geht allerdings nach hinten los, falls jobs.sh ein ernsthaftes Problem hat und sofort nach dem Start wieder terminiert. Zur Sicherheit sollte man also die Neustartorgie durch einen Zähler begrenzen, z. B. auf 1000 Versuche:

for i in {1..1000}; do ./jobs.sh; done

Das ist nicht elegant, hilft aber gelegentlich abstürzende Programme am Laufen zu halten.  Ist der kritische Zählerstand erreicht, wird nicht weiter versucht den Job neu zu starten. Man kann sich hierüber z. B. per Mail an root an  informieren lassen:

for i in {1..1000}; do ./jobs.sh; done ; echo "Message" | mail -s "Job died." root