Questão Como posso depurar porque o gnome-settings-daemon-localeexec não é iniciado no login?


Eu estou usando o Ubuntu Gnome 14.04 e gnome-settings-daemon-localeexec não é iniciado no login. Como posso depurar porque isso está acontecendo?

Eu encontrei esta pergunta: gnome-settings-daemon não inicia quando eu faço o login, mas não é realmente uma solução para mim, então eu quero depurá-lo e encontrar o problema real e provavelmente arquivar um bug, se necessário.

Eu sou um usuário Linux experiente, mas eu não sei como o processo de inicialização do shell gnome funciona e por onde começar.

EDITAR:

Estas podem ser questões relacionadas:

EDIT 2:

Eu abri um relatório de bug no launchpad, vamos ver se isso ajuda: gnome-settings-daemon-localeexec não é iniciado no login

EDIT 3:

Encontrou estes outros tópicos que podem ajudar:


4
2018-05-13 18:05


origem


+1 para um bom esforço de pesquisa + pergunta bem formatada! :) - jobin


Respostas:


Depuração é um processo, então vou descrever o processo que eu usaria para atacar tal problema. As perguntas são:

  • funciona para uma nova conta de usuário? (isto é, é um problema genérico com o sistema, ou com uma conta?)
  • como é suposto ser iniciado?
  • está realmente sendo iniciado?
  • Em caso afirmativo, está falhando ou falhando? (Isto é talvez mais provável do que não ser executado em primeiro lugar, e os resultados são semelhantes)

Se for um problema com uma conta (configuração de usuário) e ela funcionar com uma conta recém-criada, você poderá rastreá-lo copiando arquivos de configuração da conta quebrada para a conta de trabalho e testando o login até que ele seja interrompido. (Ou, alternativamente, comece com a conta quebrada e remova arquivos e diretórios até que funcione.) Aborde isso como um processo iterativo - comece, copie um diretório / conjunto de arquivos, quebre a conta sim / não, elimine metade do conjunto , vá em frente. Pode ser demorado, por isso normalmente as pessoas apenas redefinem a conta e não se preocupam em rastrear o que quebrou.

Se você quiser rastrear a origem do problema, primeiro procure em ~ / .cache / gdm / session.log e / var / log / syslog para ver se há algum erro óbvio relacionado ao seu problema. Então use a fonte:

$ apt-file search gnome-settings-daemon-localeexec
gnome-settings-daemon: /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
$ apt-get source gnome-settings-daemon
$ cd gnome-settings-daemon-*
$ grep -r gnome-settings-daemon-localeexec
...
data/gnome-settings-daemon.desktop.in.in:Exec=@libexecdir@/gnome-settings-daemon-localeexec
$ cat data/gnome-settings-daemon.desktop.in.in
[Desktop Entry]
Type=Application
_Name=GNOME Settings Daemon
Exec=@libexecdir@/gnome-settings-daemon-localeexec
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=Initialization
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=true

Então agora sabemos que o gnome-settings-daemon-localeexec é executado a partir de um arquivo .desktop chamado gnome-settings-daemon.desktop. Onde está instalado?

$ locate gnome-settings-daemon.desktop
/usr/share/gnome/autostart/gnome-settings-daemon.desktop
$ file /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
/usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec: POSIX shell script, ASCII text executable
$ vi /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec
# it is just a wrapper around /usr/lib/gnome-settings-daemon/gnome-settings-daemon

Tente executá-lo para ver se há um problema ao executar o daemon real (falha etc.):

$ /usr/lib/gnome-settings-daemon/gnome-settings-daemon-localeexec

Você também pode tentar:

$ gnome-settings-daemon --debug

O início automático está sendo executado? Procurando por "debug gnome autostart" resulta em esta página, o que sugere:

Ativar = falso

Para ativar a depuração, defina a chave debug / Enable como "true" no   /gdm/custom.conf e reinicie o GDM.

