題 如何從shell腳本中找出我的屏幕分辨率?


如何從shell腳本中找出我的屏幕分辨率?


46
2017-10-06 14:33


起源




答案:


xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'

命令 xdpyinfo 顯示有​​關X服務器的各種信息。它在標準輸出中寫了很多東西,但我們只需要從單詞開始的行 dimensions因此我們使用 grep。最後我們用 sed 清理結果。


52
2017-10-06 14:55



如果分別需要x和y軸尺寸,則可以執行以下操作。首先,使用將上述命令的結果放入變量中 $( ) 語法(即 DIMENSIONS=$(xdpyinfo ...)。然後用 sed 再來兩個: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//') 和 HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')。 - mneri
xdpyinfo 如果它無法訪問信息,則輸出錯誤消息,因此錯誤重定向到 /dev/null。因此,您可能需要添加錯誤重定向: xdpyinfo 2> /dev/null。所以,完整的piple看起來像這樣: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'。這將使您的腳本更加穩固。 - mneri


xdpyinfo | grep dimensions 將給你總分辨率,如果你有多個監視器,它將是所有這些的總和。 xrandr --current 將為您提供每個顯示器的分辨率。

我使用此代碼段來查找rDesktop的最大可能分辨率,而無需全屏顯示:

Xaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1)

Yaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2)

輸出:

Xaxis = 1280
Yaxis = 1024

減少窗戶裝飾(或多或少):

MaxRes=$(($Xaxis-5))"x"$(($Yaxis-25))

輸出:

MaxRes = 1275x999

這是rDesktop的最大分辨率,沒有全屏顯示。

結束命令:

rdesktop -u $User -P -z -5 -g $MaxRes $Host &

它到目前為止工作正常,但我沒有徹底測試。

另一個例子是用於截屏 avconv

avconv -f x11grab -r 15 -s `xrandr --current | grep  '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4

26
2017-09-22 16:44



它說> xdpyinfo: Unable to open display "". - To Kra
你如何找到可以改變的模式? - CMCDragonkai
如果您不需要減去窗口裝飾(等),您可以在單行中執行此操作 rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}')。 - c24w


你可以使用 xrandr -q 命令。從那裡你可以根據需要創建一個shell腳本。

有關命令go的更多信息 這裡 或者輸入 男人xrandr


4
2017-10-06 14:54





#############################################
##我將它與視頻錄製程序一起使用。
#window size --root選項 - 屏幕根窗口的信息
echo $(xwininfo -root | grep'granters'| awk'{print $ 2;}')
#output(s):1024x768 + 0 + 0
#height x width + x + y position。
######################
## 參考手冊 ##
man xwininfo

2
2017-11-07 14:26



我用了 xwininfo -root|sed '/Height/!d;s/.* //' 高度和 xwininfo -root|sed '/Width/!d;s/.* //' 寬度。 - dessert


xdpyinfo 會做一些解析。它提供了大量信息,您必須從中挖掘屏幕編號和尺寸


1
2017-10-06 14:55





結合@ user31752和@ eliezer-e-vargas的答案產生了兩種可能的替代方案

一個更簡單的正則表達式:

$ xrandr --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p'
1440x900

或使用切割:

$ xrandr --current | grep ' connected ' | cut -d ' ' -f 3 | cut -d '+' -f 1
1440x900

指某東西的用途 grep '*' | uniq 從@ eliezer-e-vargas獲得xrandr輸出的不同行(例如“1440x900 59.90 * + 59.89”),而grep“connected”得到一個簡單的行(例如“LVDS1連接1440x900 + 0 + 0 ... ..“)。

@ user31752使用正則表達式很不錯,所以我使用的行需要更簡單的正則表達式,或者可以用更簡單的剪切命令替換。

示例xrandr輸出

$ xrandr --current
Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
LVDS1 connected 1440x900+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
   1440x900      59.90*+  59.89  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1024x768      60.00  
   800x600       60.32    56.25  
   640x480       59.94  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

1
2018-05-09 01:17



是否有人使用這些命令而不是使用這些命令 Eliezer E. Vargas的回答? - Scott
請 編輯 把這些信息寫進你的答案。 - Scott


如在接受的答案中,但不那麼複雜:

xdpyinfo | grep dimensions

輸出示例:

dimensions:    1366x768 pixels (361x203 millimeters)

0
2017-11-20 17:38