쉘 스크립트에서 화면 해상도를 어떻게 알 수 있습니까?


답변:


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

명령 xdpyinfo은 X 서버에 대한 다양한 정보를 표시합니다. 표준 출력에 많은 것을 씁니다. 그러나 단어로 시작하는 줄만 있으면 dimensions되므로 사용 grep합니다. 마지막으로 sed결과를 정리하는 데 사용 합니다.


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

28

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 "".
Kra

사용할 수있는 모드를 어떻게 알 수 있습니까?
CMCDragonkai

창 장식 등을 빼기 위해 필요하지 않은 경우 하나의 라이너 로이 작업을 수행 할 수 있습니다 rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w

여러 모니터의 합계가 아닙니다. 모든 모니터를 포함하는 경계 상자의 크기입니다.
Dennis Williamson

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1화면을 지정하려는 경우 (멀티 모니터 설정 사용) ( SCREEN1 인덱스)
SapuSeven

5

xrandr -q명령을 사용할 수 있습니다 . 이를 통해 필요한 경우 쉘 스크립트를 작성할 수 있습니다.

명령에 대한 자세한 내용을 보려면 여기 로 이동 하거나 man xrandr을 입력 하십시오.


2
##########################################
## 비디오 녹화 프로그램과 함께 사용합니다.
# window size --root option-화면 루트 창의 정보
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의 답변을 결합한 두 가지 가능한 대안

더 간단한 정규식 :

$ 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-바가로부터는 (예. "화면 1440x900 59.90 * + 59.89")를 다른 광고를 얻을 xrandr를 출력 '연결'을 그렙은 (예를 간단 하나를 얻을 수있다. "LVDS1는 1440x900 배경 + 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의 답변 대신 이러한 명령을 사용하는 이유가 있습니까?
Scott

제발 편집 답변에 정보가.
Scott

0

허용 된 답변에서와 같이 덜 복잡합니다.

xdpyinfo | grep dimensions

출력 예 :

dimensions:    1366x768 pixels (361x203 millimeters)

0

모니터 화면 데이터 읽기

vesa 표준은 모니터 화면 해상도를 읽는 방법을 제공합니다.

확장 디스플레이 식별 데이터 (EDID ) :이 표준은 디스플레이 정보를 최적으로 사용할 수 있도록 구성 정보를 전달할 데이터 형식을 정의합니다.

모니터는 일반적으로 여러 해상도와 화면 주사율을 지원합니다. 물론 누군가는 최대 (물리적)를 선호 할 것입니다.

이 모니터 데이터를 읽으려면 다음 솔루션 중 하나를 시도하십시오.

  • edid- 디코드

    설치되지 않은 경우 다음을 입력하십시오.

    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
    
  • EIDID 데이터를 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.