o que o comando startx faz?


18

Ao ler sobre o Ubuntu, encontrei a seguinte declaração .....

Se o gerenciador de exibição não for iniciado por padrão no nível de execução padrão, você poderá iniciar o X de uma maneira diferente, após efetuar logon em um console em modo de texto, executando startx na linha de comando.

O que significa ser um nível de execução padrão? E quando tentei isso no meu terminal, obtive o seguinte:

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

Acabei de executar o startx, mas recebi o mesmo erro que você, então fiz o sudo. Acontece que me logou na conta root. O que fiz para retornar ao meu usuário foi sair da raiz.

Respostas:


25

Era uma vez (1), quando a memória dos computadores era medida em kilobytes e os discos em megabytes, executar a interface gráfica o tempo todo era considerado prejudicial.

A maioria dos computadores Unix era usada para cálculos científicos e simulações em ambientes multiusuários, e a interface gráfica em execução neles reduzia a memória e a potência da CPU disponíveis.

Então, quando você precisava de uma interface gráfica, você a iniciou com startx(2).

startxbasicamente executa um Xserver (o "driver" gráfico) e um comando que é executado nele, que normalmente é um gerenciador de janelas . Por padrão, os comandos executados estão no ~/.xinitrcarquivo em seu diretório inicial ou em algum arquivo de sistema genérico.

Os sistemas modernos são pensados ​​de baixo para cima para ter um sistema gráfico funcionando o tempo todo, portanto, provavelmente ninguém verifica o funcionamento startxhá séculos - o que explica muitos comportamentos estranhos que você pode ter.

Se você deseja experimentar e sentir os bons velhos tempos, o melhor é fazer o seguinte:

A) instalar Xneste fvwm. O Xnest é um servidor gráfico dentro de um servidor, um tipo de servidor que será aberto como uma janela no seu sistema normal. O Fvwm é um gerenciador de janelas muito simples, que era muito popular na época. Você também precisará de fontes pixmap antigas.

sudo apt-get install xnest fvwm 
sudo apt-get install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi-transcoded xfonts-75dpi 

B) escreva esse arquivo em algum lugar, por exemplo, no seu diretório home e chame-o de ~/test:

#!/bin/bash 
#
xterm & 
exec fvwm2

C) Executar (aviso: startxnormalmente é executado primeiro com o comando do cliente, depois com um traço duplo e, em seguida, com o servidor. Como eu disse, a maioria dos novos sistemas não possui padrões sensíveis startxapenas).

cd ~
startx ~/test -- /usr/bin/Xnest -ac :1 -geometry 800x600

... e você tem uma tela da estação de trabalho dos anos 80:

insira a descrição da imagem aqui

(Você pode ter o menu clicando na área de trabalho "Xnest").

... e se você se sentir realmente aventureiro, poderá iniciar uma sessão nativa em outro console virtual (leia as outras respostas) acessando uma delas com Ctrl-Alt-F1, fazendo login e

startx ~/test 

que normalmente abrirá em Ctrl-Alt-F8.

Aviso : os ambientes de desktop modernos não foram projetados para serem executados simultaneamente, para o mesmo usuário, em dois consoles diferentes. Portanto, não use gnome-shellou unitycoisas modernas ao fazer esses experimentos, ou você pode atrapalhar sua configuração.


Notas de rodapé:

(1) Falando sobre 1980-90 aqui.

(2) Por exemplo, eu tinha um laptop com 256k de RAM. Foi dolorosamente lento na interface gráfica (P&B!), Mas rápido no console. Então eu fiz a maior parte do meu trabalho (edição C, LaTeXe arquivos semelhantes) no modo de console, e mudou para o ambiente gráfico somente quando realmente necessário.


4
Thanx @ Rmano, grande explicação entendeu totalmente ...
Lazarus

9

startx inicia a xsession ou a interface gráfica na qual você vê uma tela de login e qualquer coisa além de apenas um console ascii (sessão de texto).

Você está recebendo este erro porque o xsession já foi iniciado e está tentando executar o comando de dentro do xsession no tty7.

tty7 é a interface do usuário que existe em ctrl+ alt+ f7(xsession padrão).

tty1 é a interface do usuário que existe em ctrl+ alt+ f1.

tty2 é a interface do usuário que existe em ctrl+ alt+ f2. . . e assim por diante.

tty1 - tty6 são sessões de texto e você pode fazer login com seu nome de usuário e senha em uma dessas telas. Após o login, você pode executar o comando startxe o xsession será iniciado em tty7 se ainda não estiver em execução e tty8 se tty7 já estiver executando uma xsession.


Níveis de execução:

run-level 0 Halt - Desliga o sistema.

nível de execução 1 Modo de usuário único - Modo para tarefas administrativas.

multi-usuário gráfico com rede - nível de execução 2 - inicia o sistema normalmente.

