Linux 作為開源操作系統,在嵌入式系統有五花八門的屏幕接入,如LVDS,LCD,HDM,eDP,MIPI屏等。因此官方推出了統一的應用xrandr 進行對屏幕的操作,這樣無需更改驅動情況下,就能完成各種屏幕參數的調節。
基本應用- 屏幕參數查詢
xrandr -q
運行實例
root@firefly:~# xrandr -q
Screen 0: minimum 320 x 200, current 1920 x 1280, maximum 8192 x 8192
HDMI-1 connected primary 1920x1080 0 0 (normal left inverted right x axis y axis) 0mm x 0mm
1920x1080 60.00* 50.00
3840x2160 60.00 50.00 30.00 25.00 24.00
1280x720 60.00 50.00
1024x768 60.00
720x576 50.00
720x480 59.94
LVDS-1 connected 800x1280 0 0 (normal left inverted right x axis y axis) 0mm x 0mm
800x1280 58.42*
- 查詢屏幕列表
xrandr --listmonitors
運行結果
xrandr --listmonitors
Monitors: 2
0: *HDMI-1 1920/508x1080/286 0 0 HDMI-1
1: LVDS-1 1280/339x800/212 0 0 LVDS-1
- 旋轉屏幕
這個命令相當有,比如驅動設置為豎屏,但實際顯示需要模屏,在不調整驅動情況下,用旋轉命令即可調整。
把LVDS1屏幕向右旋轉90度
xrandr --output LVDS-1 --rotate right
把HDMI1屏幕向左旋轉90度
xrandr --output HDMI-1 --rotate left
- 切換已知分辨率
這個mode是用 xrandr -q 查詢的值
xrandr --output HDMI-1 --mode 1280x720
自動采用最大分辨率
xrandr --output HDMI-1 --auto
多屏互動
這個我認為是最有用的命令,對于一些拼接屏應用有非常友好的支持。
雙屏複制(即兩個屏幕顯示同一内容)
LVDS-1複制HDMI-1的輸出
xrandr --output LVDS-1 --same-as HDMI-1
兩塊屏幕拼接顯示,其中HDM1-1 為主屏幕,DP-2在其右側
xrandr --output HDMI-1 --primary --right-of DP-2
關鍵兩種模式是可以動态切換的。
增加新的分辨率
- 查詢屏幕掃描屏幕
增加原本不存在分辨率,需要知道其掃描頻率,可以用cvt命令取得
$ cvt 1280 1024
# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHz
Modeline "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync vsync
- 增加一個新模式
通過--newmode參數新建一種xrandr模式,輸入上面所得到的查詢結果,其中Modeline關鍵詞自然需要被省略
xrandr --newmode "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync vsync
- 激活新的模式
xrandr --addmode VGA1 1280x1024_60.00
- 激活新的分辨率
xrandr --output VGA1 --mode 1280x1024_60.00
注意這隻是軟件層面的設置,最終的效果還是取決于硬件本身限制。
比如我把hdmi設為 1280x800,雖然能顯示,但是會顯示嚴重的拖影。
,