Artikelformat

Target Display Mode automatisieren

Macs haben eigentlich ein nützliches Feature: den Target Display Mode. Damit lässt sich Bild und Ton eines externen Macs übernehmen (via Thunderbolt oder DisplayPort). Leider hat Apple das Feature nicht ganz zu Ende gedacht. Ich möchte mein Macbook Air 11″ gerne über den Bildschirm des iMac 27″ steuern. Im Target Display Mode wird jedoch nur der Bildschirminhalt übernommen. Maus und Tastatur muss ich weiterhin am Macbook bedienen. Unschön, wenn vor dem iMac eine externe Tastatur und ein Trackpad liegen.

iMac + Macbook Air

Statt unterschiedliche Tastaturen zu verwenden, habe ich nach einer anderen Lösung gesucht. Meine Eingebageräte verbinden sich via Bluetooth. Wenn Bluetooth auf einem Rechner deaktiviert und auf dem anderen aktiviert wird, verbinden sich die Geräte automatisch mit dem aktiven Host.

  1. CMD+F2 drücken um den Target Display Mode zu aktivieren.
  2. Bluetooth auf dem iMac deaktiveren
  3. Bluetooth auf dem Macbook aktivieren.

Das Problem: sobald der Target Display Mode aktiviert ist, lässt sich der iMac ohne Bild nur noch schlecht bedienen und somit kann auch Bluetooth nicht mehr deaktivert werden.

Die Rettung in der Not heisst blueutil (danke hugh!). Hiermit kann Bluetooth via Command-Line gesteuert werden. Dadurch wird zwar das Problem gelöst, aber die Bedienung ist immer noch äusserst umständlich. Ich habe mir deshalb ein kleines Shell-Script geschrieben, welches alle Einstellungen automatisch durchführt. Das Script wird auf dem Host (iMac) gestartet.

#!/bin/sh
# Toggle Display and Bluetooth v1.0
# Written by Matt <matt@geekbox.ch>

# Set your hostname
REMOTE=matts-macbook-air.local

# Wait for user to toggle display (check profiler for missing LCD)
until ! /usr/sbin/system_profiler SPDisplaysDataType \
        | grep "Display Type: LCD" > /dev/null; do
    echo "Press CMD+F2 to toggle Display Mode or CTRL+C to cancel."
    sleep 2
done

echo "Target mode triggered, toggle Bluetooth"
/usr/local/bin/blueutil off
ssh $REMOTE '/usr/local/bin/blueutil on'

# Wait for remote machine to disconnect
until /usr/sbin/system_profiler SPDisplaysDataType \
        | grep "Display Type: LCD" > /dev/null; do
    sleep 2
done

echo "Thunderbolt connection lost, toggle Bluetooth"
ssh $REMOTE '/usr/local/bin/blueutil off'
/usr/local/bin/blueutil on
echo "Welcome back!"

Damit dieses Shell-Script korrekt läuft, musst du den Hostname des zu übernehmenden Gerätes anpassen und deinen Public-Key in den authorized_keys des Ziel-Hosts hinterlegen. Danach kannst du das Script starten, CMD+F2 drücken und wie gewohnt mit Maus und Tastatur weiterarbeiten. Um den Target Display Mode zu beenden, ziehst du bloss das Kabel und der Host-Mac aktiviert seine Bluetooth-Geräte wieder.

Autor: Matthias

Gründer des GeekBox-Blogs und Inhaber der sitepoint gmbh. Mag Apfelkram, Tech Gadgets aller Art, sowie Mobile Devices welche uns das Leben leichter machen. Schreibt für den Blog in Markdown Pro auf einem MacBook Air, administriert mehrere Webserver und bastelt an Arduino-Projekten. Auch zu finden bei Twitter und Google+.

9 Kommentare

  1. Hi! Thanks a ton for this! The only problem I got is that i must type the password in the terminal each time. i’ve tried everything for ssh witouth password but nothing works in my case. i’ìve converted this script in an app. there is a way to modify it a bit ant let it send the password when asked in terminal? thanks a ton!

    Antworten
    • Have you tried to add your public key to your second computer? It’s usually named id_rsa.pub and located in ~/.ssh. In case you’re missing it use „ssh-keygen -t rsa“ to generate a new key pair. You need to copy the contents of your public key (i.e. id_rsa.pub) to your second computer to a file called ~/.ssh/authorized_keys. If it already exists just add your key to the end of the file. If that’s not the case create a new one and set permissions (chmod 0700 ~/.ssh && chmod 0600 ~/.ssh/authorized_keys).

      Antworten
  2. #3 Patrick

    03.09.2014 17:42

    Verstehe nicht ganz die Nummer mit dem Public-Key in den authorized_keys des Ziel-Hosts. Damit ich alles richtig verstehe: Mit dem Skript kann man die vom iMac eigens mitgelieferte Tastatur und Maus auf seinem MacBook benutzen und nachdem abstecken von Thunderbolt wieder am iMac mit den Geräten arbeiten?

    p.s. Kannst ja mal ein Tutorial Video machen^^

    Antworten
  3. hi and thanks for the reply! this is what i’ve done: generate a public key on my macbook pro, copied it to the imac .ssh folder and it still ask for a password….i will try again…

    Antworten
  4. done! the key is to copy the key from the macbook pro to the imac! thanks a ton! now is all automated…just one thing. i’ve created an app with your script and now everything is fine! the only thing is that if i disconnect and than connect the thunderbolt cable the app (or the bash) will close. and i must relaunch it again…any suggestion to make it in a kind of eternal loop? thanks!

    Antworten
  5. So, ich hab es nun auch endlich nach ein viel Friemelei geschafft! 🙂
    Hier ein paar Hindernisse, die sich mir als Anfänger gestellt haben:

    – WICHTIG: Um die Remote Verbindung zu ermöglichen muss in den Systemeinstellungen > Freigaben > „Entfernte Anmeldung“ (links in der Liste) aktiviert werden

    – .ssh-Verzeichnis, Public Key (.pub-Datei) und authorized_keys musste ich erstellen (auf beiden Rechnern)

    – Um eine passwortlose Verbindung zu ermöglichen mussten die Inhalte der .pub-Dateien von BEIDEN Rechnern (iMac & MacBook) in die jeweiligen authorzied_keys-Dateien BEIDER Rechner kopiert werden

    Antworten
  6. Okay… ich habe mich zu früh gefreut. Kommunikation zwischen den Rechnern funktioniert jetzt, aber das Script reagiert nicht, wenn ich den Bildschirmsynchronisations-Modus aktiviere.

    Das Script kommt im Hintergrund über „Press CMD+F2 to toggle Display Mode or CTRL+C to cancel.“ nicht hinaus. Woran kann das liegen?

    Antworten
  7. #8 Stephan Heid

    17.11.2015 12:57

    Hallo, versuche gerade dein script zu starten.
    Leider verstehe ich „Public-Key in den authorized_keys des Ziel-Hosts hinterlegen“ nicht.
    kannst Du mir dies bitte erklären……?

    bin am verzweifeln.

    Danke im voraus

    Antworten
  8. Auf dem Linux Zielsystem gibt es die Datei

    /home//.ssh/authorized_keys

    dort muss dein SSH public key rein. Das kannst Du mittels dem befehl

    ssh-copy-id @

    bewerkstelligen.

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.