nível de execução 3-5 Não utilizado, mas configurado da mesma forma que no nível de execução 2

Reiniciar - reinicia o sistema.

O termo nível de execução refere-se a um modo de operação em um dos sistemas operacionais de computador que implementa a inicialização no estilo V do Sistema Unix. Convencionalmente, existem sete níveis de execução, numerados de zero a seis; embora até dez, de zero a nove [citação necessário], possam ser usados. Às vezes, S é usado como sinônimo de um dos níveis. Somente um "nível de execução" é executado na inicialização - os níveis de execução não são executados sequencialmente, ou seja, o nível de execução 2 OU 3 OU 4 é executado, não 2 e 3 e 4 - pt.wikipedia.org/wiki/Runlevel


Thanx mchid me ajudou muito, #
lazarus

mas quando eu entrei no tty1 e executei $ startx, obtive uma janela da área de trabalho sem nenhuma barra de inicialização e outras opções ... (no tty8) -ctrl + Alt + F8, é que o meu startx não estava bem configurado ou mostra algumas limitações opções no startx (como aqui apenas o Desktop)
lazarus 31/08

11
@jazzz Esse é o seu ambiente x padrão. Você provavelmente tem vários ambientes de área de trabalho instalados. Você deve poder CTRL + T para obter um terminal para poder executar comandos como unityou gnome-shell --replaceou mesmo gnome-panelou metacity --replace.
Mchid 31/08/14

@jazzz Além disso, se você aceitar esta resposta, clique no ícone à esquerda para fechá-la. obrigado!
Mchid 31/08/14

desculpe, estou um pouco atrasado para outra consulta sobre isso --- é a nova janela que recebi por Ctrl + Alt + F8, como afirmei acima é semelhante ao espaço de trabalho?
lazarus

4

Significa simplesmente em um tty diferente .

Citando a pergunta vinculada:

Por padrão, o Ubuntu possui 7 tty's.

1-6são apenas linha de comando, 7executa sua sessão X (sua área de trabalho gráfica normal).

Para acessá-los, use este atalho de teclado: Ctrl+ Alt+F1

(mudando F1para F1-F6 para acessar o terminal necessário)

Para voltar à sua sessão X (a área de trabalho normal), use: Ctrl+ Alt+F7

after logging on to a text-mode console significa simplesmente fazer login em um tty diferente e digitar o comando:

startx

1

Como observa Rmano, startx é uma abordagem muito antiga. Na época em que isso foi usado, o binário X11 foi instalado como raiz setuid.

Eu apenas tentei isso em uma VM e, de fato, startxfalha como você descreve, por padrão. chmod u+s /usr/lib/xorg/Xorgcorrige isso embora.

Eu não recomendo fazer Xorgser root setuid. O mundo se afastou disso por uma boa razão. Mas se você estiver brincando em uma VM descartável, é assim que startxfunciona.


1

Exemplo mínimo QEMU + Buildroot

Minha maneira favorita de aprender o que algo faz é fazer um exemplo mínimo que o execute.

No Ubuntu, isso é difícil desde um segundo startx pode entrar em conflito com a área de trabalho atual.

/ubuntu//a/519164/52975 propõeXnest , mas com o QEMU + Buildroot podemos ir ainda mais mínimos e criar uma micro-distribuição com apenas o X11 instalado.

Dessa forma, deve ser mais fácil entender o que está acontecendo.

Descrevi a criação da distribuição em: /unix//a/306116/32558

Depois de obter a imagem em execução no QEMU, você inicia em um shell TTY.

Então quando você faz:

root
startx

inicia uma GUI X11:

insira a descrição da imagem aqui

Agora dê uma olhada na fonte de startx dentro dessa distribuição, que é apenas um script de shell.

É um invólucro simples /usr/bin/xinite passa /etc/X11/xinit/xinitrcparaxinit .

Se você abrir /etc/X11/xinit/xinitrc, ele conterá as seguintes linhas:

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &

então vemos que ele inicia:

  • twm: um gerenciador de janelas muito simples e antigo
  • xclocke xtermque vemos na tela

Pois /usr/bin/xinit, podemos fazer:

man xinit

que diz que:

Se nenhum programa cliente específico for fornecido na linha de comando, o xinit procurará um arquivo no diretório inicial do usuário chamado .xinitrc para executar como um shell script para iniciar programas clientes. Se esse arquivo não existir, o xinit usará o seguinte como padrão:

xterm  -geometry  +1+1  -n  login  -display  :0

Se nenhum programa de servidor específico for fornecido na linha de comando, o xinit procurará um arquivo no diretório inicial do usuário chamado .xserverrc para executar como um shell script para iniciar o servidor. Se esse arquivo não existir, o xinit usará o seguinte como padrão:

X  :0
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.