シェルスクリプトから画面解像度を調べるにはどうすればよいですか?


回答:


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

コマンドxdpyinfoは、Xサーバーに関するさまざまな情報を表示します。それは多くのことを標準出力に書きますが、単語dimensionsで始まる行だけが必要なので、使用しますgrep。最後にsed、結果のクリーニングに使用します。


x軸とy軸の寸法を別々に必要とする場合、以下を行うことができます。まず、上記のコマンドの結果を$( )構文(つまりDIMENSIONS=$(xdpyinfo ...)を使用して変数に入れます。次に使うsed2を取得するために、もう一度:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
mneri

xdpyinfo情報にアクセスできない場合はエラーメッセージを出力するため、エラーのリダイレクト先は/dev/nullです。このため、エラーリダイレクトを追加することができますxdpyinfo 2> /dev/null。したがって、完全なパイプラインは次のようになりますxdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'。これにより、スクリプトがより強固になります。
mneri

29

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

それは言う>xdpyinfo: Unable to open display "".
クラに

変更可能なモードをどのように見つけますか?
CMCDragonkai

ウィンドウ装飾などを減算する必要がない場合は、これをワンライナーで実行できますrdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}')
c24w

複数のモニターの合計ではありません。すべてのモニターを含む境界ボックスの寸法です。
デニスウィリアムソン

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1画面を指定する場合(マルチモニター設定)(SCREEN1インデックス付き)
SapuSeven

5

このxrandr -qコマンドを使用できます。必要に応じて、そこからシェルスクリプトを作成できます。

コマンドの詳細については、ここにアクセスするか、man xrandrと入力してください


2
#############################################
##ビデオ録画プログラムでこれを使用します。
#ウィンドウサイズ--rootオプション-画面のルートウィンドウに関する情報
echo $(xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
#出力:1024x768 + 0 + 0
#高さx幅+ x + yの位置。
######################
## 参考マニュアル ##
男xwininfo

xwininfo -root|sed '/Height/!d;s/.* //'高さとxwininfo -root|sed '/Width/!d;s/.* //'幅に使用しました。
デザート

1

xdpyinfoいくつかの解析でそれを行います。画面番号と寸法を掘る必要がある多くの情報を提供します


1

@ user31752と@ eliezer-e-vargasの回答を組み合わせて作成された2つの可能な選択肢

より単純な正規表現:

$ 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@はエリエゼル-E-バルガスからは(例:「1440×900 59.90 * + 59.89」)を別の行を取得するxrandrを出力で、「接続」のgrepは、(元の簡単なものを取得しながら。「LVDS1は、1440×900 + 0 + 0を接続しました..... ")。

@ user31752による正規表現の使用は素晴らしいので、私が使用している行はより単純な正規表現を必要とするか、より単純なcutコマンドで置き換えることができます。

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)

誰かがEliezer E. Vargasの答えの代わりにこれらのコマンドを使用する理由はありますか?
スコット

してください編集あなたの答えに情報という。
スコット

0

受け入れられた答えと同様ですが、それほど複雑ではありません。

xdpyinfo | grep dimensions

出力の例:

dimensions:    1366x768 pixels (361x203 millimeters)

0

モニター画面データの読み取り

vesa標準は、モニター画面の解像度を読み取る方法を提供します。

拡張ディスプレイ識別データ(EDI​​D):この規格は、構成情報を伝達するデータ形式を定義し、ディスプレイの最適な使用を可能にします。

モニターは通常、複数の解像度とリフレッシュレートをサポートしています。もちろん、誰かが最大(物理)を好むでしょう。

このモニターデータを読み取るには、次のいずれかのソリューションを試してください。

  • edid-decode

    インストールされていない場合は、次を入力します

    sudo apt install edid-decode
    

    次に、edidファイルを読む

    edid-decode /sys/class/drm/card0-eDP-1/edid
    
  • 既読

    でインストール

    sudo apt install read-edid 
    

    次に、i2cを介して画面モニターデータを読み取り、解析します

    sudo get-edid | parse-edid
    
  • edidデータをHexdump

    edid-toolsがインストールされていない場合、次のようにedid16進ファイルをダンプできます。

    hd /sys/class/drm/card0-eDP-1/edid
    

    この16進ファイルを暗号化するには、wikiをご覧になるか、edid仕様をダウンロードしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.