Что делает команда 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 Работа.

Другие вопросы по тегам