【转】Xrandr (简体中文)

转自:Xrandr (简体中文) - ArchWiki

"xrandr" 是一款官方的 RandR (Resize and Rotate)维基百科:X 窗口系统 扩展配置工具。它可以设置屏幕显示的大小、方向、镜像等。对多显示器的情况,请参考 Multihead 页面。

Contents

  • 1安装
    • 1.1图形化操作程序
    • 1.2命令行前端
  • 2测试配置
  • 3添加未被检测到的有效分辨率
  • 4使xrandr所更改的分辨率设置永久生效
    • 4.1在xorg.conf设置分辨率(推荐)
    • 4.2在xprofile设定xrandr命令
    • 4.3在KDM/GDM的启动脚本设定xrandr命令
  • 5脚本
  • 6在VNC上使用xrandr
  • 7疑难排除
    • 7.1添加未检测到的分辨率
      • 7.1.1EDID 校验和无效
    • 7.2纠正电视机分辨率过扫
    • 7.3Correction of overscan tv resolutions via --transform
    • 7.4Full RGB in HDMI
      • 7.4.1Screen resolution reverts back after a blink
  • 8参见

安装

安装 软件包 xorg-xrandr。

图形化操作程序

  • ARandR — 提供了一个简单的图形化程序给 XrandR。显示器的位置会图形化地展示出来并可以使用拖拽的方式调整。

https://christian.amsuess.com/tools/arandr/ || arandr

  • LXRandR — 是 LXDE 中的屏幕分辨率和外置显示器管理的工具.

https://wiki.lxde.org/en/LXRandR || GTK 2: lxrandr, GTK 3: lxrandr-gtk3

命令行前端

  • xlayoutdisplay — 检测和排列显示器。可处理:笔记本电脑开合状态,最高有效刷新率,计算并设定当前的 DPI。最适合用在.xinitrc 中,以便于在接入或断开外置显示器或闭合笔记本盖子时引用这些参数

GitHub - alex-courtis/xlayoutdisplay: Detects and arranges linux display outputs, using XRandR for detection and xrandr for arrangement. || xlayoutdisplayAUR

测试配置

当没有添加任何选项直接运行时,xrandr 列出该系统可用的显示输出设备 (VGA-1HDMI-1 等等) 和每一台设备可设置的分辨率,当前分辨率后面带有一个*号和一个+号:

xrandr
Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm1920x1080     59.93 +  60.00*   50.00    59.94  1920x1080i    60.00    50.00    59.94  1680x1050     59.88  
…

注意: 如果你的分辨率没有出现在上方, 请看 #添加未被检测到的有效分辨率

你可以使用 xrandr 设置不同的分辨率(必须是出现在上面输出列表中的分辨率):

$ xrandr --output HDMI-1 --mode 1920x1080

当列表中出现多个刷新率,可以通过 --rate 选项改变,一次性设置或者分开设置,例如:

$ xrandr --output HDMI-1 --mode 1920x1080 --rate 60

如果输出设备已经连接但被禁用,--auto 选项会以系统偏好的分辨率(最大分辨率)开启特定的输出设备:

$ xrandr --output HDMI-1 --auto

还可以用一条命令设置多个输出设备,例如,使用系统偏好的选项关闭 HDMI-1 并打开 HDMI-2

$ xrandr --output HDMI-1 --off --output HDMI-2 --auto

注意:

  • 通过 xrandr 作出的改变只在本次会话中有效
  • xrandr 有很多功能 - 详情请参考 xrandr(1)。

添加未被检测到的有效分辨率

由于出错的硬件或驱动,xrandr 可能并不能检测出您的显示器所有的有效分辨率。不过,我们可以在xrandr里添加所需要的分辨率。 Also, this same procedure can be used to add refresh rates you know are supported, but not enabled by your driver。

首先,运行gtf或者cvt,查询某分辨率的有效扫描频率。

 $ cvt 1280 1024# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHzModeline "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

