что делает команда startx?

18

Читая об 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
Лазарь
источник
Я только что запустил startx, но получил ту же ошибку, что и вы, поэтому я сделал это sudo. Превращает это, это вошло меня в учетную запись root. То, что я сделал, чтобы вернуться к моему пользователю, был выход из root.

Ответы:

25

Давным-давно (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 

B) напишите этот файл где-нибудь, например, в вашем домашнем каталоге, и назовите его ~/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и подобные файлы) в консольном режиме, и переключается в графической среде только тогда , когда действительно необходимо.

Rmano
источник
4
Спасибо @ Rmano, отличное объяснение полностью получилось ...
Лазарь
9

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. - en.wikipedia.org/wiki/Runlevel

mchid
источник
Спасибо, мне это очень помогло,
Лазарь
но когда я захожу в tty1 и выполняю $ startx, я получаю окно рабочего стола без какой-либо панели запуска и других опций ... (на tty8) -ctrl + Alt + F8, это то, что мой startx не был хорошо настроен, или он показывает некоторые ограничения опции на startx (как здесь только Desktop)
Лазарь
1
@jazzz Это ваша стандартная среда x. Скорее всего, у вас установлено несколько рабочих столов. Вы должны быть в состоянии CTRL + T, чтобы получить терминал, чтобы вы могли запускать такие команды, как unityили gnome-shell --replaceили даже gnome-panelили metacity --replace.
mchid
@jazzz Кроме того, если вы принимаете этот ответ, нажмите значок слева, чтобы закрыть его. Благодарность!
mchid
извините, я немного опоздал на другой запрос относительно этого --- новое окно, которое я получил с помощью Ctrl + Alt + F8, как я уже говорил выше, похоже на рабочее пространство?
Лазарь
4

Это просто означает в другом 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
Parto
источник
1

Как отмечает Rmano, startx - очень старый подход. Еще в то время, когда это использовалось, в бинарном файле X11 был установлен setuid root.

Я только что опробовал это на виртуальной машине, и действительно startx, по умолчанию , не получается. chmod u+s /usr/lib/xorg/Xorgисправляет это все же.

Я не рекомендую делать Xorgбыть setuid root. Мир отошел от этого по разумной причине. Но если вы играете в одноразовой виртуальной машине, это то, как заставить startxработать.

Фил П
источник
1

QEMU + Buildroot минимальный пример

Мой любимый способ узнать, что что-то делает, это сделать минимальный пример, который запускает это.

В Ubuntu это сложно, поскольку секунда startxможет конфликтовать с вашим текущим рабочим столом.

/ubuntu//a/519164/52975 предлагает Xnest, но с QEMU + Buildroot мы можем пойти еще дальше и создать микро дистрибутив с установленным только X11.

Таким образом, должно быть легче понять, что происходит.

Я описал создание дистрибутива по адресу: /unix//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
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник