![添加自定义分辨率](https://linux22.com/image/999674/%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E8%BE%A8%E7%8E%87.png)
旧标题 - “使用 xrandr 将分辨率更改为 1280x1024 会出现:X 请求失败错误:BadValue(整数参数超出操作范围)”
我安装了全新的 Ubuntu 17.10,并有一个分辨率为 5:4 的显示器。设置没有高于 1024x768 的分辨率。但我需要分辨率 1280x1024 (5:4)。我使用默认的主板显卡:
# lspci|grep VGA
00:02.0 VGA compatible controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
xrandr 还提供以下内容:
$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 8192 x 8192
XWAYLAND0 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 59.92*+
我尝试使用 xrandr 添加 1280x1024 分辨率。因此首先使用 gtf 创建分辨率信息:
$ gtf 1280 1024 60
# 1280x1024 @ 60.00 Hz (GTF) hsync: 63.60 kHz; pclk: 108.88 MHz
Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
然后添加到决议中:
xrandr --newmode "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
然后再次执行命令:xrandr --addmode XWAYLAND0 1280x1024_60.00
然后什么都没改变。当我尝试使用xrandr --output XWAYLAND0 --mode 1280x1024_60.00 --rate 60
但发生错误时:
$ xrandr --output XWAYLAND0 --mode 1280x1024 --rate 60
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 7 (RRSetScreenSize)
Value in failed request: 0x0
Serial number of failed request: 21
Current serial number in output stream: 22
我不知道我做错了什么。或者如何将分辨率更改为正确的分辨率:1280x1024
答案1
您可以尝试使用 Wayland 设置自定义分辨率,但需要付出一些努力,而且结果好坏参半。
您可能应该首先提交针对 Wayland 的错误报告,包括您的显卡和显示器
https://help.ubuntu.com/community/ReportingBugs
添加自定义分辨率
xrandr
将无法与 Wayland 兼容!!
您可以尝试使用 modline 添加自定义分辨率,类似于使用 xrandr 的方式,但需要一些额外的步骤。
首先,我不确定这是否适用于安全启动,所以我建议你先禁用安全启动
从https://ask.fedoraproject.org/en/question/99867/how-to-add-a-custom-resolution-to-weyland-fedora-25/和https://wiki.archlinux.org/index.php/Kernel_mode_setting#Forcing_modes_and_EDID
首先,你需要克隆edid 生成器然后,您可以将您的模式行传递给它(使用您给出的相同参数xrandr --newmode
从https://github.com/akatrevorjay/edid-generator
安装要求
sudo apt install zsh edid-decode automake dos2unix
下载并提取
wget https://github.com/akatrevorjay/edid-generator/archive/master.zip
unzip master.zip
cd edid-generator-master
二进制文件位于 ~/edid-generator-master 中,如下所示modeline2edid
modeline2edid
使用 askfedora 链接中的示例,运行你的 modline,
./modeline2edid - <<< 'Modeline "3840x2160" 533.6 3840 3982 4027 4064 2160 2170 2180 2190 +hsync +vsync'
Searching for runaway unicorns in '/dev/stdin'
-- Found naughty unicorn: Modeline "3840x2160" 533.6 3840 3982 4027 4064 2160 2170 2180 2190 +hsync +vsync
Wrote 3840x2160.S
修改该命令以达到您想要的分辨率。
看如何设置自定义分辨率?了解详情(如果需要)
然后使用 make 生成 edid 二进制文件
make #output not posted
3840x2160.bin
在这种情况下,您现在将拥有新的 .bin 。
现在,从Arch 维基启用您的自定义分辨率
sudo mkdir /usr/lib/firmware/edid
sudo cp 3840x2160.bin /usr/lib/firmware/edid
更改3840x2160.bin
为您的自定义分辨率。
注意:已经包含一些自定义的 .bin,你可以用它查看它们,但ls *.bin
我不确定你是否可以在没有 make 的情况下使用它们。
重启测试
重新启动后,编辑 grub 中的内核行,添加
drm_kms_helper.edid_firmware=edid/3840x2160.bin
看如何添加内核启动参数?和https://wiki.ubuntu.com/Kernel/KernelBootParameters
转到以 开头的行,linux
并drm_kms_helper.edid_firmware=edid/3840x2160.bin
在行末添加ro quiet splash
假设所有方法都有效,那么就让它永久生效
sudo nano /etc/default/grub
添加自定义解决方案
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm_kms_helper.edid_firmware=edid/3840x2160.bin"
保存您的编辑Ctrl+x
更新 grub
sudo update-grub
重新启动并享受您的自定义分辨率
答案2
内核 + 引导加载程序
Xorg 和 Wayland 都从内核获取此信息。您可以让引导加载程序告诉内核将特定分辨率输出到特定视频输出。假设我们想为VGA-1
设备添加全高清分辨率。
谨防重启后,引导加载程序会告诉内核,所连接的任何设备都VGA-1
支持 1920x1080 @ 60Hz。但这并不意味着它实际上做支持该分辨率,如果不支持,屏幕可能会呈现黑色,因此在进行这些修改之前,我强烈建议确保:
- 屏幕实际上支持所需分辨率
- 它确实如此在给定的刷新率(例如
@60
Hz) - 系统的 GPU 具有足够的显存来渲染图像在该分辨率下(例如与虚拟机共享时)
GRUB
sudo $EDITOR /etc/default/grub
找到GRUB_CMDLINE_LINUX_DEFAULT
行,添加(在末尾,结束引号之前):
video=VGA-1:1920x1080@60
保存,退出编辑器,然后:
sudo update-grub
Systemd 启动
sudo $EDITOR /boot/loader/entries/arch.conf
找到options
行,添加:
video=VGA-1:1920x1080@60
X 输出
要执行任何这些操作,您需要知道屏幕连接到的 X(视频)输出的名称 - 打开终端并运行xrandr
:
$ xrandr
Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 32767 x 32767
VGA-0 disconnected (normal left inverted right x axis y axis)
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 878mm x 485mm
3840x2160 60.00*+ 30.00 29.98 24.00
2560x1440 59.95
2048x1080 59.99
1920x1080 60.00 59.94 50.00
1680x1050 59.95
1440x900 74.98 59.89
1280x1024 75.02 60.02
1280x960 60.00
1280x720 60.00 59.94 50.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 72.81 59.94 59.93
DP-3 disconnected (normal left inverted right x axis y axis)
connected
正如您所看到的,当前我的机器上读取的唯一 X 输出是DP-2
。
忽略以下内容
真实生活中的用例可以更轻松地在谷歌上搜索到这个答案:这对我来说可以通过 DVI 到 D-SUB 适配器将旧的三星 SyncMaster 2343NW 作为第二个显示器运行(D-SUB 是 VGA,所以我的输出名称是VGA-1
,而内核无法识别支持的分辨率,也就是说将旧屏幕连接为第二个显示器)。