QXL на реальном железе

Добрый день.
Имеем компьютер с одной дискретной видеокартой (интегрированной графики нет).
Основная система - Arch Linux, но для игр и CAD сделана виртуальная машина на Windows. Туда и проброшена единственная видеокарта.
Для всех остальных задач хочется использовать Arch Linux, к которому подключаться удалённо через SPICE или VNC. Наткнулся на статью, рассказывающую об успешном опыте использования QXL на реальном железе в Fedora и Ubuntu. Понимаю, что разработчики SPICE работают под Fedora, но считаю, что Arch ничем не хуже. Тем более, статье уже почти 6 лет - достаточный срок, чтоб решение уже работало везде.
Установил xf86-video-qxl.
Создал файл /etc/X11/spiceqxl.xorg.conf:
Section "Device"
    Identifier "XSPICE"
    Driver "spiceqxl"
    Option "SpicePort" "5900"
    Option "SpicePassword" "1"
EndSection

Section "InputDevice"
    Identifier "XSPICE POINTER"
    Driver     "xspice pointer"
EndSection

Section "InputDevice"
    Identifier "XSPICE KEYBOARD"
    Driver     "xspice keyboard"
EndSection

Section "Monitor"
    Identifier    "Configured Monitor"
EndSection

Section "Screen"
    Identifier     "XSPICE Screen"
    Monitor        "Configured Monitor"
    Device        "XSPICE"
    DefaultDepth    24
EndSection

Section "ServerLayout"
    Identifier "XSPICE Example"
    Screen "XSPICE Screen"
    InputDevice "XSPICE KEYBOARD"
    InputDevice "XSPICE POINTER"
EndSection

Section "ServerFlags"
    Option "AutoAddDevices" "False"
EndSection

Запускаю SPICE-сервер командой
Xspice :0
Никаких серьёзных ошибок в выводе нет
# Xspice :0

X.Org X Server 1.19.6
Release Date: 2017-12-20
X Protocol Version 11, Revision 0
Build Operating System: Linux 4.9.71-1-lts x86_64
Current Operating System: Linux metallolom 4.14.12-1-ARCH #1 SMP PREEMPT Fri Jan 5 18:19:34 UTC 2018 x86_64
Kernel command line: root=/dev/sda2 rw initrd=/initramfs-linux.img intel_iommu=on video=efifb:off
Build Date: 25 December 2017  02:02:38PM

Current version of pixman: 0.34.0
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Tue Jan  9 12:53:57 2018
(==) Using config directory: "/etc/X11/xorg.conf.d"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
resizing surface0 to 16777216
memory space from 0x7fdad2709010 to 0x7fdad9706010
memory space from 0x7fdac9708010 to 0x7fdad1708010
resizing surface0 to 16777216
memory space from 0x7fdad2709010 to 0x7fdad9706010
memory space from 0x7fdac9708010 to 0x7fdad1708010
xspice: port = 5900, tls_port = 0
watch_add: adding 0x55d01a7d4240, fd=13
watch_add: adding 0x55d01a7d4200, fd=16
interface_get_init_info:
interface_attach_worker:
interface_set_compression_level: 0
playback: no audio FIFO directory, audio is disabled
ram_header at 134209536
surf0 size: 16777216
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
slots start: 0, slots end: 1
done reset
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
qxl_surface_create: Bad bpp: 1 (1)
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
qxl_surface_create: Bad bpp: 1 (1)
qxl_surface_create: Bad bpp: 1 (1)
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native
interface_get_command: native

