一台 MacBook Pro 中的两个显卡在性能和功耗上都有很大的不同。
问题是,我经常忘记我在运行哪一个。这可能会在飞机上很快导致电池没电。据我所知,您必须打开节能系统首选项才能查看哪个处于活动状态。
有谁知道有什么工具可以显示(在菜单栏、桌面等)我当前的显卡状态?特别好的是一个终端命令,它将报告哪个是活动的。我可以将其用作 GeekTool 设置的一部分。
如果有人碰巧知道我会在 API 中的何处查找此信息,我也可以编写自己的工具。
谁有想法?
编辑:以下有关 system_profiler 的答案绝对是朝着正确方向迈出的一步。MBP 显示两个视频卡的信息,无论哪个是活动的......但是对于连接到非活动卡的显示器,将显示“显示器未连接”。我应该能够编写一些可以从那里弄清楚的东西。
EDIT2:关键是从 system_profier 以 xml 格式(使用 -xml 开关)获取输出。下面的脚本用于解析生成的 plist 并显示结果。
假设 system_profiler 只会报告活动显示(我不知道 MBP 附近)如何将其插入 GeekTool:
system_profiler | grep GeForce | sed -e 's/:/ /'
Run Code Online (Sandbox Code Playgroud)
编辑:
如果它在“显示未连接”的同一行列出了非活动的,那怎么样:
system_profiler | grep GeForce | grep - v "display not connected" | sed -e 's/:/ /'
Run Code Online (Sandbox Code Playgroud)
如果它首先列出活动的一个怎么样:
system_profiler | grep GeForce | head -n 1 | sed -e 's/:/ /'
Run Code Online (Sandbox Code Playgroud)
如果 active 是第二个,则用尾部替换头部。
使用其他两个答案中提出的基本思想,我编写了以下脚本来确定您是否使用“正确”的显卡(正确=“使用电池并使用 9400”或“使用交流适配器并使用 9600”)
我不知道这些脚本有多脆弱...它们依赖于 system_profile plist 中以特定顺序出现的特定数据...但这个顺序在我的机器上似乎是一致的。将其放在这里,供任何通过 Google 找到此内容的人使用。
Ruby:(需要安装“Plist”gem)
# 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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)