新建模式后,我们需要把这模式添加到当前的输出设备(假定为VGA1)上。由于一些参数已经事先设置,只需输入模式名称即可,即1280x1024_60.00。

   xrandr --addmode VGA1 1280x1024_60.00

最后,再把VGA1的分辨率指定为刚刚添加的新模式。

   xrandr --output VGA1 --mode 1280x1024_60.00

注意,以上设置同样地只能在当前会话暂时生效。

如果您对所要添加的某分辨率感到不放心,您可以追加新命令“sleep 5”以及一条切换到已有有效分辨率的命令,以保证不会被困在实际无效的分辨率,示例:

   xrandr --output VGA1 --mode 1280x1024_60.00 && sleep 5 && xrandr --newmode "1024x768-safe" 65.00 1024 1048 1184 1344 768 771 777 806 -HSync -VSync && xrandr --addmode VGA1 1024x768-safe && xrandr --output VGA1 --mode 1024x768-safe

其他输出设备如法炮制:VGA1或DVI-I……

使xrandr所更改的分辨率设置永久生效

使xrandr定制永久生效的方案有:

  • xorg.conf(推荐)
  • .xprofile
  • kdm/gdm

在xorg.conf设置分辨率(推荐)

示例:

/etc/X11/xorg.conf
Section "Monitor"Identifier      "External DVI"Modeline        "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync +VsyncOption          "PreferredMode" "1280x1024_60.00"
EndSection
Section "Device"Identifier      "ATI Technologies, Inc. M22 [Radeon Mobility M300]"Driver          "ati"Option          "Monitor-DVI-0" "External DVI"
EndSection
Section "Screen"Identifier      "Primary Screen"Device          "ATI Technologies, Inc. M22 [Radeon Mobility M300]"DefaultDepth    24SubSection "Display"Depth           24Modes   "1280x1024" "1024x768" "640x480"EndSubSection
EndSectionSection "ServerLayout"Identifier      "Default Layout"Screen          "Primary Screen"
EndSection

关于更多的配置细节,请阅读Xorg (简体中文)或xorg.conf(5)。

在xprofile设定xrandr命令

请阅读xprofile.

这方案具有缺点:如果您使用Display manager (简体中文)的话,那么在启动进程之后很大程度上就会执行失败,最终无法顺利修改分辨率。

在KDM/GDM的启动脚本设定xrandr命令

KDM和GDM都具备在X初始化时,会被自动执行的启动脚本。GDM的启动脚本放在/etc/gdm/, KDM的则是/usr/share/config/kdm/Xsetup,SDDM 的则是在 /usr/share/sddm/scripts/Xsetup。您可以把相关的xrandr命令添加到这些启动脚本里。

这些脚本需要root权限及其他系统配置的配合,不过在启动进程里会比xprofile更早生效。

脚本

控制第二显示器的开关状态,默认显示器保持开启:

~/bin/xdisplay
#!/bin/bash
#
# This script toggles the extended monitor outputs if something is connected
## all available outputs
OUTPUTS=$(xrandr |awk '$2 ~ /connected/ {print $1}')# your notebook LVDS monitor
DEFAULT_OUTPUT=$(sed -ne 's/.*(LVDS[^ ]*).*/1/p' <<<$OUTPUTS)# get info from xrandr
XRANDR=`xrandr`EXECUTE=""for CURRENT in $OUTPUTS
doif [[ $XRANDR == *$CURRENT\ connected*  ]] # is connectedthenif [[ $XRANDR == *$CURRENT\ connected\ \(* ]] # is disabledthenEXECUTE+="--output $CURRENT --auto --above $DEFAULT_OUTPUT "elseEXECUTE+="--output $CURRENT --off "fielse # make sure disconnected outputs are off EXECUTE+="--output $CURRENT --off "fi
donexrandr --output $DEFAULT_OUTPUT --auto $EXECUTE

