Mac OS X Yosemite ignoriert DNS Suchdomains

Der lokale DNS Resolver in Mac OS X 10.10 (Yosemite) berücksichtigt die eingetragenen Suchdomains (mal wieder) nicht, wenn der gesuchte Hostname bereits einen Punkt enthält. Leider hat sich auch der Resolver geändert, so dass die Tipps aus 2011 hier auch nicht mehr helfen.

Mit dem Update auf 10.10.1 gibt es aber wieder eine Option, mit der man diese Funktion wieder herstellen kann:

sudo defaults write \
        /System/Library/LaunchDaemons/com.apple.discoveryd.plist \
        ProgramArguments -array-add "--AlwaysAppendSearchDomains"

Danach einfach noch den discoveryd durchstarten

sudo launchctl unload -w \
     /System/Library/LaunchDaemons/com.apple.discoveryd.plist
sudo launchctl load -w \
     /System/Library/LaunchDaemons/com.apple.discoveryd.plist

und danach funktioniert es wieder wie gewünscht.

Koffein für den Berglöwen

Folgendes Problem hatte ich seit dem Upgrade auf Mac OS Mountain Lion: Das System scheint wesentlich agressiver zu sein was das Einschlafen (idle sleep) angeht. Während beispielsweise meine Macports neu kompilierten schlief das System regelmäßig nach der in den Energie-Einstellungen festgelegten Zeit ein, da ich es nicht anderweitig nutzte.

Abhilfe schafft das von Apple mitgelieferte Kommandozeilen-Tool caffeinate.

Mit caffeinate kann man Prozesse einfach so ausführen wie man das von sudo kennt, also beispielsweise so:

caffeinate sudo port upgrade outdated

Man schreibt caffeinate einfach vor den Befehl, der auf jeden Fall abgeschlossen werden soll, bevor das System einschläft. Das klappt auch in Kombination mit sudo, time etc.

Ich nutze caffeinate auch gerne, um im Nachhinein dafür zu sorgen, dass der Rechner eine Weile an bleibt, das geht so:

caffeinate -s -t 3600

Dieser Befehl sorgt dafür, dass das System eine Stunde (3600 Sekunden) lang nicht einschläft. Der Bildschirm wird allerdings einschlafen – was ja bei der Ausführung von Jobs im Hintergrund nicht weiter stören dürfte.

caffeinate kennt noch ein paar weitere Optionen. Welche, verrät uns die Manpage (die man mit man caffeinate aufruft):

Available options:

     -d      Create an assertion to prevent the display from sleeping.

     -i      Create an assertion to prevent the system from idle sleeping.

     -s      Create an assertion to prevent the system from sleeping. This assertion is valid only when system is running on AC power.

     -u      Create an assertion to declare that user is active. If the display is off, this option turns the display on and prevents
             the display from going into idle sleep. If a timeout is not specified with '-t' option, then this assertion is taken with
             a default of 5 second timeout.

     -t      Specifies the timeout value in seconds for which this assertion has to be valid. The assertion is dropped after the speci-
             fied timeout. Timeout value is not used when an utility is invoked with this command.

TimeMachine auf Debian squeeze mit netatalk 2.2

Beim Aufsetzen meines neuen Heimservers als Ersatz für das qnap TS-412 (mit dem ich aus verschiedenen Gründen unzufrieden bin) wollte ich die praktische TimeMachine-Funktion nicht verlieren und habe mich etwas schlau gemacht.

Unter Linux gibt es netatalk, mit dessen Hilfe AppleTalk etc. zur Verfügung steht. Mac OS (ab 10.7 alias „Lion“) verlangt nach mindestens Version 2.2, unter Debian squeeze gibt es diese Version aber noch nicht. Also habe ich sie kurzerhand selbst kompiliert. Folgendes sollten wir vorher machen, um die Dependencies zu installieren:

aptitude install avahi-daemon avahi-utils \
  libavahi-client-dev libcrack2-dev libgcrypt11-dev \
  libssl-dev libwrap0-dev libkrb5-dev libdb4.8-dev \
  db4.8-util libpam-cracklib

