添加自定义分辨率

添加自定义分辨率

旧标题 - “使用 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

转到以 开头的行,linuxdrm_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。但这并不意味着它实际上支持该分辨率,如果不支持,屏幕可能会呈现黑色,因此在进行这些修改之前,我强烈建议确保:

  1. 屏幕实际上支持所需分辨率
  2. 它确实如此在给定的刷新率(例如@60Hz)
  3. 系统的 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,而内核无法识别支持的分辨率,也就是说将旧屏幕连接为第二个显示器)。

相关内容