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

1751
Kyle Strand

Хотя есть несколько существующих вопросов по этому вопросу (из которых самый полезный ответ - это ) и различные темы на других форумах, я не могу надежно установить свои 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сеанса?

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

  • Мой указатель мыши не совсем точно совпадает с тем, где, по-видимому, обнаруживаются щелчки; щелчки обычно происходят ниже и справа от указателя. Когда у меня правильно настроены экраны, эта проблема обычно исчезает, хотя в настоящее время экраны имеют правильное разрешение, но указатель все еще слегка отключен.
  • Когда мне удается получить правильное разрешение, экран иногда мерцает. Это раздражает, но пригодно для жизни. Любая идея, что вызывает это или если это можно исправить?
23
Мне нужно будет откопать свои заметки, но какие режимы поддерживаются для ваших дисплеев? у i3 есть способ запустить скрипт до / сразу после входа в систему? http://superuser.com/questions/808737/setting-and-keeping-resolution-settings-for-a-display-thats-not-autodetected-on это то, что я в конечном итоге сделал с похожей, физической проблемой, но это может потребоваться немного финализации, чтобы работать в вашем случае. Journeyman Geek 9 лет назад 0
@JourneymanGeek 4K имеет поддержку большинства стандартных режимов при 60 Гц и поддержку более крупных режимов (включая 4K) при 30 Гц. SyncMaster поддерживает большинство нормальных режимов с собственным (вертикальным) разрешением 1920x1280. Скрипт конфигурации i3 поддерживает запуск скрипта при входе в систему; Я использую эту функцию для автоматического запуска описанного выше скрипта, который похож на ваш, но я продолжаю получать странные ошибки `xrandr`. Kyle Strand 9 лет назад 0
Как вы запускаете i3? Есть ли у него собственная процедура инициализации X? Или вы помещаете его в свой файл .xinitrc и используете `startx`? Я использую xmonad (который, как я понимаю, похож на i3?), Который запускаю с помощью `startx`. Мой сценарий `xrandr` выполняется в` .xinit` непосредственно перед запуском моего оконного менеджера. У меня были отличные результаты таким образом. X готов к работе, и ничто другое не начало вмешиваться. Chris 9 лет назад 0
Я использую `gdm3` и выбрал` i3` в качестве среды рабочего стола по умолчанию для моей учетной записи. Kyle Strand 9 лет назад 0
Извините, не уверен, как я это пропустил. Вы пробовали вводить команды `xrandr` непосредственно в сценарии запуска gdm? (/ etc / gdm / * согласно [Arch Wiki] (https://wiki.archlinux.org/index.php/Xrandr#Configuration)) Хотя я не уверен, насколько это будет полезно, если vbox не ' последовательно назначать идентификаторы дисплея ... Chris 9 лет назад 0
@ Крис Ну, это * длинный * вопрос :) Я не пробовал - это, безусловно, стоило бы попробовать. Одной из стратегий было бы установить «предпочтительные» режимы в init `gdm`, затем использовать` --auto` в init `i3` (что, кажется, работает довольно надежно, когда предпочтительные режимы оказываются правильными). Есть идеи, можно ли вручную установить «предпочтительные» режимы? Kyle Strand 9 лет назад 0
К сожалению, я не могу вспомнить об этом сразу, поскольку VBox, похоже, не назначает имена мониторам последовательно. Не могли бы вы опубликовать вывод `xrandr --query` (a), когда он неправильно определяет настройки, и (b) после того, как все заработало правильно? Или хотя бы один из всего, что работает правильно. Chris 9 лет назад 1
@Chris На самом деле имена не имеют большого значения - я могу просто поменять их, если нужно, и в целом они, похоже, не сильно меняются. Проблема в том, что VBox, по-видимому, всегда сообщает * один и тот же набор * "допустимых" режимов для каждого монитора, но не согласуется, сообщает ли он о реальных аппаратных собственных разрешениях. На самом деле ... если подумать, может быть, он правильно сообщает действительный набор аппаратных разрешений, но xrandr читает разрешения в неподходящие моменты, когда один или несколько экранов отключены. Где `xrandr` фактически получает свой список" допустимых режимов "? Kyle Strand 9 лет назад 0
..... Кроме того, я только что заметил, что в моей текущей (действительной) настройке собственные разрешения * не * реплицируются между режимами, перечисленными для каждого экрана: то есть, каждый экран имеет некоторый набор общих режимов низкого разрешения (вверх до 1024x768) плюс * один * режим высокого разрешения, соответствующий фактическому правильному исходному разрешению. Kyle Strand 9 лет назад 0
Я не уверен, как он попал в это состояние, но держу пари, я мог бы выяснить, как заставить его, если бы я лучше понял, откуда на самом деле `xrandr 'получает информацию. Kyle Strand 9 лет назад 0
`xrandr` должен получить настройки, о которых напрямую сообщает графический драйвер через расширение RandR. У меня есть теория: по соображениям совместимости драйвер VBox сообщает о всех возможных режимах по умолчанию. В драйвере должен быть хук, к которому привязывается Gnome, чтобы он работал с функцией автоматического изменения размера. Если это так, он может никогда не работать правильно с `i3`. Я думаю, что ключ заключается в том, чтобы выяснить, где именно эта функция «автоматического изменения размера» подключается к подсистеме управления дисплеем ... Но я должен признать, что на данный момент это обоснованное предположение. Chris 9 лет назад 0
Не могли бы вы предоставить точную ссылку на ноутбук, чтобы увидеть, какая у вас основная графика? Также важно понимать, что является хост-ОС. Вы пробовали обновить до последней версии Virtualbox? yilmi 8 лет назад 0
@yilmi Я предоставил точную версию графического драйвера, а также упомянул, что хост - это Windows 7. Есть ли какая-то дополнительная информация, которая может помочь? Kyle Strand 8 лет назад 0
Точная ссылка на ноутбук, некоторые ноутбуки имеют двойной графический процессор с проводным выходом, в этом случае обход PCI может быть обходным путем. Я просмотрел список изменений и увидел, что VirtualBox 5.0.2 может решить проблему с 3D-проблемой, которая может соответствовать вашей, но не лучше, чем попытка ;-) yilmi 8 лет назад 0
@yilmi Ауг, хотел ответить раньше. Я думаю, что я использую ThinkPad W540 (на данный момент он не передо мной) или T540. Определенно еще не обновился до VirtualBox 5, поэтому я попробую это. Kyle Strand 8 лет назад 0
@Kyle: W540 и t540p используют nvidia в качестве дискретной видеокарты, что означает, что Intel GPU является основным, NVIDIA GPU используется для разгрузки. Какие драйверы вы используете на хост-ОС? yilmi 8 лет назад 0
@yilmi Как я уже говорил, есть настройка BIOS, которую я использую, чтобы сделать nvidia gpu основной. Я проверю позже. Kyle Strand 8 лет назад 0
@yilmi На самом деле я не уверен, о каких драйверах хост-системы ты спрашиваешь; как я уже упоминал в этом вопросе, мой графический драйвер nVidia версии 340.84. Kyle Strand 8 лет назад 0
@yilmi Обновление до последней версии VirtualBox могло решить проблему, как описано здесь. Я не перезагружал свою машину некоторое время, но кажется, что я всегда в состоянии поддерживать правильные настройки экрана, несмотря на то, что аппаратные мониторы отключены, переключаются между оконным и полноэкранным режимами и т. Д. Одна новая проблема заключается в том, что когда я отключаю и повторно подключаю физические экраны, а затем пытаюсь просмотреть экраны гостевой ОС, я могу видеть только всплывающую панель инструментов VirtualBox, пока не отменим выбор, а затем снова выберите «Просмотр»> «Полноэкранный режим». Kyle Strand 8 лет назад 0

1 ответ на вопрос

0
Kyle Strand

Updating to the latest VirtualBox version, 5.0.14, appears to have resolved the issue.