Odpowiedzi:
Wyłącz LaunchAgent (nie LaunchDaemons) i uruchom ponownie komputer ( bez sudo):
$ launchctl unload /System/Library/LaunchAgents/com.apple.gamed.plist
Jeśli chcesz włączyć go ponownie w jednym punkcie:
$ launchctl load /System/Library/LaunchAgents/com.apple.gamed.plist
sudo
launchctl list
?
Jednym z rozwiązań jest utworzenie skryptu bash, aby zatrzymać usługę gry po zalogowaniu. Użyj Automatora w OS X, aby utworzyć skrypt bash, a następnie dodaj go jako element logowania do swojego konta OS X. Przy następnym logowaniu powinieneś otrzymać monit o wykonanie skryptu. Zwykle czekam, aż zobaczę powiadomienie Little Snitch, że gra jest telefoniczna, a następnie klikam „Kontynuuj”, aby uruchomić skrypt. Nie zostało to dopracowane i możesz napotkać problemy, jeśli uruchomisz je natychmiast po zalogowaniu się do OS X. Wolę trzymać się z dala od rozwiązań, które wyłączają usługę, ponieważ wymagają wyłączenia / zastąpienia SIP, odradzam.
Oto skrypt bash, którego używam. Wszelkie sugestie dotyczące ulepszenia są mile widziane.
#!/bin/bash
chkService=gamed
chkCount=10
chkStatus=$(ps ax | grep "$chkService" | grep -v grep | grep " T " | wc -l)
while [ $chkStatus -ne 1 ]; do
chkProcess=$(ps ax | grep -v grep | grep "$chkService" | wc -l)
if [ $chkProcess -ne 0 ];
then
KILLALL -STOP "$chkService"
chkCount=0
chkStatus=$(ps ax | grep gamed | grep -v grep | grep " T " | wc -l)
else
SLEEP=1
chkCount=$((chkCount-1))
fi
done
Problem polega na tym, że zaakceptowana odpowiedź podana powyżej:
launchctl unload /System/Library/LaunchAgents/com.apple.gamed.plist
nie działa. Widziałem to również za pomocą -w
flagi. W każdym razie, w ostatnich aktualizacjach, myślę o El Capitan lub Yosemite, zamiast tego dostajesz wiadomość
Operacja niedozwolona, gdy włączona jest ochrona integralności systemu
Ochrona integralności systemu znana jest również pod skrótem SIP. Aby go wyłączyć, musisz uruchomić system Recovery OS i uruchomić csrutil disable
.
Zrobiłem tę sekwencję w poprzednich wersjach i doprowadziło to do możliwości wyłączenia gry za pomocą launchctl
polecenia.
Przypuszczam, że po wyłączeniu gry można ponownie włączyć SIP. Może to byłby najlepszy z obu światów, chociaż w sumie jest to żmudny proces.
co sudo launchctl unload /System/Library/Launch\ Daemons/com.apple.gamed.plist
?
w OS Sierra przejdź do Ustawień systemowych, kont internetowych i usuń (z minusem) Game Center z listy (po lewej stronie).
Z punktu widzenia bezpieczeństwa nie robi to żadnej różnicy, ponieważ po prostu przywraca system dokładnie tak, jak działał przed SIP, i dokładnie tak, jak działają prawie wszystkie systemy uniksowe. Wartość SIP jest w najlepszym razie dyskusyjna. Odpowiada na to pytanie, ponieważ jedynym sposobem na użycie polecenia Launchctl do rozładowania pliku listy odtwarzania jest najpierw wyłączenie SIP, uruchomienie, rozładowanie pliku listy odtwarzania, a następnie, w razie potrzeby, ponowne włączenie SIP.
Inną opcją, która działa w 10.11.6, jest odmiana metody sugerowanej przez @ Le-Sci. Utwórz skrypt powłoki, który wyłącza proces gry:
#!/bin/bash
sleep 30 && kill -9 "$(pgrep gamed)"
Polecenie uśpienia mówi skryptowi, aby poczekał 30 sekund przed rozpoczęciem procesu kończenia gry, aby dać systemowi wystarczająco dużo czasu na załadowanie gry przed próbą jej zakończenia; możesz dostosować czas oczekiwania w razie potrzeby. Polecenie „kill -9” wymusza zamknięcie żądanego procesu, ale akceptuje tylko numer identyfikacyjny procesu, a nie nazwę procesu, dlatego do wyszukania identyfikatora procesu służy „pgrep”. Zanotuj miejsce zapisania skryptu (w tym przykładzie zapiszę go jako „forceQuitGamed” w / Users / myaccountname /).
Daj uprawnienia do wykonywania skryptu:
sudo chmod +x ~/forceQuitGamed
Utwórz plik listy agenta uruchamiania, który będzie uruchamiany przy każdym logowaniu do konta. Jeśli wcześniej nie utworzyłeś pliku plist, możesz to zrobić za pomocą TextEdit. Plik skryptu musi być zapisany jako zwykły tekst, więc jeśli domyślne preferencje dla TextEdit wymagają formatowania tekstu sformatowanego, wykonaj polecenie Format> Utwórz zwykły tekst, aby przekonwertować na zwykły tekst, zanim spróbujesz użyć nowego pliku plist agenta uruchamiania.
<?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>Label</key>
<string>com.myaccountname.loginscript</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myaccountname/forceQuitGamed</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Łańcuch w tablicy pod „ProgramArguments” to ścieżka / do / twojego / powłoki. Zapisz plik w ~ / Library / LaunchAgents /. W tym przykładzie nazwałem plik plist com.myaccountname.forceQuitGamed.plist, więc można go znaleźć pod adresem
/Users/myaccountname/Library/LaunchAgents/com.myaccountname.forceQuitGamed.plist
Teraz za każdym razem, gdy logujesz się na swoje konto, gra powinna być wymuszona po kilku sekundach od załadowania. (Jeśli potrzebujesz, aby została zakończona jak najszybciej po załadowaniu, spójrz na metodę @ Le-Sci.) To podejście działa bez konieczności wyłączania Ochrony integralności systemu.
Musisz najpierw wejść csrutil disable
w Terminal w trybie odzyskiwania, a następnie ponownie uruchomić wprowadzić zmiany, ponownie uruchomić w trybie odzyskiwania i zrobić csrutil enable
, uruchom ponownie.
Ale nie wiem, które procesy po modyfikacji wpłyną na rozruch w El Capitan