Как изменить разрешение экрана в Linux

В последнее время часто приходилось сталкиваться с задачей изменения разрешения экрана в Linux. Найти её решение в интернете не сложно. Но чтобы не искать каждый раз решил оставить памятку и у себя на блоге. Дополнительно оказалось, что во многих таких решениях (по всей видимости скопированных друг у друга) демонстрируется непонимание вывода команды xrandr.

Прежде чем менять разрешение экрана нужно выяснить несколько моментов:

  • какое разрешение у нас сейчас;
  • какое разрешения нам нужно;
  • через какой интерфейс (порт) подключен монитор.

На первый и третий вопросы отвечает команда xrandr.

Согласно статье: «xrandr — это расширение X сервера, позволяющее производить настройки режимов работы мониторов».

Вот что мы видим:

  1. наш монитор подключен к интерфейсу Virtual1 и работает с разрешением 1024х768 пикселей (соответствующая строка помечена на рисунке, так же соответствующее разрешение помечается звездочкой в списке);
  2. список доступных интерфейсов (Virtual1, Virtual2, Virtual3 и т.д.). Мы не будем менять интерфейс.

Теперь главный вопрос, который вызывает непонимание: что выводится в двух колонках? Понятно, что в первой — разрешение экрана, а во второй — его частота в герцах. Но что это за разрешение? Во многих интернет ответах на вопрос «как изменить разрешение экрана в Linux» пишут, что это «доступные разрешения для уcтановки». Это не совсем так. Дальнейшие описываемые действия авторов (создание режима, его добавление непонятно куда и переключение на него) являются абсолютно лишними и только вводят читателей в заблуждение. Так что же выводит xrandr?

Она выводит список доступных режимов работы. То есть, если в нашем примере выводится разрешение 1440×900, то режим для него уже существует. Его не нужно заново создавать и тем более добавлять куда-то. Для переключения на него нужно использовать всего одну команду:

xrandr --output Virtual1 --mode 1440x900

или более короткий вариант:

xrandr -s 1440x900

Команда —newmode нужна для создания нового режима, которого нет в выводе xrandr. А команда —addmode «рассказывает» о нем xrandr.

Допустим, мы хотим задать разрешение 1500×800. Его нет в выводе xrandr, поэтому нужно создать соответствующий ему режим. Но вначале нужно получить всю необходимую информацию. Это делается с помощью команды cvt. В терминале вбиваем:

cvt 1500 800 >1.txt

Аббревиатура cvt расшифровывается как Coordinate Video Timings. Так называется стандарт (VESA-2013-3 v1.2), задающий тайминги компонентов видеосигнала. В качестве параметров утилиты cvt мы указываем желаемое разрешение. Ее вывод направляется в текстовый файл 1.txt (удобнее для последующего копирования текста). Открыв его, мы увидим следующее:

# 1504×800 59.92 Hz (CVT) hsync: 49.80 kHz; pclk: 98.00 MHz
Modeline «1504x800_60.00» 98.00 1504 1584 1736 1968 800 803 813 831 -hsync +vsync

Для создания режима нам понадобится строка после слова Modeline. Обратите внимание: cvt несколько подкорректировала наш запрос. Видимо, так оно лучше соответствует стандартам. Теперь создаем режим и добавляем его в список доступных режимов.

xrandr --newmode "1504x800_60.00" 98.00 1504 1584 1736 1968 800 803 813 831 -hsync +vsync
xrandr --addmode Virtual1 1504x800_60.00

Теперь если мы вновь проверим список доступных режимов, то увидим там наш режим

Осталось только переключиться на него любым описанным ранее способом.

Иногда при добавлении нового режима возникает ошибка.

Как пишут на форумах, данная проблема появляется на закрытых драйверах nvidia. Ее решение, как правило, основывается на ручном редактировании файла настроек xorg.conf. Но об этом может быть в другой раз.

P.S. Имена интерфейсов (Virtual1, Virtual2 и т.д.) выглядят необычно потому, что ве эти эксперименты проводились на виртуальной машине. На реальной аппаратуре они обычно имеют вид: VGA1, DVI1 и др. Например, на моем стационарном компьютере с Linux на борту доступны интерфейсы: VGA-0, DVI-D-0 и HDMI-0.

P.P.S. Согласно википедии: «VESA(Video Electronics Standards Association) — ассоциация стандартизации видеоэлектроники, основанная в 1989 году компанией NEC Home Electronics и восемью другими производителями видеоадаптеров. Первоначально задачей ставилось создание стандарта SVGA(800х600 пикселей) для видеодисплеев. После этого, VESA продолжила создавать стандарты, в основном относящиеся к функционированию видео периферии в IBM-совместимых компьютерах.»

Добавить комментарий

Ваш адрес email не будет опубликован.