14

Существует большая разница в производительности и энергопотреблении между двумя видеокартами в MacBook Pro.

Проблема в том, что я часто забываю, какой из них я использую. Это может привести к разрядке аккумулятора в самолете довольно быстро. Насколько я могу судить, вы должны открыть Системную настройку энергосбережения, чтобы увидеть, какая из них активна.

Кто-нибудь знает инструмент, который будет отображать (в строке меню, на рабочем столе, что угодно) мой текущий статус видеокарты? Особенно хороша будет команда терминала, которая сообщит, какая из них активна. Я мог бы использовать это как часть моей настройки GeekTool.

Я также могу написать свой собственный инструмент, если кто-нибудь узнает, где в API я буду искать эту информацию.

У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: ответы ниже, касающиеся system_profiler, безусловно, шаг в правильном направлении. MBP показывает информацию для ОБА видеокарт, независимо от того, какая из них активна ... НО покажет "дисплей не подключен" для дисплея, подключенного к неактивной карте. Я должен быть в состоянии написать что-то, что выяснит это оттуда.

EDIT2: ключ получает выходные данные из system_profier в формате xml (используя ключ -xml). Ниже приведены сценарии для анализа полученного списка и отображения результата.

6 ответов6

6

Предполагая, что system_profiler будет сообщать только об активном отображении (я не близок к MBP, чтобы знать), как насчет подключения этого к GeekTool:

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

Редактировать:

Если он показывает неактивный в той же строке, что и "дисплей не подключен", как насчет:

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

Если он сначала перечисляет активный, как насчет:

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

Если активен второй, то замените голову хвостом.

4

http://codykrieger.com/gfxCardStatus

Это небольшое приложение, которое находится на панели и дает вам не только используемую карту, но и контроль над тем, как и когда менять карту. Например, вы можете настроить только встроенную видеокарту на работу от батареи и т.д.

3

Используя основную идею, представленную в двух других ответах, я написал следующие сценарии, чтобы определить, используете ли вы "правильную" видеокарту (Correct = "на аккумуляторе и используете 9400" или "на адаптере переменного тока и используете 9600")

Я понятия не имею, насколько хрупки эти скрипты ... они зависят от конкретных данных, появляющихся в определенном порядке в списке свойств system_profile ... но этот порядок кажется последовательным на моей машине. Размещение здесь для тех, кто когда-либо найдет это через Google.

Ruby: (требует установки драгоценного камня "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)

Python:

# 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)
2

Я знаю, что этот вопрос довольно старый, но для тех, кто все еще натыкается на него, было бы неплохо знать, что есть и другие варианты. Для самых простых решений можно было бы проверить GFXCheck, который является простым приложением, которое покажет активную видеокарту в

1

У меня нет одного из новых MacBook Pro, но вы сможете увидеть активную карту через системный профилировщик. В терминале просто используйте system_profiler чтобы увидеть конфигурацию системы:

Скриншот терминала

0

Вы можете использовать ruby gem active_gfx я написал:https://github.com/ChaosCoder/active_gfx

active_gfx показывает видеокарту, используемую в настоящее время вашей системой MacOS.

Вместо того чтобы просматривать список открытых процессов в Activity Monitor, этот инструмент выплевывает используемый в настоящее время графический чип, запрашивая system_profiler .

Поскольку active_gfx является гемом ruby, установите его через gem install active_gfx .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .