Невозможно надежно автоматизировать настройки xrandr в Debian 7 на VirtualBox

23

Хотя есть несколько существующих вопросов по этому вопросу (из которых наиболее полезный ответ - это ) и различные темы на других форумах, я не могу надежно установить свои xrandrнастройки в Debian 7 на VirtualBox.

Я пытаюсь использовать его xrandrдля управления настройками дисплея (а не для того, чтобы среда рабочего стола могла их автоматизировать), потому что я использую i3диспетчер окон , который не автоматизирует настройки дисплея и не использует настройки дисплея среды рабочего стола Gnome.

Настроить:

Я не уверен, насколько уместно что-либо из этого, особенно аппаратное обеспечение, поскольку я не думаю, что Debian может получить доступ к большому количеству информации о настройке монитора; насколько я могу судить, VirtualBox просто сообщает о существовании виртуальных экранов, как если бы они были аппаратными мониторами.

аппаратные средства

  • Ноутбук Lenovo с графикой nVidia (встроенный графический процессор Intel не используется, AFAIK - есть настройка BIOS, которую я использовал для этого)
    • Windows 7
    • 32 ГБ ОЗУ
    • Использование последнего (я думаю) драйвера nVidia (340.84) - это может иметь значение, поскольку я включил 3D-ускорение в VirtualBox (см. Ниже), которое, я думаю, позволяет гостевой ОС иметь доступ к оборудованию хоста.
  • Seiki 4K TV (используется как монитор) через HDMI через док-станцию ​​(которая внутренне преобразует DisplayPort в HDMI)
  • Монитор Samsung SyncMaster 243T повернут вертикально

VirtualBox

  • Использование VirtualBox 4.3.20
  • Гостевые дополнения (той же версии) установлены
  • Количество мониторов: 2 (присваивается Seiki и SyncMaster в полноэкранном режиме)
  • Максимальная используемая видеопамять (128 МБ)
  • 3D ускорение включено

Настройки гостя

  • 32-битный Debian 7
  • gnomeи gdm3установлены
  • Предпочитаемый WM i3

Поведение:

При запуске i3и запросов xrandr, настройки отображения по умолчанию всегда кажутся идентичными VBOX0и VBOX1, два «наблюдатели» , что VirtualBox доклады xrandr(по крайней мере, это то , как я понимаю, я мог бы что - то не хватает). Обратите внимание, что, насколько я могу судить, нет хорошего способа определить, какой VBOX # является монитором без проб и ошибок.

Обычно это включает в себя разумное (если немного ниже родного) разрешение для моего вертикального SyncMaster, но не разрешение 4K для Seiki. Параметр «Автоматическое изменение размера гостевого дисплея» в VirtualBox не влияет xrandr.

Я пробовал различные модификации сценария, описанного в ответе, связанном выше , но в целом я, кажется, получаю различные xrandrошибки. Я не нашел много взаимосвязей между различными вещами, которые я пробовал, и ошибками, которые я получаю, но вот основные вещи, которые могут быть важны:

Скрипт твиков

  • (Обычно) пропуская VBoxServiceшаги перезапуска (они, кажется, не изменяют xrandrповедение)
  • Используйте xrandr --fbопцию перед любыми другими xrandrкомандами; это иногда приводит к ошибке «указанный экран недостаточно велик», перечисленной ниже
  • Используйте 30 кадров в секунду вместо 60 (4K через текущий HDMI - максимум 30 кадров в секунду, но я не думаю, что это должно иметь значение в VirtualBox; во всяком случае, я думаю, что иногда у меня это работало, а иногда - оба раза)
  • Используйте cvtвместо gtf(кажется, что они ведут себя в основном одинаково)
  • Замените первое число, данное как gtf(которое обычно составляет около 200 или 300), на меньшее, например, 100.00(я думаю, это сработало один или два раза в командной строке, но, как правило, не имеет значения)
  • Произведите рандомизацию названий новых режимов с помощью $RANDOM(я также пробовал другие способы манипулирования именами)
  • Явные --rmmodeрежимы перед их созданием с использованием --newmode(это, кажется, предотвращает ошибку «шрифта», указанную ниже)
  • Используйте --right-ofили --left-ofпри настройке --outputs (поскольку экраны обычно зеркально отражаются по умолчанию)

Сообщения об ошибках

  • xrandr: specified screen 5120x2160 not large enough for output VBOX0 (3840x2160+3840+0) X Error of failed request: BadValue (integer parameter out of range for operation) Я получил это только сейчас при повторном запуске сценария после того, как мониторы уже были приведены к их надлежащему разрешению (используя обходной путь, описанный в следующем разделе). Это удивило меня, потому что xrandrсообщает следующее: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) Это иногда происходит при попытке сделать --newmode. Вероятно, это вторая наиболее распространенная причина сбоя скрипта. Я думаю , что это может быть вызвано xrandr«запоминание» имя режима от предыдущей попытки установить его, но используя $RANDOMэто не по всей видимости, последовательно решить эту проблему, так что это может быть какой - то другой проблемой. (Я полагаю, что, возможно, даже при $RANDOMналичии конфликтов имен.) Я не видел этой ошибки с тех пор, как начал использовать --rmmode, но я не запускал сценарий достаточное количество раз с момента добавления этой команды, чтобы убедиться, что она имеет значение для поведение.
  • X Error of failed request: BadMatch (invalid parameter attributes) Это иногда происходит при попытке сделать --addmode. Вероятно, это самая распространенная причина сбоя сценария, и он меня озадачивает. Иногда ручное (т. Е. В терминале) выполнение той же последовательности команд, которая используется сценарием, кажется приемлемым обходным путем для этой ошибки, которая является странной.

Обход гнома:

Я обнаружил, что если я захожу на рабочий стол Gnome, затем выполняю функцию VirtualBox «Автоматическое изменение размера гостевого дисплея», затем выхожу из системы и снова использую ее i3, xrandrкак правило, включающую правильные разрешения для Seiki и SyncMaster в своем автоматически сгенерированном виде. список режимов, и разрешение 4K устанавливается как «предпочтительное» разрешение для каждого экрана VBOX. Это позволяет мне просто использовать xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], а затем xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](обратите внимание, что разрешение SyncMaster по-прежнему должно быть указано вручную, поскольку xrandrсообщает об одном и том же предпочтительном разрешении для обоих VBOX# без учета правды или здравомыслия).

Этот обходной путь, однажды выполненный, по- видимому, сохраняется при выключениях и перезагрузках (то есть требуемые режимы все еще присутствуют в xrandrсписке режимов, хотя мне все еще нужно запускать две xrandrкоманды после запуска i3сеанса), но не всегда сохраняется, когда просто выход из системы и начало нового i3сеанса. Обратите внимание, что gdm3экран входа никогда не имеет правильного разрешения (насколько я видел). У меня нет дальнейших комментариев о странности, происходящей здесь.

РЕДАКТИРОВАТЬ: Этот подход, кажется, не для сценариев, и поведение на самом деле не выглядит согласованным.

Другие заметки:

  • У меня нет xconf(или аналогичного) файла в моем каталоге etc/X11.
  • Исправление дисплеев является довольно распространенной проблемой, потому что всякий раз, когда я выключаю один из моих мониторов, VirtualBox убивает один из полноэкранных виртуальных мониторов. (Urgh.)

Вопросов:

  • Есть ли какой-нибудь способ программно отличить реальные аппаратные возможности (то есть собственные разрешения) разных мониторов от VirtualBox?
  • Почему я вижу эти различные ошибки? Что происходит xrandrи т. Д.?
  • Есть ли способ надежно достичь правильного полноэкранного разрешения без необходимости начинать gnomeсеанс до начала i3сеанса?

Возможно связанные вопросы

  • Мой указатель мыши не совсем точно совпадает с тем, где, по-видимому, обнаруживаются щелчки; щелчки обычно происходят ниже и справа от указателя. Как только у меня правильно настроены экраны, эта проблема обычно исчезает, хотя в настоящее время экраны имеют правильное разрешение, но указатель по-прежнему немного выключен.
  • Когда мне удается получить правильное разрешение, экран иногда мерцает. Это раздражает, но пригодно для жизни. Любая идея, что вызывает это или если это можно исправить?
Кайл Стрэнд
источник
Мне нужно выкопать свои заметки, но какие режимы поддерживаются для ваших дисплеев? у i3 есть способ запустить скрипт до / сразу после входа в систему? superuser.com/questions/808737/… это то, что я закончил с похожей, физической проблемой, но для работы в вашем случае, возможно, потребуется немного уточнить.
Подмастерье Компьютерщик
@JourneymanGeek 4K имеет поддержку большинства стандартных режимов при 60 Гц и поддержку более крупных режимов (включая 4K) при 30 Гц. SyncMaster поддерживает большинство нормальных режимов с собственным (вертикальным) разрешением 1920x1280. Скрипт конфигурации i3 поддерживает запуск скрипта при входе в систему; Я использую эту функцию для автоматического запуска описанного выше скрипта, который похож на ваш, но я продолжаю получать странные xrandrошибки.
Кайл Стрэнд
Как вы запускаете i3? Есть ли у него собственная процедура инициализации X? Или вы его бросаете в свой .xinitrcи используете startx? Я использую xmonad (который, как я понимаю, похож на i3?), Который я запускаю, используя startx. Все мои xrandrсценарии выполняются как .xinitраз перед запуском моего оконного менеджера. Так у меня были отличные результаты. X готов к работе, и ничто другое не начало вмешиваться.
Крис
Я использую gdm3и i3выбрал в качестве рабочего стола по умолчанию для моей учетной записи.
Кайл Стрэнд,
1
К сожалению, я не могу вспомнить об этом сразу, поскольку VBox, похоже, не назначает имена мониторам последовательно. Не могли бы вы опубликовать вывод xrandr --query(а), когда он неправильно определяет настройки, и (б) после того, как все заработало правильно? Или хотя бы один из всего, что работает правильно.
Крис

Ответы:

0

Обновление до последней версии VirtualBox 5.0.14, похоже, решило проблему.

Кайл Стрэнд
источник