【问题标题】:Get Macbook screen size from terminal/bash从终端/bash 获取 Macbook 屏幕大小
【发布时间】:2014-07-26 15:01:27
【问题描述】:

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

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

我可以通过 system_profiler 命令获得屏幕分辨率,但不能获得“13 英寸”位。 我也试过 ioreg 没有成功。从分辨率计算屏幕尺寸是不准确的,因为这可以由用户更改。

有人做到了吗?

【问题讨论】:

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


    【解决方案1】:

    我认为您只能获得包含尺寸参考的显示型号名称:

    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|'
    

    希望对你有帮助

    【讨论】:

    • 谢谢。我在其他地方的搜索中确实遇到了类似的行,但不幸的是,在我的 Air 上,即使删除了最后一个 grep 部分,它也没有返回任何结果。
    • 我也没有任何输出。
    • 谢谢丹尼尔。从 Apple 网站收集信息的有趣概念,但不幸的是,它只是返回:MacBook Air
    【解决方案2】:

    下一个脚本:

    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"
    

    它是通过序列号从苹果网站在线获取的,所以你需要互联网连接。

    【讨论】:

    • 感谢 jm666。这看起来类似于 Daniel 的解决方案(如下),但不幸的是,它只是返回:MacBook Air
    【解决方案3】:

    我发现似乎有几个不同的 Apple URL 可用于检查此信息。其中一些似乎适用于某些序列号,而另一些似乎适用于其他机器。 例如:

    https://selfsolve.apple.com/wcResults.do?sn=$Serial&Continue=Continue&num=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

    但是,前两个 URL 似乎对我有用。也许是因为我正在查找的机器在英国而不是美国,或者是因为它们的年龄?

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

    一旦在我的网络服务器上,我现在可以从终端命令行 curl 它,它可以 100% 地恢复体面的结果。 我是 PHP 新手,所以我不会因为将脚本以当前状态发布而让自己感到尴尬,但如果有人感兴趣,我很乐意整理并在这里分享(尽管不可否认,这是一个相当冗长的解决方案应该是一个非常简单的查询)。 这个信息真的应该简单地在 system_profiler 中提供。因为它可以通过 System Information.app 获得,所以我看不出为什么不这样做的原因。

    【讨论】:

      【解决方案4】:

      您好,我的 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)
      

      但是如果不执行,用 this 调用变量来执行变量内容

      $($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.*//')
      

      【讨论】:

      • Mac 默认不运行 X。该解决方案将启动 XQuartz X11 窗口系统以获得答案,(a)我认为这些天默认情况下不会安装在 OS X 上,(b)效率极低,并且(c)似乎没有报告整个屏幕,例如在我的 Mac 上,它表明分辨率是 1920x1057,而实际上是 1920x1080。我猜它可能不包括菜单栏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多