• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Einstellungen des Docks verändern, wenn externes Display angeschlossen wird

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Liebe Apfeltalker,

vorab, ich kenne mich weder mit (Apple)Scripting noch mit dem Automator wirklich gut aus, arbeite mich aber ein, wenn ihr mir sagt, dass eines der Tool (oder etwas anderes) meine Idee umsetzen kann.

Ich habe ein MacBook Pro und hätte es gern, dass sich die Einstellungen des Docks in Abhängigkeit davon verändern, ob ein externes Display angeschlossen ist oder nicht. Und zwar soll das Dock, wenn kein externer Monitor angeschlossen ist, an der linken Seite dauerhaft eingeblendet sein; bei angeschlossenem Monitor soll das Dock dann unten stehen und automatisch aus- und eingeblendet werden.

Nach meinem rudimentären Verständnis müsste sich doch ein Script mit folgenden Elementen dafür eignen:

10 if "kein Monitor da" [gibt es hier ein Element, das diese Abfrage erlaubt und aktuell hält?]
20 tell "Systemeinstellungen"
30 set "Dock" auf "links" "kein Haken bei ein- und ausblenden" [man kann doch in AppleScript angeben, welche Schaltflächen wie bedient werden sollen, korrekt?]
40 else [ich schließe immer nur einen Monitor an, aber sollten es mal zwei sein, soll das Dock auch unten sein]
50 tell "Systemeinstellungen"
60 set "Dock" auf "unten" "Haken bei ein- und ausblenden"
70 end tell
80 end if

Stimmt das von der grundsätzlichen Logik her?

Und wie bekomme ich es hin, dass diese Aktion von allein ausgeführt wird, sowie ein Monitor an- bzw. abgeschlossen wird? Denn wenn ich das manuell starten müsste, bin ich mit dem Umstellen der Systemeinstellungen ja fast genau so kommod unterwegs...

Vielen Dank und Gruß,
Marc
 

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
OK, die Veränderung der Einstellungen des Docks müsste über System Events bzw. dort Dock Preferences gehen. Also

10 if "kein Monitor da"
20 tell application "System Events"
21 tell dock preferences
30 set autohide to false
31 set screen edge to left
40 else [ich schließe immer nur einen Monitor an, aber sollten es mal zwei sein, soll das Dock auch unten sein]
50 tell application "System Events"
51 tell Dock Preferences
60 set autohide to true
61 set screen edge to bottom
70 end tell
71 end tell
80 end if

richtig?

Bleibt mein Problem, wo greife ich die Information "es wird ein Monitor an- bzw. abgeschlossen" ab, und wie bringe ich dieses Script dazu, sich selbst zu starten.

Ich vermute, mit Gefrickel könnte ich über System Profiler im 2-Sekunden-Takt ein Systemprofil erstellen lassen, dieses nach dem Namen des externen Monitors durchsuchen, und dann den "if"-Auslöser daran knüpfen, ob der Name in der Datei enthalten ist. Aber das ist vermute ich mal die uneleganteste Lösung, die sich finden lässt...
 

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
@schlagi: Hast du inzwischen das Event "Monitor angeschlossen" gefunden? Würde nämlich auch gerne mit AppleScript was bauen, wofür ich das gebrauchen könnte...
 

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Nein, leider nicht. Habe das Script ins Dock gelegt, und wechsele nun per Klick darauf. Es funktioniert, nur nicht die eigenständige Erkennung...
 

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Schade. Danke für die Antwort!
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

die Anzahl der angeschlossenen Monitore und davon abhängige Aktionen könnte man so lösen
Code:
tell application "System Events"
set cod to count of desktops
if cod = 1 then
--tue dieses
else if cod = 2 then
--tue jenes
end if
end tell
_

das Skript am besten mit launchd starten..

Gruß
Sedna
 

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Das Skript, wie ich es jetzt habe, sieht so aus:

tell application "System Events"

set SecondDisplay to (count desktop) > 1



tell dock preferences

if SecondDisplay then

set screen edge to bottom

set autohide to true

else

set screen edge to left

set autohide to false

end if

end tell



end tell

Woran es bei mir scheiterte, ist das automatische Erkennen des Anschließen eines Monitors. Hier http://www.macuser.de/forum/thema/691599-Dockeinstellungen-ändern-bei-Multi-Monitor hatte ich wegen Ergebnislosigkeit dieses Themas die Frage auch gestellt, und mehr feedback bekommen.
 
  • Like
