Я выполняю человечность gcp экземпляр с присоединенным nvidia v100. Я установил графические драйверы и проверил использование правильности nvidia-smi
и vulkaninfo
. Оба шоу никакие ошибки. Это показывает, что графические драйверы установлены правильно.
Теперь я хочу иметь удаленную службу удаленного рабочего стола Google использования доступа дисплея. Таким образом, я следовал бездисплейным инструкциям по установке и всему seemd, чтобы подходить, пока я не протестировал видеокарту. Так или иначе при выполнении vulkaninfo
в терминале в удаленном рабочем столе это ошибки с этим сообщением:
/build/vulkan-UL09PJ/vulkan-1.1.70+dfsg1/demos/vulkaninfo.c:2700: failed with VK_ERROR_INITIALIZATION_FAILED
Я погуглил везде и даже искал vulkaninfo исходный код для понимания, где эта ошибка происходит из, но я не могу найти его.
Кто-либо знает то, что вызывает эту ошибку? Почему драйвер вулкана хорошо работает в ssh терминале, но не в виртуальном дисплее?
Я выяснил способ заставить это работать, но это - симпатичный hacky. Я не делаю reccommand это для чувствительных систем
Все это запустилось с этой страницы, которая говорит нам
Если сервер X11, связанный с dpy, не владеет дисплеем, или если разрешение получить доступ к нему было уже получено другим объектом, вызов должен возвратить код ошибки VK_ERROR_INITIALIZATION_FAILED.
Это приводит меня к этому вопросу и этой команде: ps -ef | grep X
. Это показало, что текущий дисплей был запущен с помощью xvfb
. Это - x виртуальный кадровый буфер. По-видимому, xvbf не поддерживает вулкан. Поэтому давайте посмотрим, можем ли мы заставить удаленный рабочий стол Google использовать нормальный X-сервер (спойлер: да!).
Код позади chrome-remote-desktop
сервис находится в /etc/init.d/chrome-remote-desktop
, который в свою очередь работает /opt/google/chrome-remote-desktop/chrome-remote-desktop
(исходный код). Там мы находим, что можем использовать CHROME_REMOTE_DESKTOP_USE_XORG
переменная среды, чтобы заставить удаленный рабочий стол Google запустить дисплей Xorg с фиктивным драйвером. Давайте включим его путем добавления следующей строки к /etc/environment
файл:
CHROME_REMOTE_DESKTOP_USE_XORG=1
После перезапуска сервиса я получил следующую ошибку
Only console users are allowed to run the X server
Почему X-сервер не запущен корнем? Поскольку сервис удаленного рабочего стола Chrome запускает отдельный дисплей для каждого пользователя от имени того пользователя.
Для фиксации выше ошибки, можно отредактировать /etc/X11/Xwrapper.config
и набор allowed_users = anybody
.
Теперь X-сервер жалуется что -logfile
только доступно, когда сервер выполняется как корень (т.е. с реальным-uid 0). Если Вы похожи на меня и не заботитесь о входе, можно отредактировать /opt/google/chrome-remote-desktop/chrome-remote-desktop
и удалите следующую строку (вокруг номера строки 581):
"-logfile", "/dev/null",
Почти там!
Теперь X-сервер жалуется что -config
должен быть относительный путь. Эта страница объясняет, что файл конфигурации должен быть помещен в /etc/X11/<cmdline>
или /usr/etc/X11/<cmdline>
. Просмотр исходного кода /opt/google/chrome-remote-desktop/chrome-remote-desktop
мы видим следующее:
with tempfile.NamedTemporaryFile(
prefix="chrome_remote_desktop_",
suffix=".conf", delete=False) as config_file:
config_file.write(gen_xorg_config(self.sizes).encode())
В данный момент файл конфигурации создается в /tmp
, поэтому давайте переместим это. Добавьте следующую строку между префиксом и снабдите суффиксом строку:
dir="/etc/X11/",
X хочет получить относительный путь, таким образом, мы должны измениться
"-config", config_file.name
кому:
"-config", os.path.basename(config_file.name)
И потому что мы не корень, который мы должны дать пользователям, пишут разрешение в эту папку. Поэтому давайте работать:
sudo chmod 777 /etc/X11
Мы делаем все это так, чтобы мы могли использовать драйверы Nvidia. Замените фиктивный драйвер:
'Section "Device"\n'
' Identifier "Chrome Remote Desktop Videocard"\n'
' Driver "dummy"\n'
' VideoRam {video_ram}\n'
'EndSection\n'
с драйвером Nvidia:
'Section "Device"\n'
' Identifier "Chrome Remote Desktop Videocard"\n'
' Driver "nvidia"\n'
' VendorName "NVIDIA Corporation"\n'
' VideoRam {video_ram}\n'
'EndSection\n'
Так или иначе этой установке не нравится изменять размер, поэтому я вызвал единственный размер путем установки DEFAULT_SIZES_XORG
кому: "1920x1080"
.
И теперь это работает!