Что делает команда startx?
Читая об Ubuntu, я нашел следующее утверждение.....
Если диспетчер отображения не запускается по умолчанию на уровне запуска по умолчанию, вы можете запустить X другим способом, после входа в консоль текстового режима, запустив startx из командной строки.
Что значит быть уровнем запуска по умолчанию? И когда я попробовал это на своем терминале, я получил это:
anupam@JAZZ:~$ startx
X: user not authorized to run the X server, aborting.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
5 ответов
Когда-то (1), когда память компьютеров измерялась в килобайтах, а диски - в мегабайтах, постоянный запуск графического интерфейса считался вредным.
Большинство компьютеров Unix использовались для научных вычислений и моделирования в многопользовательских средах, и графический интерфейс, работающий на них, уменьшал бы доступную им память и мощность процессора.
Поэтому, когда вам нужен графический интерфейс, вы просто начинаете его startx
(2).
startx
в основном запускает Xserver (графический "драйвер") и команду, которая запускается на нем, который обычно является оконным менеджером. По умолчанию выполняемые команды находятся в ~/.xinitrc
файл в вашем домашнем каталоге или другой системный файл.
Считается, что современные системы постоянно работают с графической системой, поэтому никто, вероятно, не проверял работу startx
на века - это объясняет много странного поведения, которое вы можете иметь.
Если вы хотите поэкспериментировать и почувствовать старые добрые времена, лучше всего сделать следующее:
А) установить Xnest
а также fvwm
, Xnest - это графический сервер внутри сервера, своего рода сервер, который открывается как окно в вашей обычной системе. Fvwm - очень простой оконный менеджер, который тогда был очень популярен. Вам также понадобятся старые растровые шрифты.
sudo apt-get install xnest fvwm
sudo apt-get install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi-transcoded xfonts-75dpi
Б) напишите этот файл где-нибудь, например, у вас дома dir, и назовите его ~/test
:
#!/bin/bash
#
xterm &
exec fvwm2
C) Запустить (уведомление: startx
обычно запускается сначала командой клиента, затем двойным тире, а затем командой сервера. Как я уже сказал, большинство новых систем не имеют разумных значений по умолчанию для startx
в одиночестве.).
cd ~
startx ~/test -- /usr/bin/Xnest -ac :1 -geometry 800x600
... и у вас есть экран рабочей станции 80-х годов:
(Вы можете получить меню, нажав на рабочий стол "Xnest").
... и если вы чувствуете, что вы действительно любите приключения, вы можете запустить собственный сеанс на другой виртуальной консоли (прочитайте другие ответы), перейдя к одному из них с помощью Ctrl-Alt-F1, войдите в систему и
startx ~/test
который обычно открывается по Ctrl-Alt-F8.
Обратите внимание: современные среды рабочего стола не предназначены для одновременной работы одного и того же пользователя на двух разных консолях. Так что не используйте gnome-shell
или же unity
или современные вещи при выполнении этих экспериментов, или вы можете испортить вашу конфигурацию.
Примечания:
(1) Говоря о 1980-90 годах здесь.
(2) Например, у меня был ноутбук с 256 КБ ОЗУ. Это было мучительно медленно в (B&W!) Графическом интерфейсе, но быстро в консоли. Так что я сделал большую часть своей работы (редактирование C
, LaTeX
и аналогичные файлы) в режиме консоли и переключаются в графическую среду только тогда, когда это действительно необходимо.
startx
запускает xsession или графический интерфейс, где вы видите экран входа в систему и что-то большее, чем просто консоль ascii (текстовая сессия).
Вы получаете эту ошибку, потому что xsession уже запущен, и вы пытаетесь выполнить команду изнутри xsession на tty7.
tty7 - это пользовательский интерфейс, который существует по Ctrl + Alt + F7 (по умолчанию xsession).
tty1 - это пользовательский интерфейс, который существует по Ctrl + Alt + F1.
tty2 - это пользовательский интерфейс, который существует по Ctrl + Alt + F2.,, и так далее.
tty1 - tty6 являются текстовыми сессиями, и вы можете войти под своим именем пользователя и паролем на одном из этих экранов. После входа в систему вы можете запустить команду startx
и xsession запустится в tty7, если он еще не запущен, и tty8, если tty7 уже запускает xsession.
Уровни запуска:
run-level 0 Halt - Выключение системы.
run-level 1 однопользовательский режим - режим для административных задач.
run-level 2 Графический многопользовательский режим с сетевым подключением - нормально запускает систему.
уровень запуска 3-5 Не используется, но настроен так же, как уровень запуска 2
run-level 6 Reboot - перезагружает систему.
Термин "уровень выполнения" относится к режиму работы в одной из операционных систем компьютера, которые реализуют инициализацию в стиле Unix System V. Традиционно существует семь уровней выполнения, пронумерованных от нуля до шести; хотя может быть использовано до десяти, от нуля до девяти. S иногда используется как синоним одного из уровней. При загрузке выполняется только один "уровень запуска" - уровни запуска не выполняются последовательно, т. Е. Выполняется либо уровень запуска 2, либо 3, либо 4, а не 2, затем 3, а затем 4. - http://en.wikipedia.org/wiki/Runlevel
Это просто означает в другом tty.
Цитирую связанный вопрос:
По умолчанию Ubuntu имеет 7 tty.
1-6
только командная строка, 7
запускает ваш сеанс X (ваш обычный графический рабочий стол).
Чтобы получить к ним доступ, используйте эту комбинацию клавиш: Ctrl + Alt + F1
(изменение F1
на F1-F6 для доступа к нужному терминалу)
Чтобы вернуться к сеансу X (обычному рабочему столу), используйте: Ctrl + Alt + F7
after logging on to a text-mode console
просто означает вход в другой tty и ввод команды:
startx
QEMU + Buildroot минимальный пример
Мой любимый способ узнать, что что-то делает, это сделать минимальный пример, который запускает это.
На Ubuntu это трудно со второго startx
может конфликтовать с вашим текущим рабочим столом.
/questions/302125/chto-delaet-komanda-startx/302133#302133 предлагает Xnest
, но с QEMU + Buildroot мы можем пойти еще дальше и создать микро дистрибутив с установленным только X11.
Таким образом, должно быть легче понять, что происходит.
Я описал создание дистрибутива по адресу: https://unix.stackexchange.com/a/306116/32558
После того, как вы запустили образ в QEMU, вы запускаете оболочку TTY.
Затем, когда вы делаете:
root
startx
он запускает графический интерфейс X11:
Теперь взгляните на источник startx
внутри этого дистрибутива, который является просто сценарием оболочки.
Это простая обертка над /usr/bin/xinit
и что это проходит /etc/X11/xinit/xinitrc
в xinit
,
Если вы откроете /etc/X11/xinit/xinitrc
, он содержит следующие строки:
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
Итак, мы видим, что он запускается:
twm
: очень простой и старый оконный менеджерxclock
а такжеxterm
который мы видим на экране
За /usr/bin/xinit
, мы можем:
man xinit
что говорит о том, что:
Если в командной строке не указана конкретная клиентская программа, xinit будет искать файл в домашнем каталоге пользователя с именем.xinitrc для запуска в качестве сценария оболочки для запуска клиентских программ. Если такого файла не существует, xinit по умолчанию будет использовать следующее:
xterm -geometry +1+1 -n login -display :0
Если в командной строке не указана конкретная серверная программа, xinit будет искать файл в домашнем каталоге пользователя с именем.xserverrc для запуска в качестве сценария оболочки для запуска сервера. Если такого файла не существует, xinit по умолчанию будет использовать следующее:
X :0
Как отмечает Rmano, startx - очень старый подход. Еще в то время, когда это использовалось, в бинарнике X11 был установлен setuid root.
Я только что попробовал это на ВМ и действительно, startx
по умолчанию не работает. chmod u+s /usr/lib/xorg/Xorg
исправляет это все же.
Я не рекомендую делать Xorg
быть setuid root. Мир отошел от этого по разумной причине. Но если вы играете в одноразовой виртуальной машине, вот как startx
Работа.