Então, tente isso e, em seguida, verifique / var / log / syslog. Outra alternativa aqui é modificar / usr / lib / gnome-settings-daemon / gnome-settings-daemon-localeexec e adicionar instruções de depuração. É apenas um script de shell, então adicione algo como echo "localeexec date $(date) env $(env)" > /tmp/log. Então faça o login e verifique / tmp / log.

(Ao depurar qualquer programa, geralmente há uma maneira de anexar suas instruções de impressão a um arquivo de log "adequado", mas abrir seu próprio arquivo de log geralmente é mais fácil e rápido, pois ele mantém a depuração separada e não exige o entendimento do múltiplo camadas de idioma / sistema / nível de log / filtragem que estão em vigor para qualquer programa.)

A criação de log e a depuração até o momento provavelmente expuseram o problema. Para erros mais difíceis, que estão nos binários compilados, você terá que baixar a fonte com apt-get source, modifique-o para adicionar algum código de depuração (instruções de impressão), compilar o código-fonte modificado e instalá-lo, e depois testá-lo. A grande coisa aqui é que o todo apt/dpkg O sistema é projetado para tornar isso fácil, rápido e acessível com apenas alguns comandos. Um depurador pode ser útil para examinar o estado do programa interno complexo, mas o uso de instruções de impressão é um processo mais rápido que funciona em todos os idiomas e sistemas, de modo que é geralmente a minha abordagem inicial.

EDITAR:

Como resumo dos comentários, substituí a linha em / usr / lib / gnome-settings-daemon / gnome-settings-daemon-localeexec:

exec /usr/lib/gnome-settings-daemon/gnome-settings-daemon

com

nohup /usr/lib/gnome-settings-daemon/gnome-settings-daemon --debug >/tmp/gnome-settings-daemon.log 2>&1 &

a fim de capturar a saída do processo


4
2018-05-20 13:03



Obrigado @bain. Apenas para sua informação, ele também falha para contas recém-criadas, então vou tentar com a "abordagem de registro". Meu sentimento, como não sei ao certo, é que o roteiro nem sequer é lançado. Eu vou deixar você saber uma vez que eu possa confirmar isso. - adosaiguas
O que eu descobri adicionando o eco ao gnome-settings-daemon-localeexec e ativando o log no gnome-shell é que o gnome-settings-daemon-localeexec é iniciado quando o gnome-shell é iniciado, mas por algum motivo ele morre / shutdown quando o usuário faz o login e que eu tenho que iniciá-lo manualmente após o login (eu tenho feito isso o tempo todo). Eu entendo que este é o erro e que a partir de agora eu deveria tentar obter ajuda da equipe do gnome. Alguma outra ideia em que eu poderia continuar a depurar? Talvez se conectar ao daemon com o gdb antes de efetuar login? - adosaiguas
@adosaiguas Capture a saída do processo ie. em g-s-d-localeexec em vez de exec /.../gnome-settings-daemon Faz (/.../gnome-settings-daemon --debug)&>/tmp/gsd.log. Isso também mostrará se o processo recebe um sinal e morre. Alternativamente, você poderia envolver o script inteiro - mv g-s-d-localeexec para g-d-s-localeexec.real, em seguida, em g-d-s.localeexec, execute o executável .real e redirecione a saída. - bain
@adosaiguas Outra coisa que você pode tentar é executá-lo sob strace: basta colocar strace  na frente da chamada para o gnome-settings-daemon e certifique-se de redirecionar a saída em algum lugar. Ele despeja um pouco de saída, mas muitas vezes, se o processo estiver morrendo de repente, você verá o syscall que falhou pouco antes de morrer. - bain
Eu substituí a linha exec por esta: (/ usr / lib / gnome-settings-daemon / gnome-settings-daemon --debug) &> / tmp / gnome-settings-daemon.log 2> & 1 e nada é escrito no log. Eu tentarei com essa linha. - adosaiguas