Участник с: 09 января 2018
|
Добрый день. Имеем компьютер с одной дискретной видеокартой (интегрированной графики нет). Основная система - 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 - работает, но производительность явно не подходит.
Надеюсь на помощь сообщества.
|