从终端/ bash获取Macbook屏幕大小

时间:2014-07-26 15:01:28

标签: bash macos shell screen-size system-profiler

有没有人知道从终端确定或收集此信息的任何可能方法(为了在bash shell脚本中使用)?

在我的Macbook Air上,通过GUI我可以转到"关于这个mac" > "显示器"它告诉我: 内置显示屏,13英寸(1440 x 900)

我可以从system_profiler命令获得屏幕分辨率,但不能获得" 13英寸"位。 我也试过ioreg而没有成功。从分辨率计算屏幕大小并不准确,因为用户可以更改。

有没有人设法实现这一目标?

5 个答案:

答案 0 :(得分:1)

anchor()将为您提供Retina显示屏的物理分辨率,但它不会为您提供有效(缩放)分辨率。如果您需要,可以sort of get it with osascript

system_profiler SPDisplaysDataType

请注意,如果您正在运行多显示器设置,则可能需要进行一些解释。例如,我有一个Retina iMac 21“,物理分辨率为4096x2304,分辨率为2560x1440;我还有一个1440x2560的外部人像监控器:

$ osascript -e 'tell application "Finder" to get bounds of window of desktop'
0, 0, 2048, 1280

当我运行上面的命令时,它会报告:

┌───────┐┌─────────────┐
│  1440 ││  2560x1440  │
│ x2560 ││             │
│       ││             │
│       │└─────────────┘
│       │
│       │
└───────┘

这些是桌面相对于主监视器左上角的界限:

-1440, 0, 2560, 2560

正如您所看到的,这本身并没有实际为您提供主显示器的缩放垂直分辨率(尽管您可以从物理宽高比中找出它)。

另一个选项是GPL的实用工具screenresolution(如果你不想自己构建它,可以通过Homebrew获得)。命令行与地球上的其他任何东西都不太相似,但它有效:

x = -1440     0          2560
     ┌───────┐┌─────────────┐ y = 0
     │       ││             │ 
     │Monitor││  Monitor 0  │
     │   1   ││             │
     │       │└─────────────┘
     │       │
     │       │
     └───────┘                2560

作为奖励,它还以比特为单位提供颜色深度,如果可用,还以Hz为单位提供刷新率。

答案 1 :(得分:0)

我认为你只能获得显示模型名称,其中包含对大小的引用:

ioreg -lw0 | grep "IODisplayEDID" | sed "/[^<]*</s///" | xxd -p -r | strings -6 | grep '^LSN\|^LP'

将输出如下内容:

LP154WT1-SJE1

取决于显示器制造商。但是你可以看到这个模型名称字符串中的前三个数字意味着显示尺寸:154 == 15.4''

修改

找到一个简洁的解决方案,但它需要互联网连接:

curl -s http://support-sp.apple.com/sp/product?cc=`system_profiler SPHardwareDataType | awk '/Serial/ {print $4}' | cut -c 9-` |
sed 's|.*<configCode>\(.*\)</configCode>.*|\1|'

希望有所帮助

答案 2 :(得分:0)

下一个脚本:

model=$(system_profiler SPHardwareDataType | \
/usr/bin/perl -MLWP::Simple -MXML::Simple -lane '$c=substr($F[3],8)if/Serial/}{
print XMLin(get(q{http://support-sp.apple.com/sp/product?cc=}.$c))->{configCode}')

echo "$model"

将打印例如:

MacBook Pro (13-inch, Mid 2010)

或者没有perl但更多命令分叉:

model=$(curl -s http://support-sp.apple.com/sp/product?cc=$(system_profiler SPHardwareDataType | sed -n '/Serial/s/.*: \(........\)\(.*\)$/\2/p')|sed 's:.*<configCode>\(.*\)</configCode>.*:\1:')
echo "$model"

它是从苹果网站通过序列号在线提取的,因此您需要连接互联网。

答案 3 :(得分:0)

我发现似乎有几个不同的Apple网址用于检查此信息。其中一些似乎适用于某些序列号,而其他一些适用于其他机器。 e.g:

https://selfsolve.apple.com/wcResults.do?sn= $串行&安培;继续=继续试验#= 0 https://selfsolve.apple.com/RegisterProduct.do?productRegister=Y&country=USA&id= $串行 http://support-sp.apple.com/sp/product?cc= $ serial(最后4位数) https://selfsolve.apple.com/agreementWarrantyDynamic.do

但是,前两个网址似乎对我有用。也许是因为我正在寻找的机器在英国而不是美国,或者可能是因为他们的年龄?

无论如何,由于在命令行上没有太多运气(Apple网站重定向,有时几次到替代网址,而-L选项似乎没有帮助),我的解决方案是将(相当混乱)PHP脚本使用PHP cURL检查两个URL的连续出版物,然后做一些正则表达式技巧来报告我需要的信息。

一旦在我的网络服务器上,我现在可以从终端命令行卷曲它,并且它在100%的时间内带回了不错的结果。 我是一个PHP新手所以我不会因为在当前状态下发布脚本而让自己难堪,但是如果有人感兴趣我会乐意整理它并在这里分享(尽管这是一个相当漫长的解决方案什么应该是一个非常简单的查询)。 这个信息确实应该在system_profiler中提供。因为它可以通过System Information.app获得,所以我看不出原因。

答案 4 :(得分:0)

您好我的bash脚本,在GNU / Linux下:我进行了以下保存

# Resolution Fix
echo `xrandr --current | grep current | awk '{print $8}'` >> /tmp/width
echo `xrandr --current | grep current | awk '{print $10}'` >> /tmp/height
cat /tmp/height | sed -i 's/,//g' /tmp/height
WIDTH=$(cat /tmp/width)
HEIGHT=$(cat /tmp/height)
rm /tmp/width /tmp/height
echo "$WIDTH"'x'"$HEIGHT" >> /tmp/Resolution
Resolution=$(cat /tmp/Resolution)
rm /tmp/Resolution
# Resolution Fix

并在退出某个应用/游戏

后执行相同的脚本恢复

在某些S.O. 这是直接执行命令

ResolutionRestore=$(xrandr -s $Resolution)

但如果不执行,则使用此函数调用变量来执行变量内容

$($ResolutionRestore)

另一种方法是你可以尝试使用例如

RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//')
VRES=$(echo $RESOLUTION | sed 's/.*x//')
HRES=$(echo $RESOLUTION | sed 's/x.*//')