在显示器之间切换,且只开启其中一个。

/usr/local/bin/toggle-display
#!/bin/bash
#
# toggle-display.sh
#
# Iterates through connected monitors in xrander and switched to the next one
# each time it is run.
## get info from xrandr
xStatus=`xrandr`
connectedOutputs=$(echo "$xStatus" | grep " connected" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/")
activeOutput=$(echo "$xStatus" | grep -e " connected [^(]" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/") 
connected=$(echo $connectedOutputs | wc -w)# initialize variables
execute="xrandr "
default="xrandr "
i=1
switch=0for display in $connectedOutputs
do# build default configurationif [ $i -eq 1 ]thendefault=$default"--output $display --auto "elsedefault=$default"--output $display --off "fi# build "switching" configurationif [ $switch -eq 1 ]thenexecute=$execute"--output $display --auto "switch=0elseexecute=$execute"--output $display --off "fi# check whether the next output should be switched onif [ $display = $activeOutput ]thenswitch=1fii=$(( $i + 1 ))done# check if the default setup needs to be executed then run it
echo "Resulting Configuration:"
if [ -z "$(echo $execute | grep "auto")" ]
thenecho "Command: $default"`$default`
elseecho "Command: $execute"`$execute`
fi
echo -e "\n$(xrandr)"

您也可以使用xrr-events (from AUR),一种负责监听XrandR事件的daemon服务。当某台显示器接通状态发生变动时,就会执行相关脚本。可在man页面进一步查询具体信息。

在VNC上使用xrandr

如果您在使用某台支持xrandr的VNC服务器,您可以通过"xrandr -s <width>x<height>"命令实时修改VNC的分辨率。tigervnc就是一种支持xrandr的VNC客户端。

示例:

xrandr -s 1920x1200

登陆VNC之后,如果您在控制台上输入"xrandr",您将得到列出当前已配置模式的清单。每个模式均可通过xrandr -s选项激活。不过,若您所需要的模式并不在清单中,您可以按照以下来添加它。

示例:不妨想添加的是1024x600(上网本的一种常见分辨率)

首先执行CVT,得到理想分辨率所对应的正确刷新频率。

$ cvt 1024 600

您会得到如下类似的输出:

# 1024x600 59.85 Hz (CVT) hsync: 37.35 kHz; pclk: 49.00 MHz
Modeline "1024x600_60.00"   49.00  1024 1072 1168 1312  600 603 613 624 -hsync +vsync

在以下命令使用那些关于刷新频率的输出部分。

xrandr --newmode "1024x600"   49.00  1024 1072 1168 1312  600 603 613 624 -hsync +vsync
xrandr --addmode default "1024x600"

通过以上流程,输入xrandr -s 1024x600,就可以设置当前分辨率为1024x600,但是这设置只在当前的X会话暂时生效。为确保其模式永久可用,在~/.vnc/xstartup添加以下:

xrandr --newmode "1024x600"   49.00  1024 1072 1168 1312  600 603 613 624 -hsync +vsync
xrandr --addmode default "1024x600"r

疑难排除

添加未检测到的分辨率

由于硬件以及驱动程序可能的缺陷,例如,请求的EDID数据块不正确,导致 xrandr 可能不能准确侦测到显示器的分辨率。不过我们可以手工添加期望的分辨率。

首先,运行 gtf 或 cvt 以获取所需分辨率的 模式行(Modeline) :

$ 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

提示: For some LCD screens (e.g. Samsung 2343NW, Acer XB280HK), the command cvt -r (= with reduced blanking) is to be used.

注意: 如果使用了 Intel 的显示驱动程序 xf86-video-intel,期望的分辨率会在 /var/log/Xorg.0.log 中与其他特征值一并报告——如果该值不同于 gtf or cvt 的输出应首选该值。这里给出一个log文件的报告值与 xrandr 使用值的实例:

[    45.063] (II) intel(0): clock: 241.5 MHz   Image Size:  597 x 336 mm
[    45.063] (II) intel(0): h_active: 2560  h_sync: 2600  h_sync_end 2632 h_blank_end 2720 h_border: 0
[    45.063] (II) intel(0): v_active: 1440  v_sync: 1443  v_sync_end 1448 v_blanking: 1481 v_border: 0
xrandr --newmode "2560x1440" 241.50 2560 2600 2632 2720 1440 1443 1448 1481 -hsync +vsync

然后创建一个新的 xandr 模式。注意模式行中那些被忽略的关键字。

$ xrandr --newmode "1280x1024_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync

创建完毕还需要一个操作步骤,把这个新模式追加到当前显示输出端口(VGA1)。我们只需引用模式的名称,因为参数已经在前面设置好了。

$ xrandr --addmode VGA1 1280x1024_60.00

现在,我们可以把屏幕分辨率切换为刚刚追加的值:

$ xrandr --output VGA1 --mode 1280x1024_60.00

注意,上述这些设置仅在本次会话中有效。

如果你不能确保将要测试的分辨率可用,可以在后面附加一个延迟和一个安全分辨率命令行,就像这样:

$ xrandr --output VGA1 --mode 1280x1024_60.00 && sleep 5 && xrandr --newmode "1024x768-safe" 65.00 1024 1048 1184 1344 768 771 777 806 -HSync -VSync && xrandr --addmode VGA1 1024x768-safe && xrandr --output VGA1 --mode 1024x768-safe

还有,要把 VGA1 改为正确的输出端口名。

EDID 校验和无效

如果前述方法导致引导期间发生 *ERROR* EDID checksum is invalid 错误,参阅 这里 和 这里.

也许 xrandr --addmode 会返回错误 X Error of failed request: BadMatch。NVIDIA 用户请参阅 NVIDIA/Troubleshooting#xrandr BadMatch。BadMatch 能指示出无效的 EDID 校验和。要验证确实是这种情况,请以 verbose mode 运行 X 服务(例如:startx -- -logverbose 6)然后查阅 Xorg 日志中有关 EDID 错误的信息。

纠正电视机分辨率过扫

With a flat panel TV, w:overscan looks like the picture is "zoomed in" so the edges are cut off.

Check your TV if there is a parameter to change. If not, apply an underscan and change border values. The required underscan vborder and underscan hborder values can be different for you, just check it and change it by more or less.

$ xrandr --output HDMI-0 --set underscan on --set "underscan vborder" 25 --set "underscan hborder" 40

Correction of overscan tv resolutions via --transform

If underscan is not available another solution is using xrandr --transform a,b,c,d,e,f,g,h,i, which applies a transformation matrix on the output. See the xrandr(1) § RandR_version_1.3_options manual page for the explanation of the transformation.

For example, the transformation scaling horizontal coordinates by 0.8, vertical coordinates by 1.04 and moving the screen by 35 pixels right and 19 pixels down, is:

$ xrandr --output HDMI1 --transform 0.80,0,-35,0,1.04,-19,0,0,1

Full RGB in HDMI

It may occur that the Intel driver will not configure correctly the output of the HDMI monitor. It will set a limited color range (16-235) using the Broadcast RGB property, and the black will not look black, it will be grey.

To see if it is your case:

$ xrandr --output HDMI1 --set "Broadcast RGB" "Full"

Screen resolution reverts back after a blink

If you use GNOME and your monitor does not have an EDID, above #添加未检测到的分辨率 might not work, with your screen just blinking once, after xrandr --output.

Poke around with ~/.config/monitors.xml, or delete the file completely, and then reboot.

It is better explained in this article.

参见

  • DualScreen Arch wiki page. How to get dual screens with Xrandr
  • X/Config/Resolution - Ubuntu Wiki
  • Debian Wiki - RandR 1.2 tutorial
  • How I got Dual Monitors with Nouveau Driver / Applications & Desktop Environments / Arch Linux Forums
  • Randr12
  • XStrikeForce/HowToRandR12 - Debian Wiki
  • man xrandr

Categories: 

  • X server (简体中文)
  • Xorg commands (简体中文)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oppo手机工程模式清除数据需要密码_手机隐藏的快捷键都有哪些?

手机从开发出来到现在&#xff0c;已经换了很多代了&#xff0c;从大哥大&#xff0c;小灵通&#xff0c;到诺基亚到山寨机到苹果到华为&#xff0c;几十年过去了。手机从奢侈品一下飞去每个人手里&#xff0c;反正我手机有手机已经快10年了&#xff0c;所以我相信每个人对自己…

关于竖表转横表的问题

本文作者&#xff1a;dinya内容摘要&#xff1a;在开发过程&#xff0c;经常遇到一些将表的显示方式进行转换的需求&#xff0c;我们习惯性称之为竖表到横表的转换&#xff0c;本文通过一个例子来简要说明常见的两种竖表转横表的问题。本文适宜读者范围&#xff1a;oracle初级&…

计算机大小端

大端模式   所谓的大端模式&#xff0c;是指数据的高位&#xff0c;保存在内存的低地址中&#xff0c;而数据的低位&#xff0c;保存在内存的高地址中&#xff0c;这样的存储模式有点儿类似于把数据当作字符串顺序处理&#xff1a;地址由小向大增加&#xff0c;而数据从高位往…

全系光谱完整版

宇宙射线也叫电磁波&#xff0c;其中包含γ射线、X射线、紫外线、可见光、红外线、近红外、远红外&#xff0c;还有无线电和超声波。 无线电波是振荡电路中自由电子作周期性的运动产生的&#xff0e; 红外线、可见光、紫外线是原子外层电子受激发产生的&#xff0e; X射线是原…

cat 几行_迷风花说Cat!Cat因为林教练是好教练回去现实却给了一巴掌

滔博TES前主教练迷风花26日发布了微博&#xff0c;就自己离职、Cat林教练事件以及汤汤纵情转会事件进行了澄清&#xff0c;网友粉丝们在看到教练迷风花发布的微博后&#xff0c;更加了解了很多事情的真相&#xff0c;粉丝们纷纷对教练迷风花送上了祝福&#xff0c;教练迷风花到…

c# equals与==的区别

对于值类型&#xff0c;如果对象的值相等&#xff0c;则相等运算符 () 返回 true&#xff0c;否则返回 false。对于string 以外的引用类型&#xff0c;如果两个对象引用同一个对象&#xff0c;则 返回 true。对于 string 类型&#xff0c; 比较字符串的值。操作比较的是两个变…

linux下C语言中的flock函数用法

表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件&#xff0c;无法锁定文件的某一区域。 参数 operation有下列四种…

c# - C#用fo-dicom对CT图像的PixelData进行处理和转换

转自&#xff1a;c# - C#用fo-dicom对CT图像的PixelData进行处理和转换 - IT工具网 对于某些测试&#xff0c;我试图操纵 PixelData以 dicom 格式存储的 CT 图像的元素&#xff0c;并使用 C# 中的 Fellow Oak Dicom 将其写回文件中。经过一番研究&#xff0c;我发现我想要处理的…

android studio 显示图形_显示服务器实现(一)

在一个多窗口的图形化操作系统中&#xff0c;显示服务器的任务就是组织这些窗口展现给用户。实际的显示服务器有Linux世界基于X11协议的XServer或者Wayland协议的Weston&#xff0c;还有Android里的SurfaceFlinger。但是除了显示&#xff0c;他们同时包含了输入管理&#xff08…

discuzX 帖子 有的图片没输出 [attach]12323[/attach]的解决办法

在pre_forum_post (as p )中&#xff0c;每个帖子都有一个p.attachment字段&#xff0c;这个字段记录了&#xff0c;帖子中有多少张图片&#xff0c;如果为0&#xff0c;则程序不会替换帖子内容(p.message)中的[attach]标签&#xff0c; 在pre_forum_attachment (as a)中&#…

win32 API函数大全

1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束…

如何识别C++编译以后的函数名

C/C语言在编译以后&#xff0c;函数的名字会被编译器修改&#xff0c;改成编译器内部的名字&#xff0c;这个名字会在链接的时候用到。如果用backtrace之类的函数打印堆栈时&#xff0c;显示的就是被编译器修改过的名字&#xff0c;比如说_Z3foov 。 那么这个函数真实的名字是什…

聊聊临时表

什么是临时表临时表与永久表相似&#xff0c;但临时表存储在 tempdb 中&#xff0c;当不再使用时会自动删除。 临时表有两种类型&#xff1a;本地和全局。它们在名称、可见性以 及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头&#xff1b;它们仅对当前的用户连接是…

电脑不能开机维修_MacBook维修 苹果笔记本电脑进水不开机

最近有很多小伙伴来店里&#xff0c;是进水的Macbook苹果笔记本电脑开不开机、黑屏&#xff0c;有很多朋友认为Macbook进水后擦干&#xff0c;只要能开机就没事&#xff0c;实在不开机晾几天就会好了。其实不然。Macbook进水后晾干虽然能开机但有很多后遗症——比如忽然黑屏、反…

Linux Arch目录下处理器体系架构介绍

alpha 处理器 Alpha 处理器最早由美国DEC 公司设计制造&#xff0c;在Compaq &#xff08;康柏&#xff09;公司收购DEC 之后&#xff0c;Alpha 处理器继续得到发展&#xff0c;并且应用于许多高档的Compaq 服务器上&#xff0c;HP &#xff08;惠普&#xff09;收购的Compaq &…

前端和后端的英文_计算机专业的本科生在前端、后端、测试和运维之间该如何选择...

首先&#xff0c;对于计算机专业的同学来说&#xff0c;在选择发展方向的时候往往会遇到一些困惑&#xff0c;当前随着计算机技术体系的不断壮大&#xff0c;计算机领域的岗位分类也越来越细化&#xff0c;而且在新技术的推动下&#xff0c;还在不断出现新的岗位&#xff0c;比…

医学影像后处理技术超详细收藏版(上)

转自&#xff1a;医学影像后处理技术超详细收藏版&#xff08;上&#xff09; 导语&#xff1a; 医学图像后处理是通过综合运用计算机图像处理技术&#xff0c;医学知识&#xff0c;将由各种数字化成像技术所获得的人体信息按照一定的需要在计算机上表现出来&#xff0c;使之…

BulkLoader类使用

BulkLoader提供简单的载入函数&#xff0c;不管要载入的是xml、swf还是声音文件&#xff0c;都只使用同一接口。功能强大&#xff0c;十分推荐。 用法&#xff0c;载入xml文件&#xff1a; var bulkLoader:BulkLoader new BulkLoader(main loading);bulkLoader.add(my_xml_fil…

uboot 详细注释讲解

大多数bootloader都分为stage1和stage2两部分&#xff0c;u-boot也不例外。依赖于CPU体系结构的代码&#xff08;如设备初始化代码等&#xff09;通常都放在stage1且可以用汇编语言来实现&#xff0c;而stage2则通常用C语言来实现&#xff0c;这样可以实现复杂的功能&#xff0…

【转】VTK和ITK中的坐标系统

当我们在处理医学图像和应用时&#xff0c;一个问题就是坐标系统之间的不同。在图像应用中通常有三个坐标系&#xff0c;分别是世界坐标系&#xff0c;解剖坐标系和图像坐标系。 每种坐标系目的不同&#xff0c;呈现数据的方式也不一样。 解剖坐标系由三个平面组成&#xff0c;…