Вопрос или проблема
Старое название – “изменение разрешения на 1280×1024 с помощью xrandr выдает: ошибка X неудачного запроса: BadValue (целочисленный параметр вне диапазона для операции)”
Я установил чистую Ubuntu 17.10 и у меня есть монитор с разрешением 5:4. в настройках нет разрешения выше 1024×768. Но мне нужно разрешение 1280×1024 (5:4).
Я использую стандартную графическую карту материнской платы:
# lspci|grep VGA
00:02.0 VGA совместимый контроллер: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
Также xrandr выдает следующее:
$ xrandr
Экран 0: минимум 320 x 200, текущее 1024 x 768, максимум 8192 x 8192
XWAYLAND0 подключен 1024x768+0+0 (нормальный левый инвертированный правый x ось y ось) 0мм x 0мм
1024x768 59.92*+
Я пытался добавить разрешение 1280×1024 с помощью xrandr. Сначала создал информацию о разрешении с помощью gtf:
$ gtf 1280 1024 60
# 1280x1024 @ 60.00 Hz (GTF) горизонтальная синхронизация: 63.60 кГц; тактовая частота: 108.88 МГц
Модельная строка "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 неудачного запроса: BadValue (целочисленный параметр вне диапазона для операции)
Основной код операции неудачного запроса: 140 (RANDR)
Вторичный код операции неудачного запроса: 7 (RRSetScreenSize)
Значение в неудачном запросе: 0x0
Серийный номер неудачного запроса: 21
Текущий серийный номер в потоке вывода: 22
Я не знаю, что я сделал не так. Или как изменить разрешение на правильное: 1280×1024
Вы можете попытаться установить пользовательское разрешение с помощью wayland с некоторыми усилиями и смешанными результатами.
Вам, вероятно, следует начать с подачи отчета об ошибке, включая вашу графическую карту и монитор(ы), против wayland
https://help.ubuntu.com/community/ReportingBugs
Добавление пользовательского разрешения
xrandr
НЕ будет работать с Wayland !!
Вы можете попытаться добавить пользовательское разрешение, используя вашу модельную строку аналогично тому, как вы это делали бы с xrandr, но с несколькими дополнительными шагами.
Во-первых, я не уверен, работает ли это с безопасной загрузкой, поэтому я советую начать с Отключения безопасной загрузки
Из https://ask.fedoraproject.org/en/question/99867/how-to-add-a-custom-resolution-to-waysland-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
Скачайте и извлеките
wget https://github.com/akatrevorjay/edid-generator/archive/master.zip
unzip master.zip
cd edid-generator-master
Бинарный файл находится в каталоге ~/edid-generator-master, называется modeline2edid
Запустите modeline2edid
с вашей модельной строкой, используя пример на askfedora link,
./modeline2edid - <<< 'Модельная строка "3840x2160" 533.6 3840 3982 4027 4064 2160 2170 2180 2190 +hsync +vsync'
Поиск несносных единорогов в '/dev/stdin'
-- Найден непослушный единорог: Модельная строка "3840x2160" 533.6 3840 3982 4027 4064 2160 2170 2180 2190 +hsync +vsync
Записано в файл 3840x2160.S
Измените эту команду на ваше желаемое разрешение.
Смотрите Как установить пользовательское разрешение? для подробностей (если нужно)
Затем сгенерируйте двоичный файл edid с помощью make
make #вывод не показан
Теперь у вас будет новый .bin файл, 3840x2160.bin
в этом случае.
Теперь из The Arch wiki включите ваше пользовательское разрешение
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
Перезагрузитесь и наслаждайтесь вашим пользовательским разрешением
Ядро + загрузчик
Как Xorg, так и Wayland получают эту информацию от ядра. Вы можете попросить загрузчик передать ядру информацию об выводе определённого разрешения на определённый видео выход. Предположим, мы хотим добавить разрешение Full HD для устройства VGA-1
.
Будьте осторожны, после перезагрузки ваш загрузчик сообщит вашему ядру, что всё, что подключено к VGA-1
, поддерживает разрешение 1920×1080 при 60 Гц. Это не значит, что оно на самом деле поддерживает это разрешение, и если это не так, экран может просто погаснуть, поэтому перед тем как делать эти изменения, я настоятельно рекомендую убедиться, что:
- экран действительно поддерживает нужное разрешение
- он делает это с указанной частотой обновления (например,
@60
Гц) - GPU вашей системы имеет достаточно видео памяти для рендеринга изображений в этом разрешении (например, при совместном использовании с виртуальной машиной)
GRUB
sudo $EDITOR /etc/default/grub
Найдите строку GRUB_CMDLINE_LINUX_DEFAULT
, добавьте (в конец, перед закрывающей кавычкой):
video=VGA-1:1920x1080@60
Сохраните, выйдите из редактора, затем:
sudo update-grub
Systemd-boot
sudo $EDITOR /boot/loader/entries/arch.conf
Найдите строку options
, добавьте:
video=VGA-1:1920x1080@60
X вывод
Чтобы сделать это, вам нужно знать имя X (видео) вывода, к которому подключен ваш экран – откройте терминал и выполните xrandr
:
$ xrandr
Экран 0: минимум 8 x 8, текущее 3840 x 2160, максимум 32767 x 32767
VGA-0 не подключено (нормальный левый инвертированный правый x ось y ось)
VGA-1 не подключено (нормальный левый инвертированный правый x ось y ось)
HDMI-0 не подключено (нормальный левый инвертированный правый x ось y ось)
HDMI-1 не подключено (нормальный левый инвертированный правый x ось y ось)
DP-0 не подключено (нормальный левый инвертированный правый x ось y ось)
DP-1 не подключено (нормальный левый инвертированный правый x ось y ось)
DP-2 подключен основной 3840x2160+0+0 (нормальный левый инвертированный правый x ось y ось) 878мм x 485мм
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 не подключено (нормальный левый инвертированный правый x ось y ось)
Как видите, единственный X вывод, который в данный момент читает подключен
на моем устройстве это DP-2
.
У меня была такая же проблема. Я это исправил так:
Чтобы изменить разрешение дисплея на 1440×900
Выйдите из системы
На экране входа после нажатия имени пользователя,
в правом нижнем углу отображается маленький значок шестеренки
Нажмите и выберите Ubuntu в Xorg
Это изменит монитор на VGA-1
Теперь войдите в систему и в терминале
выполните эту команду
touch .xprofile
Откройте этот файл .xprofile и вставьте следующее
xrandr –newmode “1440x900_60.00” 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync
xrandr –addmode VGA-1 “1440x900_60.00”
xrandr –output VGA-1 –mode “1440x900_60.00”
Если вам интересно, как создана первая строка,
выполните
cvt 1440 900
координаты будут отображены. После слова Modeline содержимое
копируется и вставляется в первую строку здесь (после xrandr –newmode)
Выйдите и войдите снова. Перейдите к настройке->Дисплеи-> Выберите новое разрешение и наслаждайтесь
Я думаю, это лучший ответ на этот вопрос, включая обсуждение пользователя о том, как сделать изменения окончательными, что обычно не упоминается.
.
Ответ или решение
Настройка пользовательского разрешения в Wayland может быть сложной задачей, особенно для тех, кто привык работать с Xorg и инструментами вроде xrandr. Рассмотрим, как можно установить пользовательское разрешение в Wayland, используя примеры и практическое применение.
Теория
Wayland кардинально отличается от Xorg, поскольку он более современный и безопасный протокол для оконной системы. Он не использует xrandr
для управления разрешениями экрана, что может вызвать затруднения при настройке пользовательских разрешений. Одной из распространённых проблем является то, что доступные разрешения экрана могут не соответствовать фактическим возможностям вашего монитора или графической карты. Это обычно происходит из-за того, что современные системы ориентированы на чтение EDID (Extended Display Identification Data), которые обеспечивают монитор и графическая карта, сообщая системе о поддерживаемых разрешениях и частотах обновления.
Пример
Предположим, у вас есть монитор с разрешением 1280×1024 (соотношение сторон 5:4), однако система предлагает только разрешения до 1024×768. Ваше оборудование – это интегрированная графика Intel с поддержкой Wayland. При попытке использовать xrandr
, это приводит к ошибке "X Error of failed request: BadValue", как было упомянуто в вопросе.
Так как xrandr
не работает в Wayland, мы переходим к альтернативным методам, таким как создание пользовательского EDID и настройка на уровне ядра и загрузчика.
Применение
-
Создание кастомного EDID:
- Установите необходимые пакеты:
sudo apt install zsh edid-decode automake dos2unix
. - Скачайте и распакуйте edid-generator:
wget https://github.com/akatrevorjay/edid-generator/archive/master.zip unzip master.zip cd edid-generator-master
- Используйте
modeline2edid
для генерации EDID с использованием вашей строки моды, полученной черезcvt
илиgtf
:./modeline2edid - <<< 'Modeline "1280x1024" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync'
- Это создаст файл .bin для вашего разрешения.
- Установите необходимые пакеты:
-
Настройка ядра и загрузчика:
- Скопируйте созданный вами EDID-файл в
/usr/lib/firmware/edid
:sudo mkdir -p /usr/lib/firmware/edid sudo cp 1280x1024.bin /usr/lib/firmware/edid
- Добавьте параметр ядра в GRUB:
- Отредактируйте
/etc/default/grub
и добавьтеdrm_kms_helper.edid_firmware=edid/1280x1024.bin
вGRUB_CMDLINE_LINUX_DEFAULT
.sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm_kms_helper.edid_firmware=edid/1280x1024.bin"
- Обновите конфигурацию GRUB:
sudo update-grub
.
- Отредактируйте
- Перезагрузите систему для применения изменений.
- Скопируйте созданный вами EDID-файл в
-
Тестирование и настройка:
- После перезагрузки, проверьте, появилось ли нужное разрешение в настройках экрана.
- Убедитесь, что все работает корректно, прежде чем делать постоянные изменения.
Таким образом, можно настроить пользовательское разрешение в среде Wayland. Важно всегда удостовериться, что ваше оборудование физически поддерживает указанное разрешение, чтобы избежать проблем с отображением. Файл .xprofile и использование параметров ядра через загрузчик помогут сделать изменения постоянными без необходимости ручного выбора разрешения при каждой загрузке системы.