Nach dem Herunterladen der aktuellen netatalk-Version (bei mir 2.2.1) von http://netatalk.sourceforge.net/ und dem Entpacken wird das Paket dann mit folgenden Befehlen kompiliert und installiert:

./configure \
  --with-shadow \
  --with-pam \
  --enable-fhs \
  --enable-tcp-wrappers \
  --enable-timelord \
  --enable-overwrite \
  --with-pkgconfdir=/etc/netatalk \
  --enable-krb4-uam \
  --enable-krbV-uam \
  --with-cnid-dbd-txn \
  --with-libgcrypt-dir \
  --with-cracklib=/var/cache/cracklib/cracklib_dict \
  --enable-ddp \
  --enable-zeroconf \
  --enable-debian
make
make install

Die configure-Optionen habe ich aus dem Debian-Source-Päckchen der Version auf squeeze übernommen und sinngemäß ergänzt bzw. korrigiert, da sich die Optionen der neueren Version etwas unterscheiden.

Hier muss man unter Ubuntu 12.04 LTS einsteigen:

Anschließend ist noch etwas Konfigurationsarbeit zu tun. Zunächst sollte ein Verzeichnis oder vielleicht besser eine gemountete, eigene Partition für TimeMachine-Backups vorhanden sein. Anschließend aktivieren wir in der Datei /etc/default/netatalk folgende Optionen:

ATALKD_RUN=yes
ATALK_BGROUND=yes

Danach sollten wir noch folgendes tun:

echo "- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword -mimicmodel RackMac" >> /etc/netatalk/afpd.conf

echo "
# TimeMachine Volume
/opt/timemachine/$u TimeMachine options:tm,usedots,upriv allow:@users" >> /etc/netatalk/AppleVolumes.default

Letzteres sorgt dafür, dass /opt/timemachine/$u ($u = Username des vom Mac aus an dem Share angemeldeten Benutzers) als Volume „TimeMachine“ freigegeben wird. Erlaubt sind alle Benutzer, die Mitglied der Gruppe users sind (allow:@users).

Nun kann netatalk gestartet werden:

/etc/init.d/netatalk start

netatalk – genauer gesagt der atalkd – benötigt einige Zeit um zu starten. Der Start erfolgt im Hintergrund. Man sollte jetzt etwa eine Minute vergehen lassen vor dem Versuch, mit dem Mac eine Verbindung zum Volume herzustellen.

Damit das Ganze auch nach einem Neustart wieder funktioniert, müssen wir noch folgendes tun:

update-rc.d netatalk defaults

iMovie – Projekte auf Netzwerk-Share auslagern

Im Zuge des Verschiebens vieler meiner Daten vom iMac auf ein externes Storage ist mir aufgefallen, dass iMovie offensichtlich nicht so gerne mit Netzwerk-Shares zusammen arbeitet.

Abhilfe schafft folgender Befehl im Terminal:

defaults write -app iMovie allowNV -bool true

Einziges Problem ist nachher vielleicht die Zugriffsgeschwindigkeit. Video ist ja bandbreitenintensiv. Zum Bearbeiten kopiere ich die Sachen also lieber auf die lokale Platte, aber für’s Archiv kann ruhig das Netzwerk-Share her halten.

Lokaler DNS Resolver ignoriert Suchdomains in Mac OS X Lion

Der lokale DNS Resolver in Mac OS X 10.7 (Lion) berücksichtigt die eingetragenen Suchdomains nicht, wenn der gesuchte Hostname bereits einen Punkt enthält.

Enthält der Suchdomaineintrag „example.com“, war es bisher möglich mit ping www.subdomain den Host www.subdomain.example.com zu erreichen. Mit MacOS X Lion ist dies jetzt nicht mehr möglich. Mit einer Änderung der Optionen für den lokalen DNS Resolver ist es möglich, den alten Zustand wieder herzustellen. Hierzu muss die Option -AlwaysAppendSearchDomains aktiviert werden.

Da in der Regel keine Optionen gesetzt sind, kann dies durch den Befehl

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array-add "-AlwaysAppendSearchDomains"

