Запустите startx в фоновом режиме, не переключаясь на новый виртуальный терминал.

Запустите startx в фоновом режиме, не переключаясь на новый виртуальный терминал.

startxможет создать новый X-сервер в новом виртуальном терминале. Однако, даже если я запускаю его в фоновом режиме, т. е. sudo startx &, он все равно автоматически переключается на новый виртуальный терминал. Возможно ли создать новый виртуальный терминал, оставаясь в старом?

Кроме того, как узнать имя файла нового терминала? (Раньше я мог использовать ttyдля проверки в новом окне, но как мне добиться того же самого в старом?)

решение1

Если вы используете X.org, то это не представляется возможным. X-сервер поддерживаетвариантвызывается -novtswitch, но это применяется только при выходе из X-сервера, а не при его запуске. Учитывая обсуждение вОшибка Fedora № 246267, похоже, эта опция также применялась при запуске, но она была удалена, поскольку вызывала сбой X-сервера на большом количестве оборудования: X-серверу необходимо получить доступ к видеооборудованию при запуске.

Следующим лучшим решением было бы разрешить короткое мерцание другому vt и переключиться обратно. В Linux вы можете использоватьopenvtзапустить команду в новом виртуальном терминале иchvtчтобы вернуться обратно.

Создайте сценарий, ~/.xinitrc.chvtсодержащий

#!/bin/sh
echo "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"
chvt "$ORIGINAL_FGCONSOLE"
exec ~/.xinitrc

и беги

ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c 'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE'

(Отдельный скрипт ~/.xinitrc.chvtнеобходим, sh -c …поскольку startxон путает аргументы, содержащие подстановочные знаки, и вам нужно передать абсолютный путь из-за другой особенности startx. Либо вызовите xinitнапрямую и настройте XAUTHORITYего самостоятельно.)

В зависимости от того, где вы запускаете этот скрипт, у вас может не быть разрешения на запуск fgconsole(«Не удалось получить дескриптор файла, ссылающийся на консоль»), поскольку он должен иметь возможность открываться /dev/console, а он не может этого сделать, если им владеет какой-то другой пользователь (на практике root). Я не знаю, как узнать, как вернуться к исходной консоли в противном случае. Одним из решений, если у вас есть доступ root, будет замена ORIGINAL_FGCONSOLE=$(fgconsole) …на

ORIGINAL_FGCONSOLE=$(sudo fgconsole)

и дайте своей учетной записи разрешение на запуск fgconsoleот имени root, запустив visudoи добавив строку

zzy ALL = (root) NOPASSWD: /bin/fgconsole

после любой другой строки, которая относится к вашей учетной записи. Это безопасно, если только не ошибка в программе fgconsole.

¹ Если вы используете Linux, вы используете X.org, а если вы не используете Linux, то все равно есть хорошее изменение в том, что вы используете X.org.

Связанный контент