xrandr 只有一个显示屏_xrandr – 多屏幕不同DPI配置踩坑记
Linux平台上的多屏幕支持一直不像Windows和Mac那么友好。近日在配置多屏幕不同DPI,实现不同比例缩放时碰到了麻烦。本博记录一下解决的思路和解决方案,供日后参考。虽说并不完美,但不影响使用。
环境信息
系统环境:
Ubuntu 18.04 LTS (未启用Wayland)
X.Org X Server 1.19.6
Gnome 3.28.2
计算机型号:华为MateBook 13 2018
显示设备:
屏幕1:内置显示器 (奇美CMN8201面板)13寸 分辨率:2160×1440 DPI 200
屏幕2:飞利浦246E 23寸 分辨率:1920×1080 DPI 96
笔记本居左,外置显示器居右。
# xrandr信息
# 内置显示器为eDP-1,外置显示器为DP-1
Screen 0: minimum 320 x 200, current 4080 x 1440, maximum 8192 x 8192
eDP-1 connected primary 2160x1440+0+0 (normal left inverted right x axis y axis) 275mm x 183mm
2160x1440 60.00*+
(下略)
DP-1 connected 1920x1080+2160+0 (normal left inverted right x axis y axis) 521mm x 293mm
1920x1080 60.00*+ 50.00 59.94
(下略)
两屏幕均使用核显输出。在添加第二显示器之前,gnome使用1.25缩放比例,系统全局使用100%缩放比例。添加第二显示器后,由于内置显示器的高DPI,外置显示器的内容均被放大两倍,浏览网页还能将就,但在写程序时候需要来回调整字体,很不方便。
xrandr 配置思路
xrandr是Xorg官方对于randr的配置工具。底层原理也是将两块屏幕的显示内容按照给定参数拼接到一块“画布 ”上,再进行输出。画布的大小等于两块屏幕的物理分辨率*缩放系数的和。当不进行任何配置的时候,Xorg默认使用1.0的缩放倍数对两显示器进行配置。因此出现了同样200DPI的情况下,外置显示器显示偏大的问题。
为优先确保内置屏幕的显示质量,我们采用统一DPI=200进行配置。因此,配置思路是把这块“画布”上内置显示器的区域不变,把外接显示器的画布扩展,实现同物理显示区域内显示内容增加来达到缩小的目的。
配置过程
根据HiDPI官方给出的公式,命令如下:
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
# Generically if your HiDPI monitor is AxB pixels and your regular monitor is CxD and you are scaling by [ExF], the commandline for right-of is:
以本文为例:
xrandr --output eDP-1 --auto --output DP-1 --auto --panning 2880x1620+2160+0 --scale 1.5x1.5 --right-of eDP-1
两显示器均配置为auto模式,–panning参数设置鼠标可取范围。一定要注意这个参数的设置,否则鼠标可能无法正常移动。命令执行后,Ubuntu将全局的缩放比例自动调节到了200%,手动调节回100%后,出现了两屏幕显示区域重叠、鼠标位置不正常的问题。此外,在内置显示器上还存在鼠标闪烁的问题。好消息是在200%缩放比例下,两屏幕的显示比例一致,没有出现一边大一边小的问题,证明整体思路是可行的。接下来,就是填坑了。
全局缩放比例调整带来的异常
在这一块,Gnome做得确实要比原来的Ubuntu Desktop差着不少,没想到会有这么多的麻烦。猜想可能是 xrandr 中 –auto参数导致的问题,在缩放比例进行调整后xrandr无法正确识别并应用配置文件。遂对需要的参数进行一一指定:
xrandr --dpi 200 --fb 5040x1620 --output eDP-1 --mode 2160x1440 --pos 0x0 --output DP-1 --scale 1.5x1.5 --pos 2160x0 --panning 2880x1620+2160+0
–dpi: 强制全局使用200% dpi
–fb: 指定画布大小。双显示器横向并列防止,故:长边 = 2160 + 1920 * 1.5 = 5040;短边取1620(1440 和 1080*1.5的较大值)。
–pos: 指定显示器的位置,笔记本在左侧,pos=0x0;第二显示器在右侧,pos=2160×0
经过设置后,显示效果恢复正常,但鼠标闪烁的问题仍未解决。
解决鼠标闪烁:玄学参数
将内置显示器的显示比例调整为:–scale 0.9999×0.9999。
完整命令:
(仅限Intel核显用户)除此解决方法外,也有帖子指出修改Xorg的配置文件才是根本解决方案。方法为:在 /etc/X11/xorg.conf.d/ 下新建20-intel.conf文件,内容为:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "sna"
Option "TearFree" "true"
EndSection
以上内容可能适用于稍老型号的Intel核显。我在UHD620(8代i5)上实测并未解决鼠标闪烁,反而增加了水波纹、斜纹等问题。写在这里仅供参考。
最终效果
还是会有点小毛病,首先是在移除第二显示器之后无法自动恢复,还需再次执行xrandr –auto。在快速拖动窗口时候仍旧可见一点斜纹和水波纹,不过终究不是什么大问题,不影响使用。
xrandr 只有一个显示屏_xrandr – 多屏幕不同DPI配置踩坑记相关推荐
- i3wm 屏幕配置踩坑
i3wm 屏幕配置踩坑 前言 踩坑 前言 自从18-19年开始正式使用linux作为我的开发系统就一直没有换回windows,从一开始的 ubuntu 到后来的manjaro 感觉越来越有意思可玩性很 ...
- 总结!一个产品新手的踩坑记
本文讲的是总结!一个产品新手的踩坑记, 加入产品大家庭正好三个月了,在大佬们面前不敢造次,于是,觉得可以拿出来分享的,便是在这段春夏交替之光里,亲脚踩的一些坑,以及在坑里获得的一些小发现.所幸的是,在 ...
- xrandr 只有一个显示屏_给大家介绍一种命令行模式下的多屏分屏工具xrandr
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 archlinux WIKI上的介绍是这样的: "xrandr" 是一款官方的 RandR Wikipedia:X Window Sy ...
- ts踩坑记|指定一个object类型
声明一个object类型的变量需要把这个对象里面键值对都声明出来,比较偷懒的方法就是像下面一样 private userData : { [key: string]: any }
- 使用C# winform 制作一个按钮可自适应屏幕大小的 简易加减乘除计算器
一:成果物 不多展示,,,我们开始吧.. 二: 窗体包含内容 2.1 显示屏部分组成 显示屏部分由两个组件组成,一个是方便操作的panel控件位于顶部,且为了使其显示屏在改变窗体大小时一直位于 ...
- 一个抓取电脑屏幕的小控件台程序
一个抓取电脑屏幕的小控件台程序 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- android屏幕适配:一个很棒的屏幕适配文章
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...
- 独立开发变现周刊(第81期):开发一个应用来减少屏幕使用时间,月收入2万美元...
分享独立开发.产品变现相关内容,每周五发布. (合集:https://ezindie.com/weekly ) 目录 1.组件世界 WidgetStore:一个丰富.强大的嵌入式小组件库 2.Dist ...
- 笔记本软件页面分辨率低_我卸载错了一个软件,电脑屏幕分辨率就变得很差
满意答案 farmerlife 2013.10.25 采纳率:45% 等级:12 已帮助:2596人 我卸载错了一个软件,电脑屏幕分辨率就变得很差 来回答你的问题,我是专做电脑维修的 1:有时候 ...
最新文章
- python学习07
- 秒懂机器学习---朴素贝叶斯
- matlab多项式相乘的法则_卷积计算与多项式乘法
- web页面 float定位导致“溢出现象”处理
- docker查询占用端口号服务命令
- MySql分表、分库、分片和分区知识(转载)
- MySQL高级 - 案例 - 需求及环境准备
- ASP.NET Core 2.0 : 二. 开发环境
- ZOJ1221 Risk 图形的遍历
- 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
- vue报错Invalid Host header
- 工厂方法(FactoryMethod)模式
- php接收vb post数据,VB Post方式提取网页数据
- 微信公众号-自定义菜单的创建
- Android 蓝牙扫描
- 逃出你的肖申克(五):看不见的牢笼(上)
- 【FinE】债券久期和凸性
- OpenWrt network 启动过程
- 净资产收益率与市盈率的关系
- eot文件html,html – 为什么IE8没有加载我的eot文件?