erreicht werden. Danach muss der mDNSResponder neu gestartet werden.

sudo launchctl unload -w \
           /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w \
           /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Ein weiterer Parameter für den mDNSResponder ist -NoMulticastAdvertisements. Damit kann man verhindern, dass diverse Dienste nicht mehr per Multicast verkündet werden. Allen voran ist hier Bonjour zu nennen.

Ähnlich wie bei -AlwaysAppendSearchDomains kann diese Option mittels

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array-add "-NoMulticastAdvertisements"

eingestellt werden.

Für den Fall, dass man das Ganze wieder Rückgängig machen will/muss, kann dies durch den Befehl

sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder \
        ProgramArguments -array /usr/sbin/mDNSResponder -launchd

erreicht werden.

IPv6 Neighbors unter Mac OS anzeigen

Ich habe neulich etwas länger nach dem richtigen Befehl gesucht, um unter Mac OS die IPv6 Neighbor Table (das, was unter IPv4 die ARP-Tabelle ist) ausgeben zu lassen.

Unter Linux geht das ganz einfach mit dem ip Kommando, welches es unter Mac OS nicht gibt. Dort hilft folgender Befehl:

ndp -a -n

ndp steht für „Neighbor Discovery Protocol“. Die Parameter -a und -n erfüllen den gleichen Zweck wie für IPv4 beim arp Kommando: Anzeige aller Einträge und Deaktivierung der Namensauflösung. Der Befehl ndp kennt noch viele weitere Optionen. Mit

man ndp

kann man die Dokumentation anschauen.

Mutt unter Mac OS X mit IMAP und S/MIME

