ฉันจะค้นหาความละเอียดหน้าจอของฉันจากเชลล์สคริปต์ได้อย่างไร
ฉันจะค้นหาความละเอียดหน้าจอของฉันจากเชลล์สคริปต์ได้อย่างไร
คำตอบ:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
คำสั่งxdpyinfo
แสดงข้อมูลต่าง ๆ เกี่ยวกับเซิร์ฟเวอร์ X ของคุณ มันเขียนจำนวนมากของสิ่งที่จะออกมาตรฐาน แต่เราต้องการเพียงบรรทัดขึ้นต้นด้วยคำว่าทำให้เราใช้dimensions
grep
ในที่สุดเราก็ใช้sed
ในการทำความสะอาดผลลัพธ์
xdpyinfo
/dev/null
พิมพ์ข้อความผิดพลาดถ้ามันไม่สามารถเข้าถึงข้อมูลเพื่อการเปลี่ยนเส้นทางข้อผิดพลาด xdpyinfo 2> /dev/null
ด้วยเหตุนี้คุณอาจต้องการที่จะเพิ่มการเปลี่ยนเส้นทางข้อผิดพลาด: ดังนั้นลูกศิษย์แบบเต็มจะมีลักษณะเช่นนี้: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
. สิ่งนี้จะทำให้สคริปต์ของคุณแข็งแกร่งขึ้น
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 &
มันใช้งานได้ดี แต่ฉันยังไม่ได้ทดสอบอย่างละเอียด
อีกตัวอย่างหนึ่งสำหรับ screencast ด้วย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 "".
rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}')
ครั้งเดียว
xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1
ถ้าคุณต้องการระบุหน้าจอ (พร้อมการตั้งค่าจอภาพหลายจอ) ( SCREEN
มีการจัดทำดัชนี 1 รายการ)
คุณสามารถใช้xrandr -q
คำสั่ง จากนั้นคุณสามารถสร้างเชลล์สคริปต์ได้ถ้าต้องการ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งให้ไปที่นี่หรือพิมพ์man xrandr
############################################# ## ฉันใช้สิ่งนี้กับโปรแกรมบันทึกวิดีโอ ขนาดหน้าต่าง # - ตัวเลือกราก - ข้อมูลในหน้าต่างรูทของหน้าจอ echo $ (xwininfo -root | grep 'geometry' | awk '{พิมพ์ $ 2;}') # เอาต์พุต: 1024x768 + 0 + 0 # height x width + x + y position ###################### ## คู่มืออ้างอิง ## ผู้ชาย xwininfo
xwininfo -root|sed '/Height/!d;s/.* //'
ความสูงและxwininfo -root|sed '/Width/!d;s/.* //'
ความกว้าง
xdpyinfo
จะทำมันด้วยการแยกบางส่วน มันให้ข้อมูลมากมายซึ่งคุณจะต้องขุดหมายเลขหน้าจอและขนาดจาก
สองทางเลือกที่เป็นไปได้ที่สร้างขึ้นโดยรวมคำตอบของ @ user31752 และ @ eliezer-e-vargas
regex ที่ง่ายกว่า:
$ 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 จะได้รับบรรทัดที่แตกต่างกัน (เช่น "1440x900 59.90 * + 59.89") ของเอาต์พุต xrandr ในขณะที่ grep 'เชื่อมต่อ' จะได้รับหนึ่งง่าย (เช่น "เชื่อมต่อ LVDS1 1440x900 + 0 + 0 ..... ")
การใช้ regex โดย @ user31752 นั้นดีดังนั้นบรรทัดที่ฉันใช้จำเป็นต้องใช้ regex ที่ง่ายขึ้นหรือสามารถใช้แทนคำสั่ง 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)
เช่นเดียวกับในคำตอบที่ยอมรับ แต่ซับซ้อนน้อยกว่า:
xdpyinfo | grep dimensions
ตัวอย่างผลลัพธ์:
dimensions: 1366x768 pixels (361x203 millimeters)
มาตรฐาน vesa มีวิธีการอ่านความละเอียดของหน้าจอมอนิเตอร์
Extended Identification Data (EDID ): มาตรฐานนี้กำหนดรูปแบบข้อมูลเพื่อนำข้อมูลการกำหนดค่ามาใช้เพื่อให้สามารถใช้งานจอภาพได้อย่างเหมาะสม
โดยทั่วไปจอภาพรองรับความละเอียดหลายระดับและรีเฟรช แน่นอนว่าใครบางคนจะชอบมากที่สุด (ทางกายภาพ) หนึ่ง
หากต้องการอ่านข้อมูลมอนิเตอร์นี้ลองใช้วิธีแก้ปัญหาเหล่านี้:
EDID-ถอดรหัส
หากไม่ได้ติดตั้งให้พิมพ์
sudo apt install edid-decode
จากนั้นอ่านedid
ไฟล์
edid-decode /sys/class/drm/card0-eDP-1/edid
อ่าน EDID
ติดตั้งด้วย
sudo apt install read-edid
จากนั้นอ่านข้อมูล i2c ผ่านหน้าจอมอนิเตอร์และวิเคราะห์ข้อมูล
sudo get-edid | parse-edid
Hexdump ข้อมูล edid
ในกรณีที่ไม่ได้ติดตั้งเครื่องมือ edid คุณสามารถดัมพ์edid
ไฟล์ hex ได้เช่น:
hd /sys/class/drm/card0-eDP-1/edid
การเข้ารหัสไฟล์ฐานสิบหกนี้จะดูที่วิกิพีเดียหรือดาวน์โหลดรายละเอียด EDID
$( )
ไวยากรณ์ (เช่นDIMENSIONS=$(xdpyinfo ...
) แล้วใช้sed
อีกครั้งที่จะได้รับที่สอง: และWIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')