Làm cách nào để tìm ra độ phân giải màn hình của tôi từ tập lệnh shell?


Câu trả lời:


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

Lệnh xdpyinfohiển thị thông tin khác nhau về máy chủ X của bạn. Nó viết rất nhiều thứ cho đầu ra tiêu chuẩn nhưng chúng ta chỉ cần dòng bắt đầu bằng từ dimensions, do đó chúng ta sử dụng grep. Cuối cùng chúng tôi sử dụng sedđể làm sạch kết quả.


Nếu bạn cần kích thước trục x và y riêng biệt, bạn có thể làm như sau. Đầu tiên, đặt kết quả của lệnh trên vào một biến bằng $( )cú pháp (nghĩa là DIMENSIONS=$(xdpyinfo ...). Sau đó sử dụng sedmột lần nữa để có được hai: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
mneri

xdpyinfoin một thông báo lỗi nếu nó không thể truy cập thông tin, do đó, chuyển hướng lỗi đến /dev/null. Vì lý do này, bạn có thể muốn thêm một chuyển hướng lỗi : xdpyinfo 2> /dev/null. Vì vậy, các pipl đầy đủ trông như thế này : xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Điều này sẽ làm cho kịch bản của bạn vững chắc hơn.
mneri

29

xdpyinfo | grep dimensionssẽ cung cấp cho bạn tổng độ phân giải, nếu bạn có nhiều màn hình thì đó sẽ là tổng của tất cả chúng. xrandr --currentsẽ cung cấp cho bạn độ phân giải cho từng màn hình.

Tôi sử dụng đoạn mã này để tìm độ phân giải tối đa có thể cho rDesktop mà không cần chuyển sang toàn màn hình:

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

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

Đầu ra:

Xaxis = 1280
Yaxis = 1024

Điểm trừ trang trí cửa sổ (nhiều hay ít):

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

Đầu ra:

MaxRes = 1275x999

Đó là độ phân giải tối đa cho rDesktop mà không cần đi toàn màn hình.

Lệnh kết thúc:

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

Nó hoạt động tốt cho đến nay nhưng tôi đã không kiểm tra kỹ lưỡng mặc dù.

Một ví dụ khác là cho screencast với avconv:

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

nó nói>xdpyinfo: Unable to open display "".
Tới Kra

Làm thế nào để bạn tìm ra các chế độ có sẵn để thay đổi?
CMCDragonkai

Nếu bạn không cần phải trừ đi để trang trí cửa sổ (vv), bạn có thể thực hiện việc này trong một lớp lót rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w

Đây không phải là tổng của nhiều màn hình. Đó là kích thước của một hộp giới hạn chứa tất cả các màn hình.
Dennis Williamson

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1nếu bạn muốn chỉ định một màn hình (với thiết lập nhiều màn hình) ( SCREENđược lập chỉ mục 1)
SapuSeven

5

Bạn có thể sử dụng xrandr -qlệnh. Từ đó bạn có thể tạo một kịch bản shell nếu cần.

Để biết thêm thông tin về lệnh vào đây hoặc gõ man xrandr


2
######################################## #
## Tôi sử dụng điều này với Chương trình quay video.
# kích thước cửa sổ - tùy chọn hướng dẫn - thông tin trên cửa sổ gốc của màn hình
echo $ (xwininfo -root | grep 'hình học' | awk '{in $ 2;}')
# đầu ra: 1024x768 + 0 + 0
# chiều cao x chiều rộng + x + y vị trí.
#######################
## Hướng dẫn tham khảo ##
người đàn ông xwininfo

Tôi đã sử dụng xwininfo -root|sed '/Height/!d;s/.* //'cho chiều cao và xwininfo -root|sed '/Width/!d;s/.* //'chiều rộng.
tráng miệng

1

xdpyinfosẽ làm điều đó, với một số phân tích cú pháp. Nó cung cấp rất nhiều thông tin mà sau đó bạn sẽ phải đào số màn hình và kích thước từ


1

Hai lựa chọn thay thế có thể được tạo ra kết hợp các câu trả lời của @ user31752 và @ eliezer-e-vargas

Một regex đơn giản hơn:

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

hoặc sử dụng cắt:

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

Việc sử dụng grep '*' | uniqtừ @ eliezer-e-vargas có một dòng khác (ví dụ: "1440x900 59,90 * + 59,89") của đầu ra xrandr, trong khi grep 'được kết nối' có được một đơn giản (ví dụ: LVDS1 được kết nối 1440x900 + 0 + 0 ..... ").

Việc sử dụng regex của @ user31752 là tốt, do đó, dòng mà tôi đang sử dụng cần một regex đơn giản hơn hoặc có thể được thay thế bằng lệnh cắt đơn giản hơn.

Ví dụ đầu ra 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)

Có bất kỳ lý do nào để ai đó sử dụng các lệnh này thay vì các lệnh trong câu trả lời của Eliezer E. Vargas không?
Scott

Vui lòng chỉnh sửa thông tin đó vào câu trả lời của bạn.
Scott

0

Như trong câu trả lời được chấp nhận nhưng ít phức tạp hơn:

xdpyinfo | grep dimensions

Ví dụ về đầu ra:

dimensions:    1366x768 pixels (361x203 millimeters)

0

Đọc dữ liệu màn hình màn hình

Tiêu chuẩn vesa cung cấp phương pháp đọc độ phân giải màn hình màn hình.

Dữ liệu nhận dạng hiển thị mở rộng (EDID ): Tiêu chuẩn này xác định các định dạng dữ liệu để mang thông tin cấu hình, cho phép sử dụng tối ưu màn hình.

Một màn hình thường hỗ trợ nhiều độ phân giải và làm mới. Tất nhiên ai đó sẽ thích tối đa (vật lý).

Để đọc dữ liệu màn hình này, hãy thử một trong những giải pháp sau:

  • giải mã edid

    Nếu không được cài đặt, gõ

    sudo apt install edid-decode
    

    Sau đó đọc edidtệp

    edid-decode /sys/class/drm/card0-eDP-1/edid
    
  • đọc-edid

    Cài đặt với

    sudo apt install read-edid 
    

    Sau đó đọc qua i2c dữ liệu màn hình và phân tích nó

    sudo get-edid | parse-edid
    
  • Hexdump dữ liệu edid

    Trong trường hợp công cụ edid không được cài đặt, bạn có thể kết xuất edidtệp hex, ví dụ:

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

    Để mã hóa tệp hex này, hãy xem wiki hoặc tải xuống các thông số kỹ thuật edid .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.