Câu trả lời:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Lệnh xdpyinfo
hiể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ả.
xdpyinfo
in 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.
xdpyinfo | grep dimensions
sẽ 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 --current
sẽ 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
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
nế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)
######################################## # ## 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
xwininfo -root|sed '/Height/!d;s/.* //'
cho chiều cao và xwininfo -root|sed '/Width/!d;s/.* //'
chiều rộng.
xdpyinfo
sẽ 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ừ
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 '*' | uniq
từ @ 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)
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)
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 edid
tệ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 edid
tệ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 .
$( )
cú pháp (nghĩa làDIMENSIONS=$(xdpyinfo ...
). Sau đó sử dụngsed
một lần nữa để có được hai:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
vàHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
.