Я смог сделать это с помощью пользовательского EDID на экране, либо добавив его в раздел экрана xorg.conf
:
Option "CustomEDID" "DFP-0:/path/to/file/custom_edid.bin"
Или путем создания конфигурации:
sudo nvidia-xconfig --custom-edit="CRT-0:/my/monitor.bin"
Теперь большой вопрос, как произвести приемлемый EDID .bin?
В Windows XP мне пришлось установить два приложения: PowerStrip (на которое ссылается статья в Википедии об EDID)
Другое нужное нам приложение - это Phoenix EDID Designer.
С PowerStrip мы получим подробную информацию о времени из текущего режима отображения; в основном необходимая информация показана в этой статье, и она сводится к следующему:
1) В WinXP время находится где-то во вкладке расширенных настроек. Тебе нужно:
Horiz Front Porch, Vert Front Porch,
Horiz Back Porch, Vert Back Porch,
Horiz Front Active, Vert Front Active,
Horiz Scan (or Sync) Width, Vert Scan Width,
Horiz Sync Polarity, Vert Sync Polarity,
and Pixel Clock.
2) В вашем /etc/X11/xorg.conf есть место для моделин, которое выглядит примерно так:
Код:
Modeline "1768x992" 74.48 1768 1336 1472 1664 992 721 724 746 -hsync +vsync
Просто пример. Не используйте этот.
Моделин находится в формате
Код:
Modeline "somenamehere" <dotclock> <H1> <H2> <H3> <H4> <V1> <V2> <V3> <V4> <HP> <VP>
where dotclock = Pixel Clock
H1=Horiz Front Active
H2=H1+Horiz Front Porch
H3=H2+Horiz Sync Width
H4=H3+Horiz Back Porch
V1=Vert Front Active
V2=V1+Vert Front Porch
V3=V2+Vert Sync Width
V4=V3+Vert Back Porch
HP=Horiz Sync Polarity [-hsync/+hsync]
VP=Vert Sync Polarity [-vsync/+vsync]
Простые формулы, но мне потребовались недели поиска, чтобы выяснить, как преобразовать синхронизацию окон в модельную линию Linux.
Для моего конкретного ЖК-телевизора LG42LH30FR полученная модельная строка:
Modeline "1080p" 172.8 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync
Я добавил это в свой монитор, но это не сработало, поэтому я решил добавить пользовательский EDID.
Теперь, чтобы создать EDID
Откройте Phoenix EDID Designer, в основном я импортировал EDID из реестра Windows, и я использовал его в качестве основы для изменения, потому что я не знал, как заполнить раздел «Цвет / установленные сроки», поэтому предварительное заполнение дало мне надеюсь, разумные значения (ну, это работает для меня, может быть, это была удача), во всяком случае, нажмите кнопку « read-only/modify
, которая позволяет редакцию, важные вещи, чтобы изменить
Генеральный:
Добавить все, что вы хотите здесь
Основные параметры отображения:
Video Input Definition -> Digital
Display Type -> RBG color
sRGB -> check
gamma value: somewhere over 250 would be ok
Стандартные сроки: (я отключил все, кроме идентификатора времени № 1)
H. Active Pixels (use the value obtained from PowerStrip, for full hd it should be 1920)
refresh rate (for me its 60Hz)
Подробные сроки:
set all blocks to "unused" except block #1:
Pixel Clock: (use from PS obtained info)
H/V Active Pixel : from PS info
H/V Blank : from PS info. this is actually **Front Porch**
H/V Sync Offset: from PS info. this is actually **Back Porch**
H/V Sync width: from PS info
Готово. Теперь сохраните полученный файл где-нибудь, вы можете открыть его, это текстовый файл.
Вам нужно сделать еще один шаг, чтобы преобразовать его в необходимый EDID-файл размером 128 байт; в основном я укажу на основную статью, описывающую трансформацию, но в итоге вам придется
strip
все из файла, кроме шестнадцатеричной матрицы цифр
- Скомпилируйте это:
#include <stdio.h>
int main()
{
while (!feof(stdin))
{
unsigned char i;
scanf("%02X ", &i);
printf("%c", i);
}
return 0;
}
И запустить:
# gcc comp.c -o comp
# ./comp < custom_edid.dat > custom_edid.bin
Готово! Перезапустите Ubuntu (после добавления настраиваемой опции конфигурации edid, описанной в начале публикации), и теперь в настройках сервера Nvidia X вы сможете установить свое собственное разрешение.