Entfernen Sie Dienste unter OS X

15

Ich möchte einige Dienste vollständig oder zumindest aus der Liste im Bereich Tastatureinstellungen entfernen. Ich habe es versucht:

  1. Service Scrubber . Es werden nur Dienste aus dem Menü entfernt. Dies ist seit 10.6 in den Systemeinstellungen möglich.
  2. Dateien in ~/Library/Services/und entfernen /Library/Services/. Es ist nur so, dass die meisten Apps von Drittanbietern ihre Dienste nicht dort platzieren.
  3. defaults delete /Applications/SomeApp.app/Contents/Info NSServices. Die Dienste werden aus der Liste in den Systemeinstellungen entfernt. Es macht jedoch auch die Codesignatur des Bundles ungültig und die Änderungen können durch Aktualisierungen rückgängig gemacht werden.

Ich nehme an, Sie müssen sich nur mit der letzten Option zufrieden geben und codesignbei Bedarf neue Signaturen zuweisen . Aber gibt es einen einfacheren Weg?

Lri
quelle
Ah, die Schönheit von OS X kompliziert Dinge, die einfach sein sollten.
Cregox
Welche Version von OS X verwenden Sie? Die Interna von OS X ändern sich zwischen den Hauptversionen ziemlich drastisch.
Majenko
5
@ Kawas: Entfernen von Diensten ist einfach: Sie gehen zur Liste in den Systemeinstellungen und deaktivieren sie. Was Lri aus irgendeinem Grund tun möchte, ist, sie zu entfernen und sie unmöglich zu machen, wieder herzustellen. Warum sollte es einfach sein, Sachen zu zerbrechen?
LaC
@LaC ist in diesem Fall wohl Geschmackssache. In meinem Fall wollte ich gute alte Expose. Aber lassen Sie mich Ihre Frage umkehren: Es ist einfach, den Dienst zu dieser Liste hinzuzufügen - warum sollte es nicht einfach sein, ihn vollständig zu entfernen und sauber zu halten, wenn der Administrator dies wünscht?
Cregox
AFAICT, es ist genauso einfach. Sie fügen einen Dienst hinzu, indem Sie ihn in Library / Services ablegen oder eine Anwendung installieren, die ihn bereitstellt. Sie entfernen einen Dienst, indem Sie ihn aus der Bibliothek / den Diensten entfernen oder die Anwendung entfernen, die ihn bereitstellt.
LaC

Antworten:

3
#!/bin/sh

applist="Path Finder
Skim
TextWrangler"
IFS=$'\n'

for appname in $applist; do
    apppath=$(mdfind -onlyin /Applications/ -onlyin ~/Applications/ \
    -onlyin /Developer/Applications/ -onlyin /System/Library/CoreServices/ \
    'kMDItemKind == Application' | grep -i "/$appname.app$" | head -1)
    echo $apppath
    date=$(date '+%y%m%d%-H%M%S')
    cp "$apppath/Contents/Info.plist" "$apppath/Contents/Info-$date.plist"
    defaults delete "$apppath/Contents/Info" NSServices
    codesign -f -s - "$apppath"
done
Lri
quelle
Gibt es einen bestimmten Zertifikatstyp in Schritt 2?
Daniel Beck