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.