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

linux mint分区方案(Linux下使用xrandr进行多屏幕操作)(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,虽然能显示,但是会显示严重的拖影。

,