Но в /var/log/Xorg.0.log попадает следующее:
[ 19858.923] (II) LoadModule: "kbd"
[ 19858.923] (WW) Warning, couldn't open module kbd
[ 19858.923] (II) UnloadModule: "kbd"
[ 19858.923] (II) Unloading kbd
[ 19858.923] (EE) Failed to load module "kbd" (module does not exist, 0)
[ 19858.923] (EE) No input driver matching `kbd'
[ 19858.923] (II) Falling back to input driver `libinput'
[ 19858.923] (II) Using input driver 'libinput' for '<default keyboard>'
[ 19858.923] (**) Option "CoreKeyboard" "on"
[ 19858.923] (**) <default keyboard>: always reports core events
[ 19858.923] (EE) PreInit returned 2 for "<default keyboard>"
[ 19858.923] (II) UnloadModule: "libinput"
[ 19858.929] (II) config/udev: Adding input device Power Button (/dev/input/event1)
[ 19858.929] (II) AutoAddDevices is off - not adding device.
[ 19858.929] (II) config/udev: Adding input device Power Button (/dev/input/event0)
[ 19858.929] (II) AutoAddDevices is off - not adding device.
[ 19858.929] (II) config/udev: Adding input device SIGMACH1P USB Keykoard (/dev/input/event5)
[ 19858.929] (II) AutoAddDevices is off - not adding device.
[ 19858.929] (II) config/udev: Adding input device SIGMACH1P USB Keykoard (/dev/input/event6)
[ 19858.929] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device A4TECH USB Device (/dev/input/event3)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device A4TECH USB Device (/dev/input/event4)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device A4TECH USB Device (/dev/input/mouse0)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device HDA Intel PCH Line Out Front (/dev/input/event10)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device HDA Intel PCH Line Out Surround (/dev/input/event11)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.930] (II) config/udev: Adding input device HDA Intel PCH Line Out CLFE (/dev/input/event12)
[ 19858.930] (II) AutoAddDevices is off - not adding device.
[ 19858.931] (II) config/udev: Adding input device HDA Intel PCH Front Headphone (/dev/input/event13)
[ 19858.931] (II) AutoAddDevices is off - not adding device.
[ 19858.931] (II) config/udev: Adding input device HDA Intel PCH Front Mic (/dev/input/event7)
[ 19858.931] (II) AutoAddDevices is off - not adding device.
[ 19858.931] (II) config/udev: Adding input device HDA Intel PCH Rear Mic (/dev/input/event8)
[ 19858.931] (II) AutoAddDevices is off - not adding device.
[ 19858.931] (II) config/udev: Adding input device HDA Intel PCH Line (/dev/input/event9)
[ 19858.931] (II) AutoAddDevices is off - not adding device.
[ 19858.931] (II) config/udev: Adding input device PC Speaker (/dev/input/event2)
[ 19858.931] (II) AutoAddDevices is off - not adding device.

Запускаю на соседнем компьютере (тоже Arch) spicy, подключение к серверу проходит успешно. Но вижу только чёрный экран и больше ничего.

Дополнительно попробовать решить задачу через VNC, используя qxl или dummy драйвер.
В обоих случаях результат был одинаковый - подключение проходит успешно, я даже вижу логотип KDE, затем - только чёрный экран и курсор. Приложения запускаются, клики мышью - срабатывают, можно "работать" как будто просто монитор выключен.


Но предлагаю пока не пытаться разобраться с VNC, т.к. говорят, что QXL+SPICE даёт куда более комфортную производительность.
X11 forwaring - работает, но производительность явно не подходит.

Надеюсь на помощь сообщества.
Я к рабочей машине подключаюсь (если нужно в полный экран, обычно хватает ssh) при помощи TeamViewer, через файерволы, NAT и прочие препятствия. Производительность - вполне, даже понимает что с той стороны два дисплея.
Решение так себе, но для интереса попробую Teamviewer поставить и посмотреть будет ли работать он без видеокарты :)
А поиск возможности подключения через SPICE продолжается.
Wedge, подскажите пожалуйста, как пробросить в qemu единственную видеокарту?
www.linux32.ru - новости и статьи о Linux
32reg
Wedge, подскажите пожалуйста, как пробросить в qemu единственную видеокарту?
Отличий, вроде, нет - так же, как и одну из нескольких.
Если у Вас не получается - создайте тему с описанием проблемы, я помогу. А потом будем вместе думать как пользоваться Linux'ом без видеокарты
 
Зарегистрироваться или войдите чтобы оставить сообщение.