Möchte man den weit verbreiteten Kommandozeilen-MUA Mutt (http://www.mutt.org/) im Terminal oder iTerm (einer übrigens recht schönen Alternative zu Terminal.app) unter Mac OS X verwenden, so sind einige kleinere Hürden zu überwinden. Die praktikabelste Variante ist meiner Meinung nach die Installation aller erforderlichen Pakete aus dem MacPorts-Projekt. Und genau das ist das Thema dieses Artikels.

Folgende Pakete müssen (ggfs. nach vorherigem Setup der MacPorts-Umgebung) zunächst installiert werden:

sudo port install gpgme +smime
sudo port install keychain t-prot wget w3m urlview elinks
sudo port install dirmngr

Wichtig ist das „+“ in der ersten Zeile, weil es die Variante mit S/MIME-Unterstützung von gpgme installiert!

t-prot, eine ganz nette Software zur TOFU Protection ist optional, mir aber öfter als mir lieb ist ziemlich hilfreich. 😉

— Das hier braucht man anscheinend inzwischen nicht mehr: —
Bei mir ging allerdings die dritte Zeile, also das Kompilieren von dirmngr schief. Das lag daran, dass es Probleme mit der Version der libassuan aus den MacPorts gibt. Für den dirmngr aus MacPorts ist die zu neu. Deshalb habe ich ein aktuelleres dirmngr-Päckchen von http://www.gnupg.org/ herunter geladen, entpackt und kompiliert:

cd /opt
sudo mkdir software
sudo chmod 777 software
cd software
wget ftp://ftp.gnupg.org/gcrypt/dirmngr/dirmngr-1.1.0.tar.bz2
tar xjf dirmngr-1.1.0.tar.bz2
cd dirmngr-1.1.0

CPATH='/opt/local/include' CFLAGS='-pipe -O2 -arch x86_64' \
CPPFLAGS='-I/opt/local/include' \
CXXFLAGS='-pipe -O2 -arch x86_64' \
LIBRARY_PATH='/opt/local/lib' \
MACOSX_DEPLOYMENT_TARGET='10.6' \
LDAPLIBS='-lldap -llber' CXX='/usr/bin/g++-4.2' \
F90FLAGS='-pipe -O2 -m64' \
LDFLAGS='-L/opt/local/lib -arch x86_64' \
FCFLAGS='-pipe -O2 -m64' OBJC='/usr/bin/gcc-4.2' \
INSTALL='/usr/bin/install -c' \
OBJCFLAGS='-pipe -O2 -arch x86_64' FFLAGS='-pipe -O2 -m64' \
CC_PRINT_OPTIONS='YES' CC='/usr/bin/gcc-4.2' \
./configure --prefix=/opt/local

make
sudo make install

Die ziemlich lange, oft umgebrochene configure-Zeile mit den vielen Variablen habe ich mir aus der Variante zusammen gebastelt, die MacPorts zum Konfigurieren der (älteren) dirmngr-Version aus dem Repository verwendet. Sicherlich braucht man viele der Variablen nicht, ich hab sie aber einfach mit genommen, weil ich ehrlich gesagt zu faul war, das mehr als nötig zu optimieren. Da kommt es im Wesentlichen darauf an, dass beim Kompilieren die Libraries gefunden werden. Das Binary landet dann nach dem make in /opt/local/bin.
— Den Abschnitt bis hier braucht man anscheinend inzwischen nicht mehr. —

Im Anschluss daran können wir die mutt-devel Version aus den MacPorts installieren. Auch hierbei sind ein paar „variants“ zu beachten (die mit „+“):

sudo port install mutt-devel +ssl +headercache +sasl +smtp +gpgme
sudo port install muttprint

Das sollte anstandslos durch laufen und anschließend müsste der Befehl

mutt

zumindest irgendwie einen Mutt zum Vorschein bringen.

Bevor wir den Mutt wirklich verwenden können, müssen wir ihn erstmal konfigurieren. Das geschieht am einfachsten, indem wir ein Verzeichnis .mutt erzeugen und darin die komplette Konfiguration abwickeln. Die zentrale Konfigurationsddatei heißt dann .mutt/muttrc und sollte für den Anfang folgenden Inhalt haben:

# Some basics
set realname="Real Name"
set from="Real Name <real.name@provider.de>"
set signature=~/.mutt/signature
set alias_file=~/.mutt/mail_aliases

# IMAP Configuration
set folder="imap://mail.provider.de/"
set spoolfile="=INBOX"
set mbox="=INBOX"
mailboxes imap://mail.provider.de/INBOX
set imap_check_subscribed=yes
set imap_user=username
set imap_pass=`head -1 ~/.mutt/passwd`
set header_cache="~/.mutt/hcache/"
set smtp_url="smtp://username@mail.provider.de:587"
set certificate_file=~/.mutt/certificates
set mail_check=60

# Pager Configuration
set pager_context=4
set pager_index_lines=10
set pager_stop

# Printing
set print_command="muttprint -1 -P A4  -C 'ps2pdf - - | open -a preview -f' -z 10pt"
set print_split=Yes

# Editing
set editor="vim \"+set filetype=mail\""
set locale="de_DE"
set charset=utf-8
set send_charset=us-ascii:utf-8:iso-8859-1:iso-8859-15

# Additional headers
my_hdr Bcc: real.name@provider.de
unset record
my_hdr X-Editor: `vim --version | grep "VIM - Vi IM" | sed 's/(.*)/\<http:\/\/www.vim.org\>/g'`
my_hdr User-Agent: Mutt/`mutt -v | head -1 | cut -f 2- -d " "` `uname -sr | cut -f1 -d-`
set reverse_name
unset reverse_realname

charset-hook unknown-8bit ISO-8859-1

set folder_format="%2C %t %4N %F %2l %-8.8u %-8.8g %8s %d %f"  # format of the folder list
set index_format="%4C %M %Z %[%y/%m/%d %H:%M] %-18.18F (%4l/%4c) %s" # format of the index

set edit_headers

set allow_8bit
set noconfirmappend
set sort=threads
#set sort_aux=last-date-received
set strict_threads=Yes
set keep_flagged
set move=ask-yes
set delete=yes
set mime_forward=ask-yes

alternative_order text/enriched text/plain text/html text
auto_view text/html

# GnuPG and S/MIME stuff
set crypt_use_gpgme=yes
set pgp_use_gpg_agent=yes
set crypt_replyencrypt=yes
set crypt_replysign=yes
set crypt_autosign=yes
set pgp_timeout=3600
set smime_is_default=yes
set smime_default_key="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

# TOFU Protection Configuration (you need to install t-prot)
set my_tprot_cmd="t-prot -acelmt -S=5 -Mmutt --sigsmax --bigq --pgp-move --pgp-short --pgp-move-vrf"
set display_filter=$my_tprot_cmd

# toggle TOFU protection with ESC-0 and ESC-1
macro generic \e0 ":unset display_filter\n" "Turn TOFU protection off"
macro generic \e1 ":set display_filter='$my_tprot_cmd'\n" "Turn TOFU protection on"

# same in pager mode - ugly but what the hell...
macro pager \e0 ":unset display_filter; exec exit\n:exec display-message\n" "Turn TOFU protection off"
macro pager \e1 ":set display_filter='$my_tprot_cmd'; exec exit\n:exec display-message\n" "Turn TOFU protection on"

# Other configuration files
source ~/.mutt/colors-blackback
source ~/.mutt/mail_aliases

In die Datei .mutt/signature sollte eine Signatur, die unter jeder E-Mail vom Mutt automatisch eingefügt wird. Möchte man das nicht, kann man entweder einfach eine leere Datei erzeugen oder die Zeile mit set signature=... in der muttrc auskommentieren.

Falls Mutt sich später beim Starten über das Fehlen der Datei .mutt/mutt_aliases beschwert, dann sollte man einfach eine leere Datei anlegen.

Die Einstellungen im Block „IMAP Configuration“ müssen natürlich dem Provider entsprechend angepasst werden. Die Parameter sind alle in der Mutt-Dokumentation erklärt.

Im Block „Printing“ ist konfiguriert, dass Mutt beim Auslösen des Druck-Befehls einfach das in Mac OS X integrierte Vorschau-Programm öffnet. Von dort aus kann man dann die Mail drucken oder als PDF-Datei speichern. Das ist recht praktisch.

Im Block „Additional Headers“ ist konfiguriert, dass jede Mail automatisch als Blindkopie an die dort angegebene Adresse gesendet wird. Die Adresse sollte unbedingt korrigiert oder die Zeile auskommentiert werden.

Im Block „GnuPG and S/MIME stuff“ weiter unten in der Datei muss später der Fingerprint des S/MIME-Schlüsselpärchens eingegeben werden.

Ganz am Ende wird auf die Datei colors-blackback verwiesen, die einige Farbdefinitionen enthält, die in Terminals mit schwarzem Hintergrunf toll aussehen. So sieht die Datei colors-blackback aus:

# text colors - general functions
color normal	white		default		# normal text
color status	white   	blue		# status bar, last and first row
color search	yellow		red		# search results
color message	yellow		default		# information messages, last row
color error 	brightred	default		# error messages, last row
color markers	brightcyan	default		# the + sign at the start of broken lines

# text colors - message index and attachment menu
color indicator	white		red		# current message selected
color tree	brightred	default		# Threads' arrow
color index	yellow		default ~F	# important messages 	! flag - command "F"
color index	green		default ~N	# new messages		N flag - command "N"
color index	magenta		default ~T	# tagged messages	* flag - command "t"
color index	green		default ~U	# unread messages
color index	blue		default ~D	# deleted messages      D flag - commands "d"/"u"

# text colors - pager
color hdrdefault yellow	default			# headers
color header	green 	default ^(From|Subject): # header from: subject:
color header	red 	default ^Resent-[^:]+:	# resent header
color bold	green	default			# bold on mails' body
color underline	yellow	default			# underlined
color attachment	magenta	default		# attachments
color signature	blue	default
color tilde	magenta	default
color quoted	magenta	default

# Ronald J Kimball's url regexp. mutt-user 04/05/28
color body	magenta	default	"(https?|ftp|gopher|finger)://([^"'"'"' \t\r\n)>.,!?&]\
|[.,!?][^"'"'"' \t\r\n)>.,!?&]|&([^g]|$)|&g([^t]|$)|>([^;]|$))+"
color body	red	default "[-a-zA-Z_0-9.+]+@[-a-zA-Z_0-9.]+"

# enphasized text
color body	green	default	"[*][-[:alnum:]]+[*]"
color body	green	default	"[ ]_[-[:alnum:]]+_([ ]|\.)"

Folgende Zeilen sollten wir anschließend noch in die Datei ~/.mailcap (direkt im Homeverzeichnis des Users, nicht im Verzeichnis .mutt) schreiben, damit Mutt einigermaßen komfortabel HTML-Parts anzeigen und PDF-Dateien öffnen kann:

text/html; /opt/local/bin/w3m -dump -T text/html '%s'; copiousoutput; description=HTML Text; nametemplate=%s.html
application/pdf; open '%s'; copiousoutput; needsterminal
image/png; open '%s'; copiousoutput; needsterminal
image/jpeg; open '%s'; copiousoutput; needsterminal

Nach der Mutt-Konfiguration müssen wir uns nun dem Thema S/MIME widmen. Ich gehe davon aus, dass bereits ein S/MIME-Zertifikat vorhanden ist. Üblicherweise liegt das im PKCS#12-Format vor. Man bekommt das, wenn man das Zertifikat beispielsweise aus dem Firefox exportiert.

Im folgenden gehe ich davon aus, dass die Datei mit dem S/MIME-Zertifikat bundle.p12 heißt. Dann sind folgende Schritte nötig, um alles für den Mutt vorzubereiten:

openssl pkcs12 -in bundle.p12 -out bundle.pem -nodes
openssl pkcs12 -in bundle.p12 -out certs.pem -nokeys -nodes
openssl pkcs12 -in bundle.pem -export -out key.p12 -nocerts -nodes

Beim Exportieren in die Datei key.p12 wird im folgenden angenommen, dass als Passphrase „passphrase“ eingegeben wurde. Die muss leider im folgenden einmal auf der Kommandozeile eingegeben werden (man kann das danach ja mit geeigneten Mitteln aus der Bash-History löschen):

gpgsm --call-protect-tool --p12-import -P passphrase --store key.p12
gpgsm --import chain.pem
gpgsm --import certs.pem

In der Datei chain.pem sollten sich die benötigten Root-Zertifikate befinden. Anschließend sollte noch eine Trustlist erzeugt werden:

gpgsm --list-keys 2>/dev/null | grep fingerprint | awk '{print $2 " S"}' >> ~/.gnupg/trustlist.txt

Damit hat sich’s eigentlich. Der Fingerprint des eigenen Zertifikats muss noch in die Mutt-Konfiguration, man bekommt ihn mit folgendem Befehl raus:

gpgsm --list-secret-keys

Meine Mutt-Konfiguration ist inzwischen um einiges gewachsen, aber das hier beschriebene sollte eigentlich ausreichen um eine lauffähige, halbwegs komfortable Umgebung zu bekommen.

iPhone Mailprogramm – unerwünschte IMAP-Ordner ausblenden

Wenn man auf seinem iPhone, iPad oder iPod Touch das Mailprogramm von Apple benutzt, wird man gegebenenfalls relativ schnell festgestellt haben, dass man zwar wunderbar per IMAP auf sein Mailkonto zugreifen kann, aber leider immer alle IMAP-Ordner abonniert sind. Das heißt, die Liste der Mailordner kann unter Umständen recht lang werden.

Vielleicht will man auf seinem iPhone aber nur die wichtigen Ordner seines Postfachs sehen und nicht immer durch die lange Liste scrollen. Leider bietet uns Apple (jedenfalls bis jetzt) keine Option, die Liste entsprechend einzuschränken (Stichwort „abonnierte Ordner“). Noch nicht einmal die Option besteht, die auf dem Server gespeicherte Liste der abonnierten Ordner zu berücksichtigen, die in der Regel von richtigen Mailprogrammen verwendet wird.

Abhilfe schafft da ein kleiner Trick. Dazu ist es allerdings nötig, auf seinen Mailspeicher auf dem (eventuell eigenen) Mailserver per SSH o.ä. zugreifen zu können. Dort kann man dann nämlich mit ein paar symbolischen Links kleine „Wunder“ bewirken. Das mobile Apple-Mailprogramm kenn nämlich den Parameter „IMAP-Pfad-Präfix“, der eigentlich dazu dient, den richtigen Pfad zu den Mailordnern zu setzen. Diesen Umstand können wir uns zunutze machen, indem wir auf unserem Mailserver einfach symbolische Links erzeugen, die das eingestellte IMAP-Präfix enthalten.

Auf dem iPhone sieht das dann so aus wie auf dem Bild. Als IMAP-Pfad-Präfix ist hier „iphone“ eingetragen.

Auf dem Server fangen die Mailordner in der Regel mit einem Punkt an, also z.B. .ordner1 oder bei Unterordnern .ordner1.unterordner1. Wir erzeugen nun Links, die genau wie das Original heißen, jedoch .iphone voran gestellt haben. Und zwar für alle Ordner, die wir auch auf dem iPhone/iPad/iPod Touch sehen wollen:

.iphone.ordner1 -> .ordner1
.iphone.ordner1.unterordner1 -> .ordner1.unterordner1
.iphone.ordner3 -> .ordner3
.ordner1
.ordner1.unterordner1
.ordner2
.ordner3

Das war’s eigentlich schon. Das iPhone wird beim nächsten Aktualisieren nur noch die Ordner anzeigen, die wir mit einem voran gestellten .iphone verlinkt haben.

HID Devices in VMware wie Keyboard oder Yubikey

Manchmal braucht man auch solche Geräte in einer VMware um zum Beispiel den Yubikey neu zu Programmieren oder um einen Barcode-Scanner zu verwenden. Das Problem hierbei ist, dass VMware solche Geräte nicht von allein durchschaltet. Nach etwas Suchen im Web bin ich aber auf eine Lösung gestoßen, die funktioniert, so dass ich endlich auch Yubikeys mit meinem Mac in einer VMware neu Programmieren kann.

Da mit das ganze funktioniert muss man einfach das .vmx-File seiner virtuellen Maschine nehmen und am Ende um folgende Zeile ergänzen:

usb.generic.allowHID = "TRUE"

Wichtig ist, dass die VM ausgeschaltet ist, damit die Einstellungen beim nächsten Starten übernommen werden.

Nun kann man auch den Yubikey unter usb Geräte an die VM durchreichen und ihn so neu beschreiben.

Der MAC und die „toten Tasten“

In den Tastatur Layouts eines Macs sind einige Tasten tote Tasten (sog. dead keys). Wenn man weniger häufig akzentuierte Buchtaben benötigt, die man nicht direkt mit der Tastatur eingeben kann (bspw. á,â, ñ, …) und/oder die Zeichen ^,´ oder ~ häufig benötigt, kann es sehr störend sein, immer ~[SPACE] oder ^[SPACE] einzugeben.

Unter Linux ist es einfach. Hier bedient man sich der Option des X-Servers nodeadkeys. Unter Mac OS X ist das so einfach nicht möglich.

Mit Hilfe des Mac OS X Keyboard Layout Editor Ukelele kann man sich ein neues Tastaturlayout erstellen, welches über keinerlei tote Tasten mehr verfügt.

Ein Tastaturlayout für eine deutsche Tastatur ohne dead keys findet man als keyboardlayout bundle in Deutsch – NoDeadKeys.bundle.

Es gibt mehrere verschiedene Plätze, an denen man dieses Bundle installieren kann (Sollte das Verzeichnis nicht existieren, muss man es anlegen):

~/Library/Keyboard Layouts             -> Layout nur für den Benutzer verfügbar
/Library/Keyboard Layouts               -> Layout für alle Benutzer des Computers verfügbar
/Network/Library/Keyboard Layouts -> Layout für alle Benutzer im Netzwerk verfügbar

Ist das Bundle installiert, muss man sich einmal ab- und wieder anmelden. Danach findet man in den Systemeinstellungen Sprache & Text einen neuen Eintrag Deutsch – NoDeadKeys.

Ich habe in den Einstellungen beide Layouts und die Option Engabequellen in der Menüleiste anzeigen aktiviert und kann jetzt über die Landesfahne in der Menüleiste das Layout jederzeit schnell ändern.