Reaktionen: wheeler

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Aber, was ihr macht ist ja, die Desktops zu zählen... Wenn ich aber auf einem Monitor mit 2 Schreibtischen arbeite, dann funktioniert das ja schon nicht mehr oder habe ich da einen Verständnisfehler?
 

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Mein - zugegeben rudimentäres - Verständnis ist, dass hier tatsächlich Monitore und nicht desktops gezählt werden. Habe es aber nicht probiert, da ich normalerweise auch nur einen Desktop pro Monitor nutze...
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Ja nee,
es gibt immer nur 1 Schreibtisch pro Monitor ..

die in Mission Control auftauchenden "Schreibtische" haben nichts damit zu tun und werden wohl auch in Systemdateien weiterhin als "Spaces" bezeichnet.

Und die Lösung im verlinkten Thread sollte so funktionieren...

Gruß
 

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Ach so, nachträglich: Sorry für den Crosspost :)
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Grins,

habe just in dem selben Moment daran gedacht, meinen Beitrag von eben zu editieren und dir Vorwürfe wegen des Crosspostings zu machen
szopf27x18.gif
 

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Hab's gerade mal ausprobiert
Code:
tell application "System Events"
    set cod to count of desktops
    if cod = 1 then
        display dialog "Ein Desktop"
    else if cod = 2 then
        display dialog "Zwei Desktops"
    end if
end tell

Liefert mir tatsächlich die Anzahl Monitore und nicht die Anzahl der Schreibtischoberflächen.
Danke euch erstmal!
 

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Also, der Timer funktioniert bei mir nun auch! Vielen Dank für den Link und die Hilfe!
 
  • Like
Reaktionen: schlagi

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Das hier ist die .plist:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.timed.Bluetooth</string>
    <key>Program</key>
    <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>/Volumes/Daten/Projekte/Entwicklung/Bluetooth.scpt</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>10</integer>
</dict>
</plist>

das hier das Script:

Code:
tell application "System Events"
    set cod to count of desktops
    if cod = 2 then
        tell application "System Preferences"
            set the current pane to pane id "com.apple.preferences.Bluetooth"
            tell application "System Events"
                tell process "System Preferences"
                    tell window "Bluetooth"
                        tell button 3
                            if name is "Bluetooth aktivieren" then click --Nur unter OS 10.10!!
                        end tell
                    end tell
                end tell
            end tell
            quit
        end tell
    end if
end tell

Erstmal nur zum Testen, wie es sich so verhält, macht das Skript Bluetooth an, wenn ein zweiter Monitor angeschlossen wird.

Und dann wird das mit launchctl gestartet.

Code:
launchctl load /Volumes/Daten/Projekte/Entwicklung/com.timed.Bluetooth.plist

So funktioniert es tatsächlich. Du kannst sogar das Skript ändern, während du rumprobierst.
Es müssen allerdings in den Systemeinstellungen osascript und AppleScriptEditor zugelassen werden, damit sie die GUI steuern dürfen (Zumindest bei meinem Script für die Bluetooth-Geschichte)
 
  • Like
Reaktionen: schlagi

schlagi

Weisser Rosenapfel
Registriert
09.07.13
Beiträge
782
Klasse, ganz herzlichen Dank... Dann mach ich die Bastelstube vielleicht nochmal auf...
 

wheeler

Himbeerapfel von Holowaus
Registriert
29.04.08
Beiträge
1.257
Mir ist allerdings was aufgefallen: Das ganze lief gestern so vor sich hin und nebenbei habe ich ein Video gesehen. Dabei lief der Lüfter relativ stark (MBP mid 2009, nur das interne Display aktiv). Nachdem ich den Launchagent mit launchctl unload deaktiviert hatte, ging die Lüfterdrehzahl merklich runter.
In der Aktivitätsanzeige war zwar nichts Verdächtiges zu erkennen aber vielleicht kann jemand von euch das mal im Auge behalten.
Vielleicht muss ich bei meiner Frau doch mal einen Antrag auf ein neues MBP stellen... ;)
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

entferne mal
<key>StartInterval</key>
<integer>10</integer>

der Agent läuft eh alle 10 Sekunden...
siehe auch man launchd.plist

Gruß