Jak sprawdzić, która karta wideo jest aktywna w MacBooku Pro?

14

Istnieje duża różnica w wydajności i zużyciu energii między dwiema kartami graficznymi w MacBooku Pro.

Problem polega na tym, że często zapominam, który z nich prowadzę. Może to skończyć się wyczerpaniem baterii w samolocie dość szybko. O ile wiem, musisz otworzyć preferencję systemu oszczędzania energii, aby zobaczyć, który z nich jest aktywny.

Czy ktoś wie o narzędziu, które wyświetli (na pasku menu, na pulpicie, niezależnie od tego) mój obecny status karty wideo? Szczególnie dobra byłaby komenda terminalowa, która zgłosiłaby, która z nich była aktywna. Mogę to wykorzystać jako część mojej konfiguracji GeekTool.

Jestem również w stanie napisać własne narzędzie, jeśli ktoś zdarzy się wiedzieć, gdzie w interfejsie API szukałbym tych informacji.

Czy ktoś ma jakieś pomysły?

EDYCJA: Poniższe odpowiedzi dotyczące system_profiler są zdecydowanie krokiem we właściwym kierunku. MBP pokazuje informacje dla OBU obu kart wideo, niezależnie od tego, która z nich jest aktywna ... ALE pokaże „wyświetlacz nie podłączony” dla wyświetlacza dołączonego do nieaktywnej karty. I powinny być w stanie coś skryptu, że dane go stamtąd.

EDIT2: Klucz pobiera dane wyjściowe z system_profier w formacie xml (za pomocą przełącznika -xml). Poniżej znajdują się skrypty, które analizują wynikową plist i wyświetlają wynik.

mmc
źródło

Odpowiedzi:

6

Zakładając, że system_profiler zgłosi tylko aktywny wyświetlacz (nie jestem blisko MBP, aby wiedzieć), jak podłączyć to do GeekTool:

system_profiler | grep GeForce | sed -e 's/:/ /'

Edytować:

Jeśli wyszczególnia nieaktywnego w tym samym wierszu, co „wyświetlacz nie jest połączony”, co powiesz na:

system_profiler | grep GeForce | grep - v "display not connected" | sed -e 's/:/ /'

Jeśli najpierw wyświetli listę aktywnych, a następnie:

system_profiler | grep GeForce | head -n 1 | sed -e 's/:/ /'

Jeśli aktywny jest drugi, zastąp głowę ogonem.

Ridogi
źródło
Dlaczego zastępujesz dwukropki spacjami?
Daniel Pendergast
4

http://codykrieger.com/gfxCardStatus

Jest to mała aplikacja, która znajduje się w pasku i daje Ci nie tylko używaną kartę, ale także kontrolę nad tym, jak i kiedy przełączać kartę. Na przykład można ustawić tylko zintegrowaną kartę graficzną, która będzie działać, gdy jest zasilana z baterii - itd ...

SS Cheema
źródło
gfxCardStatus został zaktualizowany dla Mountain Lion i Retina MacBook Pro.
slothbear
3

Korzystając z podstawowej idei przedstawionej w pozostałych dwóch odpowiedziach, napisałem następujące skrypty, aby określić, czy używasz „poprawnej” karty wideo (Prawidłowo = „na baterii i przy użyciu 9400” lub „na zasilaczu i używając 9600”)

Nie mam pojęcia, jak kruche są te skrypty ... polegają one na konkretnych danych pojawiających się w określonej kolejności w plist systemu_profile ... ale ta kolejność wydaje się spójna na moim komputerze. Umieszczenie go tutaj dla każdego, kto znajdzie to w Google.

Ruby: (wymaga zainstalowania klejnotu „Plist”)

# video_profiler.rb
require 'rubygems'
require 'plist'

# calculate video data
data = `system_profiler SPDisplaysDataType -xml`
structured_video_data = Plist.parse_xml(data)
display_status = structured_video_data[0]["_items"][0]["spdisplays_ndrvs"][0]["spdisplays_status"]

if (display_status.eql?('spdisplays_not_connected')) then 
    card = '9400'
else
    card = '9600'
end

# calculate power source data
data = `system_profiler SPPowerDataType -xml`
structured_power_data = Plist.parse_xml(data)
on_ac_power = (structured_power_data[0]["_items"][3]["sppower_battery_charger_connected"] == 'TRUE')

# output results
if (on_ac_power and card.eql?'9400') or (not on_ac_power and card.eql?'9600'):
    result = 'You\'re on the wrong video card.'
else
    result = "You\'re on the correct video card."
end

puts(result)

Pyton:

# video_profiler.py
from subprocess import Popen, PIPE
from plistlib import readPlistFromString
from pprint import pprint
sp = Popen(["system_profiler", "SPDisplaysDataType", "-xml"], stdout=PIPE).communicate()[0]
pl = readPlistFromString(sp)
display_status = pl[0]["_items"][0]["spdisplays_ndrvs"][0]["spdisplays_status"]
if (display_status == 'spdisplays_not_connected'): 
    card = '9400'
else:
    card = '9600'

# figure out battery status
sp = Popen(["system_profiler", "SPPowerDataType", "-xml"], stdout=PIPE).communicate()[0]
pl = readPlistFromString(sp)
on_ac_power = (pl[0]["_items"][3]["sppower_battery_charger_connected"] == 'TRUE')


if (on_ac_power and card == '9400') or (not on_ac_power and card == '9600'):
    result = 'You\'re on the wrong video card.'
else:
    result = "You\'re on the correct video card."

pprint(result)
mmc
źródło
2

Wiem, że to pytanie jest dość stare - ale dla tych, którzy wciąż się na niego natkną, może być miło wiedzieć, że są też inne możliwości. Dla najprostszych rozwiązań można sprawdzić GFXCheck , czyli prostą aplikację, która pokaże aktywną kartę graficzną w

micdah
źródło
2
lub gfxcardStatus, który dodatkowo pozwala wybrać, który z nich będzie używany ręcznie lub automatycznie na podstawie profilu mocy.
Robert S Ciaccio
2
Właściwie, wkrótce po napisaniu tego posta znalazłem gfxCardStatus i zainstalowałem go zamiast tego - znacznie lepiej. Posiada automatyczne przełączanie i mniej irytujący interfejs.
micdah
Czy kiedykolwiek wymyśliłeś, jak zakończyć zdanie?
Fixer1234
1

Nie mam tutaj żadnego nowego Pro MacBooka, ale aktywna karta powinna być widoczna w Profilu systemu. W terminalu użyj tylko, system_profileraby zobaczyć konfigurację systemu:

Zrzut ekranu zrzutu

Bryan Schuetz
źródło
0

Możesz użyć ruby ​​gem, active_gfxktóry napisałem: https://github.com/ChaosCoder/active_gfx

active_gfx pokazuje kartę graficzną aktualnie używaną przez system MacOS.

Zamiast przeglądać listę otwartych procesów w Activity Monitor, to narzędzie wypluwa obecnie używany układ graficzny, wysyłając zapytanie do system_profiler.

Jak active_gfxjest rubinowy klejnot, zainstaluj go przez gem install active_gfx.

ChaosCoder
źródło