O que significa “org.gnome.Shell.desktop [1711]:” no diário do systemd?

3
$ journalctl -b
...
Mar 23 18:18:50 alan-laptop pkexec[31408]: pam_unix(polkit-1:session): session opened for user root by (uid=1001)
Mar 23 18:19:47 alan-laptop org.gnome.Shell.desktop[1711]: libinput error: client bug: timer event5 debounce short: offset negative (-3ms)
...

Eu entendo a primeira linha como uma mensagem de log do PID 31408, que é uma instância do comando pkexec .

Mas tenho 100% de certeza de que não tenho um executável chamado org.gnome.Shell.desktop em qualquer lugar. Um arquivo existe com esse nome, mas é um arquivo de área de trabalho XDG.

$ find -xdev -name 'org.gnome.Shell.desktop*' 2>/dev/null
./usr/share/applications/org.gnome.Shell.desktop
$ ls -l ./usr/share/applications/org.gnome.Shell.desktop
-rw-r--r--. 1 root root 8179 Jan 22 10:19 ./usr/share/applications/org.gnome.Shell.desktop

Pergunta

Por que essa mensagem de log não mostra gnome-shell[1711] ?

Como isso é implementado?

Alguém achou que seria mais útil assim? Se sim, por quê?

Ambiente

Fedora 27

  • systemd-234-10.git5f8984e.fc27.x86_64
  • gnome-session-3.26.1-1.fc27.x86_64
por sourcejedi 24.03.2018 / 00:44

1 resposta

4

TL; DR: É o GNOME Shell que decidiu fazer isso. Eles executam vários aplicativos (applets) dentro do mesmo processo, então decidiram usar as especificações do menu XDG como a "tag" para anexar as mensagens.

Explicação completa abaixo ...

O diário sintetiza a mensagem semelhante a syslog que você vê nos campos internos armazenados em cada mensagem. (Você pode ver os campos internos usando o formato -o verbose .)

O campo que normalmente carrega o nome do programa, também conhecido como "tag", é armazenado no campo SYSLOG_IDENTIFIER .

(Outros programas utilizam o SYSLOG_IDENTIFIER. Por exemplo, logger enviará por padrão a tag do usuário que está chamando e você poderá substituí-la usando a opção -t .)

Existem três maneiras principais de fazer o log no diário, usando a tradicional interface syslog (3) , escrevendo para stdout ou stderr de um serviço systemd ou usando a interface do diário nativa.

O GNOME Shell usa a interface do diário nativa, em particular, a API sd_journal_stream_fd . Essa função recebe um identificador como primeiro argumento, que é então usado como SYSLOG_IDENTIFIER das mensagens enviadas por meio desse fluxo.

O código do GNOME Shell que inicializa o fluxo de journald pode ser encontrado em src / shell-app.c , e rastreando o appid usado para o chamador, mostra que ele está definido usando g_app_info_get_id .

Pesquisando g_app_info_get_id, você verá que o ID é específico da plataforma, mas "no Unix esse é o id do arquivo desktop da especificação do menu xdg", que corresponde ao que você está observando.

O código em src / shell-app.c é precedido por um comentário que explica a razão:

/* This sets up the launched application to log to the journal
 * using its own identifier, instead of just "gnome-session".
 */
Em outras palavras, o GNOME Shell executa múltiplos aplicativos (através de applets), então os desenvolvedores do GNOME Shell acharam que seria mais apropriado usar as especificações do menu XDG nas mensagens de log, assim você poderia dizer qual applet está gerando ...

Esses fluxos de log também podem ser herdados por qualquer processo filho, como Xwayland. Nesse caso, o PID após a tag parece referir-se ao gnome-shell, o processo que abriu o stream_fd e não ao processo filho que grava a mensagem no fd. A mensagem de log abaixo mostra uma falha no servidor Xwayland, mas o PID 3493 é o do gnome-shell, não o Xwayland.

Mar 17 18:08:39 alan-laptop org.gnome.Shell.desktop[3494]: (EE) Caught signal 7 (Bus error). Server aborting

    
por 24.03.2018 / 03:24