Qual ambiente de área de trabalho o startx é executado e como posso alterá-lo?

18

De muitos documentos, eu li que startxestá iniciando o LXDE no Raspbian OS. Estou um pouco confuso.

Sempre startxexecutará a GUI do LXDE?

Também vi exemplo com o uso de startlxdecomando. Como esse comando é diferente e por que startxe startlxdeestá executando a mesma GUI (LXDE)? Ou talvez ele seja executado porque é a GUI padrão?

Como posso escolher a GUI padrão se tiver várias?

Você poderia explicar mais detalhes sobre a GUI nos sistemas Linux?

CuriousGuy
fonte

Respostas:

27

startxé executado, o xinitque inicia um servidor X e uma sessão do cliente. A sessão do cliente está ~/.xinitrcpresente, e caso contrário /etc/X11/xinit/xinitrc(o local pode variar entre as distribuições). O que esse script faz varia entre as distribuições. No Debian (incluindo derivativos como o Raspbian), as /etc/X11/xinit/xinitrcexecuções /etc/X11/Xsessionque por sua vez executam scripts /etc/X11/Xsession.d. Os scripts Debian olhar para uma sessão de usuário em outros arquivos ( ~/.xsession, ~/.xsessionrc, ~/.Xsession) e, se nenhuma configuração de usuário é aplicável, runs x-session-manager(caindo de volta para x-window-managerse nenhum [gerente de sessão] está instalado, caindo de volta para x-terminal-emulatorno caso improvável de que nenhum gerenciador de janelas é instalado).

Se você deseja controlar o que é executado, pode criar um dos arquivos do usuário, ~/.xsessionou ~/.xinitrc. O arquivo ~/.xsessiontambém é usado se você efetuar login em um gerenciador de exibição (ou seja, se você digitar sua senha em uma janela da GUI). O arquivo ~/.xinitrcé específico para xinite startx. O uso ~/.xsessioné feito /etc/X11/Xsessionpara configurar coisas como métodos de entrada, recursos, agentes de senha, etc. Se você usar .xinitrc, precisará fazer tudo isso manualmente. Mais uma vez, estou descrevendo o Debian aqui, outras variantes do Unix podem configurar as coisas de maneira diferente. O uso de ~/.xinitrcpara especificar o que é executado quando você executa startxou xinité universal.

Se você usa ~/.xinitrcou ~/.xsession, esse arquivo (geralmente um script de shell, mas não precisa ser, se você realmente quiser usar outra coisa) deve preparar o que precisar ser preparado (por exemplo, configurações do teclado, recursos, applets que não foram iniciados pelo gerenciador de janelas etc.) e, no final, execute o programa que gerencia a sessão. Quando o script termina, a sessão termina. Normalmente, você usaria execno final do script para substituir o script pelo gerenciador de sessões ou gerenciador de janelas.

Seu sistema presumivelmente tem /usr/bin/startlxdecomo o gerenciador de sessões padrão em todo o sistema. No Debian e derivativos, você pode verificar os gerenciadores de sessões disponíveis com

update-alternatives --list x-session-manager

ou obtenha uma descrição mais detalhada indicando qual é o atual com

update-alternatives --display x-session-manager

Se o LXDE não fosse o padrão em todo o sistema e você desejasse torná-lo o padrão para sua conta, você poderia usar o seguinte ~/.xsessionarquivo:

#!/bin/sh
exec startlxde

Em algumas variantes do Unix, isso funcionaria apenas para logins gráficos, não para startx, então você também precisaria criar um idêntico ~/.xinitrc. (Ou não idêntico: em ~/.xsession, você pode querer fazer outras coisas, porque esse é o primeiro arquivo executado em uma sessão gráfica; por exemplo, você pode colocar . ~/.profileno topo, para definir algumas variáveis ​​de ambiente.)

Se você quiser experimentar outros ambientes como únicos, poderá especificar um programa diferente para executar na startxprópria linha de comando . O startxprograma tem uma peculiaridade: você precisa usar o caminho completo para o programa.

startx /usr/bin/startkde

O startxcomando também permite especificar argumentos para passar para o servidor. Por exemplo, se você deseja executar várias sessões da GUI ao mesmo tempo, pode passar um número de exibição diferente a cada vez. Passe argumentos do servidor depois --na linha de comando de startx.

startx /usr/bin/startkde -- :1
Gilles 'SO- parar de ser mau'
fonte
Estou no Debian 9. Minha máquina inicializa para tty1. No meu login, a execução startxinicia a sessão padrão do Xfce4. No login de usuário da minha esposa em tty1 ou tty2. Seu startxcomando está definido para executar o Cinnamon (especificado em ~/.xsession). Para o segundo servidor X, não preciso especificar o $DISPLAYindicado na última parte da sua resposta. Embora isso certamente funcione. Torna-o automaticamente o segundo $DISPLAYetc. A configuração é ótima. Não há logon e logoff de uma sessão gráfica, apenas um atalho de teclado para alternar perfis de usuário. Obrigado por esta resposta útil!
Jbrock 26/10
10

Não: startxé configurável. De acordo com a página do manual :

Para determinar o cliente a ser executado, startxprimeiro procure um arquivo chamado .xinitrcno diretório inicial do usuário. Se isso não for encontrado, ele usa o arquivo xinitrcno xinitdiretório da biblioteca.

startxnão é a única maneira de iniciar o X (como você vê em startlxde). A startxpágina do manual ajuda novamente:

O script startx é um front end para o xinit (1) que fornece uma interface de usuário um pouco melhor para executar uma única sessão do X Window System. Geralmente é executado sem argumentos.

Por outro lado, se você quiser escolher uma GUI (LXDE, KDE, etc), xdmpareçam iguais kdm, gdmou LightDMserão usados ​​para selecionar diferentes tipos de área de trabalho. No Debian, geralmente uso kdm, porque isso permite diferentes tipos de desktop. Os empacotadores gdmnão permitem a maioria dos tipos de desktops, tornando-o inadequado para minhas necessidades.

xdmusa um conjunto diferente de scripts para iniciar, por exemplo, seu ~/.xsessionscript junto com os scripts do sistema. Os parecidos podem ignorar isso e usar seus próprios scripts. Mas é um ponto de partida.

Thomas Dickey
fonte
Então, em algum lugar nos arquivos conf, ele está escrito para executar o LXDE, por exemplo?
precisa
.xinitrcé um script, que o torna configurável. Poderia executar o LXDE diretamente se codificado para fazer isso.
Thomas Dickey
1
startlxdenão é um frontend para o xinit, é um iniciador para o gerenciador de sessões do LXDE. Não é um substituto startx, é algo que você pode executar ~/.xinitrc.
Gilles 'SO- stop be evil'
Então precisa de alguma documentação. Sério, uma boa resposta aponta o OP na direção da documentação, em vez de tentar reformulá-lo (a menos que alguém tenha algum comentário a fazer sobre a documentação, para entendê-la melhor).
Thomas Dickey