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 при установке --output s (поскольку экраны обычно зеркально отражаются по умолчанию)

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

  • 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 ?

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

  • Мой указатель мыши не совсем точно совпадает с тем, где, по-видимому, обнаруживаются щелчки; щелчки обычно происходят ниже и справа от указателя. Когда у меня правильно настроены экраны, эта проблема обычно исчезает, хотя в настоящее время экраны имеют правильное разрешение, но указатель все еще слегка отключен.
  • Когда мне удается получить правильное разрешение, экран иногда мерцает. Это раздражает, но пригодно для жизни. Любая идея, что вызывает это или если это можно исправить?

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .