Wayland 如何设置自定义分辨率

Moh*_*dar 20 intel-graphics wayland display-resolution

旧标题 - “使用 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)
Run Code Online (Sandbox Code Playgroud)

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*+
Run Code Online (Sandbox Code Playgroud)

我尝试使用 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
Run Code Online (Sandbox Code Playgroud)

然后添加到分辨率:

xrandr --newmode "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync +Vsync
Run Code Online (Sandbox Code Playgroud)

然后再次执行命令: 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
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么。或者如何将分辨率更改为正确的分辨率:1280x1024

Pan*_*her 14

您可以尝试使用 Wayland 设置自定义分辨率,但结果不一。

您可能应该首先针对 Wayland 提交错误报告,包括您的显卡和显示器

如何报告错误?

https://help.ubuntu.com/community/ReportingBugs


添加自定义分辨率

xrandr 不适用于 Wayland !!

您可以尝试使用类似于 xrandr 的方式使用 modline 添加自定义分辨率,但需要一些额外的步骤。

首先,我不确定这是否适用于安全启动,因此我建议您从禁用安全启动开始

来自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-generator。然后你可以将它传递给你的模型行(使用你给出的相同参数xrandr --newmode

来自https://github.com/akatrevorjay/edid-generator

安装要求

sudo apt install zsh edid-decode automake dos2unix
Run Code Online (Sandbox Code Playgroud)

下载并解压

wget https://github.com/akatrevorjay/edid-generator/archive/master.zip
unzip master.zip 
cd edid-generator-master
Run Code Online (Sandbox Code Playgroud)

二进制文件在 ~/edid-generator-master 作为 modeline2edid

modeline2edid使用您的 modline运行,使用 askfedora 链接中的示例,

./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
Run Code Online (Sandbox Code Playgroud)

将该命令修改为您想要的分辨率。

请参阅如何设置自定义分辨率?详情(如果需要)

然后用make生成edid二进制文件

make #output not posted
Run Code Online (Sandbox Code Playgroud)

3840x2160.bin在这种情况下,您现在将拥有新的 .bin 。

现在,从Arch wiki启用您的自定义资源

sudo mkdir /usr/lib/firmware/edid
sudo cp 3840x2160.bin /usr/lib/firmware/edid
Run Code Online (Sandbox Code Playgroud)

更改3840x2160.bin为您的自定义分辨率。

注意:已经包含了一些自定义的 .bin,你可以看到它们,ls *.bin我不确定你是否可以在没有 make 的情况下使用它们。

重启测试

重新启动时,在 grub 中编辑内核行,添加

drm_kms_helper.edid_firmware=edid/3840x2160.bin
Run Code Online (Sandbox Code Playgroud)

请参阅如何添加内核引导参数?https://wiki.ubuntu.com/Kernel/KernelBootParameters

转到以开头的行linuxdrm_kms_helper.edid_firmware=edid/3840x2160.bin在行尾添加ro quiet splash

假设一切正常,让它永久

sudo nano /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

添加自定义分辨率

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm_kms_helper.edid_firmware=edid/3840x2160.bin"
Run Code Online (Sandbox Code Playgroud)

保存您的编辑Ctrl+x

更新 grub

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

重新启动并享受您的自定义分辨率

  • 添加“.bin”时遇到输出问题时,请明确指出您想要添加自定义分辨率的输出。示例: `drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin` [来源](https://wiki.archlinux.org/index.php/kernel_mode_setting#Forcing_modes_and_EDID) (2认同)

cpr*_*prn 8

内核+引导加载程序

Xorg 和 Wayland 都从内核获取此信息。您可以要求引导加载程序告诉内核将特定分辨率输出到特定视频输出。假设我们要为VGA-1设备添加全高清分辨率。

请注意,重新引导后,您的引导加载程序将告诉您的内核,所连接的任何内容都VGA-1支持 60Hz 的 1920x1080。这并不意味着它实际上支持该分辨率,如果不支持,屏幕可能会呈现黑色,因此在进行这些修改之前,我强烈建议确保:

  1. 屏幕实际上支持所需的分辨率
  2. 以给定的刷新率(例如@60Hz)执行此操作
  3. 系统的 GPU 有足够的视频内存以该分辨率渲染图像(例如与虚拟机共享时)

GRUB

sudo $EDITOR /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

找到GRUB_CMDLINE_LINUX_DEFAULT行,添加(在末尾,右引号之前):

video=VGA-1:1920x1080@60
Run Code Online (Sandbox Code Playgroud)

保存,退出编辑器,然后:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

系统引导

sudo $EDITOR /boot/loader/entries/arch.conf
Run Code Online (Sandbox Code Playgroud)

找到options行,添加:

video=VGA-1:1920x1080@60
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

connected正如您所看到的,当前在我的机器上读取的唯一 X 输出是DP-2.

忽略下面的内容

现实生活中的用例,可以更轻松地谷歌搜索这个答案:这对我来说可以通过 DVI 到 D-SUB 适配器运行旧的三星 SyncMaster 2343NW 作为第二个显示器(D-SUB 是 VGA,所以我的输出名称是VGA-1,内核不能'无法自行识别支持的分辨率,也称为将旧屏幕连接为第二个显示器)。