Некоторые картинки не загружаются из РФ и РК, используйте VPN.

четверг, 22 февраля 2024 г.

QEMU KVM Два монитора


Появилась интересная задачка - организация рабочего места на съемном носителе (ssd). Ну интересное тут другое, там используется виртуализация на базе QEMU. Установка и настройка производились на Hyper-V (виртуализация в виртуализации) на внешний ssd (проброшен в VM).

Установка QEMU выглядела так:

sudo apt-get install  --no-install-recommends qemu-system-ppc libvirt-daemon-system libvirt-clients virt-manager gir1.2-spiceclientgtk-3.0

Вот я сделал, а заказчик спрашивает, а как мне работать на двух мониторах?

Поясню, на носителе базовая операционная система, а в ней есть гипервизор QEMU KVM. Человек запускает виртуальную машину и работает через консоль. А у него два монитора и растянуть окно нельзя.

В поисках решений перепробовал много вариантов, в итоге решение нашлось.

Ставим virt-viewer:

apt-get install virt-viewer
В настройках vm модель видео ставим virtio и добавляем head в режиме редактирования XML
для редактирования XML требуется добавить разрешение:



Пример XML, слот может быть другой, будьте внимательны
<video>
  <model type="virtio" heads="2" primary="yes">
    <acceleration accel3d="no"/>
  </model>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
</video>

Далее в разделе Server Spice проверяем настройки


Для доступа снаружи в Адрес выбираем "Все интерфейсы". Для локальной работы достаточно localhost. Записываем какой порт использовать (5900). Запускаем VM.  Открываем приложение virt-viewer



Указываем адрес и порт, нажимаем подключиться. Вот тут должно появится два окна. Обычно второе окно имеет разрешение 640*480, что не удобно, так как каждый раз нужно перенастраивать. Настройка осуществляется в менеджере дисплея, даже сохранение профиля не помогает. 
Указание разрешение в grub:
GRUB_GFXMODE=1920x1080
Решает проблему только на перезагрузку. При выключении машины настройки не применяются для мониторов типа Virtual.

Методом научного тыка была подобрана такая комбинация:
xrandr --output Virtual-1 --mode 1920x1080 --pos 0x0 --output Virtual-2 --mode 1920x1080 --pos 1920x0
При таких вводных:
[workstation user ~]% xrandr --listactivemonitors
Monitors: 2
 0: +*Virtual-1 1920/609x1080/342+0+0  Virtual-1
 1: +Virtual-2 1920/609x1080/342+1920+0  Virtual-2
Попытался записать скрипт в /etc/lightdm/lightdm.conf в разделе Seat

После перезагрузки графика не загружается, только курсор мигает и все
Поэтому данный "скрипт" был записан в файл на рабочем столе, пользователь после входа в учетку запускает его и получает два окна FullHD.
Потом было принято решение довести этот вопрос до автоматизма, скрипт переместил в /opt и добавил его в автозапуск. Для этого нужно создать файл /etc/xdg/autostart/xrandr-settings.desktop с таким содержимым:
[Desktop Entry]
Type=Application
Version=1.0
Name=Custom randr settings

Exec=/opt/monitor.sh
Icon=
Comment=
Path=
Terminal=false
StartupNotify=false
Вместо скрипта в Exec можно указать в одну строку, нельзя, только файл скрипта.
Скрипт я переписал так:
#!/bin/sh
(
        date
        res="1920x1080"
        xrandr --output Virtual-1 --mode $res --pos 0x0
        xrandr --output Virtual-2 --mode $res --pos 1920x0
) >>/home/user/monitor.log 2>&1
Для теста. Проверить без перезагрузки можно кликнув два раза в файловом менеджере по файлу


Комментариев нет:

Отправить комментарий