在家里用笔记本的时候是直接用HDMI外接显示器的,笔记本自带屏幕1080P,外接显示器为2k,安装CentOS之后,进入Gnome桌面发现原本2k的HDMI外接屏幕只能显示1080P的分辨率,而且在系统显示设置里面找不到2k分辨率。

原以为是CentOS的问题,重新安装Debian之后发现分辨率仍然是1080P,gnome版本和CentOS一样,为3.26,所以猜测是gnome的问题,后来改用fedora,gnome 3.30,还是老样子,之前使用3.20的时候并没有出现这种情况,这样子基本就可以断定是新版Gnome的问题了。

准备

改分辨率得找到对应的参数,先查看显示输出设备

1xrandr

显示如下:

 1Screen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192
 2eDP-1 connected (normal left inverted right x axis y axis)
 3   1920x1080     60.00 +  59.93    40.00
 4   1680x1050     59.95    59.88
 5   1600x1024     60.17
 6   ...
 7   400x300       60.32    56.34
 8   320x240       60.05
 9VGA-1 disconnected (normal left inverted right x axis y axis)
10HDMI-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 553mm x 311mm
11   1920x1080     60.00    50.00    59.94
12   1920x1080i    60.00    50.00    59.94
13   ...
14   640x480       75.00    72.81    66.67    60.00    59.94
15   720x400       70.08

根据显示,其中有3个输出设备:

  • eDP-1,即笔记本自带屏幕
  • VGA-1,笔记本上面的VGA接口,没有在用
  • HDMI-1,正在使用的屏幕,里面的分辨率最高只有1920x1080,所以需要往里面添加分辨率选项

设置分辨率

需要添加的是2560x1440分辨率,可用cvt命令查看使用2k分辨率需要使用的参数:

1cvt 2560 1440

显示如下:

1# 2560x1440 59.96 Hz (CVT 3.69M9) hsync: 89.52 kHz; pclk: 312.25 MHz
2Modeline "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync

输出结果中需要的部分只有的Modeline后面的参数,即"2560x1440_60.00" 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync这段,接下来以这段参数设置一个可用的分辨率模式:

1# 用xrandr新建分辨率
2xrandr --newmode "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync
3
4# 将新模式添加进HDMI-1分辨率列表
5xrandr --addmode "2560x1440_60.00"
6
7# 设置当前输出为2k分辨率
8xrandr --output HDMI-1 --mode "2560x1440_60.00"

设置完分辨率后屏幕经过短暂黑屏,然后亮屏,可以看到解决了。

-r参数

此时对于大多数人来说分辨率已经设置成功了,但是偏偏我的不行,设置完发现分辨率仍没有改变,而且在黑屏亮屏之后看到这样一行报错:

1xrandr: Configure crtc 0 failed

最后查找到 Archwiki上的说明 ,里面有这样一句话

对于个别LCD显示器(例如samsung 2343NW),可能需要用到"cvt -r" (具有减少空白显示的效果)命令。

于是尝试使用cvt -r继续:

 1# 查看分辨率参数
 2cvt -r 2560 1440
 3# 2560x1440 59.95 Hz (CVT 3.69M9-R) hsync: 88.79 kHz; pclk: 241.50 MHz
 4Modeline "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
 5
 6# 创建分辨率模式
 7xrandr --newmode "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
 8
 9# 给HDMI-1添加分辨率模式
10xrandr --addmode HDMI-1 2560x1440R
11
12# 应用新创建的分辨率模式
13xrandr --output HDMI-1 --mode 2560x1440R

最后成功设置成2k分辨率。

自适应

屏幕显示很清晰,但是图标和字体有点小,查看xrdb -q显示如下

 1xrdb -q
 2
 3*customization: -color
 4Xft.dpi:    96
 5Xft.antialias:  1
 6Xft.hinting:    1
 7Xft.hintstyle:  hintfull
 8Xft.rgba:   none
 9Xcursor.size:   24
10Xcursor.theme:  Adwaita

新版gnome一般对于1080P以上的分辨率会进行HiDPI自适应,1080P以下dpi默认值是96,1080P以上的是192,但是上面的是96的默认值,所以并没有进行自适应,要缩放也很简单,有以下几个方法:

  1. gnome-tweak-tool里面设置(推荐) 此软件在系统安装时已经默认自带,如果没有就自己安装。 直接在字体里面把缩放比例改大就行,一般设置成1.25即可: gnome设置分辨率.png
  2. 运行gsettings 直接运行gsettings set org.gnome.desktop.interface text-scaling-factor 1.25,也是将文本缩放至1.25倍,不过必须注销重新登录才有效
  3. 设置缩放参数 还有一个方法没试过,相当于1.5倍缩放,但字体会有轻微模糊,参考:[elementary OS][Loki] 高DPI屏幕(高分屏)的显示设置方法【elementaryos吧】_百度贴吧
1xrandr --output eDP-1 --scale-from 2560x1440 --panning 2560x1440
2gsettings set org.gnome.desktop.interface scaling-factor 2

配置自动生效

使用快捷键

设置完之后可以将下面的命令行存成一个脚本,下次直接运行一遍脚本即可使用2k分辨率:

1# 添加脚本
2vim ~/2k-resolution.sh

在脚本里加入配置内容:

1#!/bin/bash
2xrandr --newmode "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
3xrandr --addmode HDMI-1 2560x1440R
4xrandr --output HDMI-1 --mode 2560x1440R

赋予脚本执行权限:

1chmod +x ~/2k-resolution.sh

然后在设置 - keyboard里面设置一个快捷键,把路径指向脚本,下次只需要按下快捷键就能用上正确的分辨率。

这个方法需要在每次开机的时候手动按下快捷键才能使用上正确的分辨率,但也有个好处是可以在需要用时才设置。

添加进配置文件

gnome新版本(3.30)的配置文件似乎与老版本不同,我试过按照网上的教程进行更改发现没用,而后退而求其次,找到一个稍微有点毛病的方法。

编辑gnome配置文件:

1vim /etc/profile.d/sh.local

将下列配置添加进末尾:

1xrandr --newmode "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
2xrandr --addmode HDMI-1 2560x1440R

此时重启,进入桌面还是1080P的分辨率,但是可以在显示设置里面找到2560x1440这个分辨率,点击使用这个分辨率即可。

这个方法的优点是只需要操作一次,以后每次开机都会自动使用正确的分辨率,缺点就是刚进入桌面的时候会黑屏几秒,而且每次在终端登录root用户时都会有错误提示:

错误提示

会有这个错误提示是因为2560x1440R这个分辨率模式被重复设置了,不过到底是哪里进行了第二次设置暂时还没找到,就只能放着错误提示不管了,不过,就算这样也总比每次都要手动设置强。