Mantenha as mensagens de inicialização do TTY em segundo plano da área de trabalho no X

1

Durante a inicialização, vejo as mensagens habituais no TTY. Depois disso, quando X inicia, xfce & O xfdesktop define uma cor sólida como plano de fundo.

Eu não uso o plano de fundo, não tenho ícones na minha área de trabalho. Ficaria legal se as mensagens de boot permanecessem lá mesmo depois que o X fosse iniciado. Existe uma maneira de conseguir isso?

    
por sheß 21.09.2018 / 02:15

3 respostas

1

O comando a seguir atualiza a imagem na janela raiz com uma imagem do conteúdo de texto do terminal virtual a cada 5 segundos:

$ sudo watch -n 5 myscript.sh

Onde myscript.sh é:

#! /bin/bash

# Dump vt1 console to a file
setterm -dump 1 --file ~/screen.dump

# Get the screen resolution, e.g. 1920x1080 (there may be an easier way, but...)
RESOLUTION=xdpyinfo | grep dimensions | cut -d : -f 2 | cut -d p -f 1 | tr -d [:space:]

# Convert the text file to a png image
convert -size $RESOLUTION xc:black -font "FreeMono" -pointsize 12 -fill white -annotate +15+15 "@screen.dump" ~/screen.png

# Send it to the root window
xli -onroot -quiet -fillscreen ~/screen.png
    
por 27.09.2018 / 01:54
1

Eu fornecerei duas maneiras de gerar uma aproximação das mensagens de inicialização como o plano de fundo da área de trabalho, uma dinâmica e outra estática.

Ambos os métodos requerem que o systemd seja instalado e acesso de leitura aos logs do sistema via journalctl . Privilégios mínimos para a execução de journalctl podem ser fornecidos por meio da associação ao grupo systemd-journal, por exemplo, usermod -aG systemd-journal YOUR_USERNAME seguido por um logout e login.

Plano de fundo do log de inicialização dinâmico

A idéia básica é executar um terminal não decorado na camada mais inferior da janela para exibir o conteúdo do log. Para gerenciadores de janelas simples, como o Fluxbox, isso pode ser feito definindo a ordem de empilhamento de um terminal maximizado fixo para "Desktop" e executando journalctl ... , opcionalmente automatizando a configuração através dos ganchos de inicialização do gerenciador de janelas.

Por outro lado, a maximização de uma janela no Xfce deixa a área vertical da área de trabalho por trás da doca descoberta, portanto, o usuário precisará descobrir manualmente a geometria do terminal necessária para cobrir a tela inteira, que será principalmente determinado por configurações de fonte e resolução de tela. Uma boa maneira de obter uma aproximação é executar

xfce4-terminal --fullscreen --hide-menubar --hide-borders --hide-toolbar --hide-scrollbar

e verifique o que o terminal decidiu:

$ echo $COLUMNS
102
$ echo $LINES
40  # maybe subtract one to compensate for the height of the taskbar

O seguinte script auxiliar, que não deve ser executado manualmente (consulte o comando xfce4-terminal ... abaixo), será usado para definir um terminal com o título "journalterm" como algo fixo, omitido na barra de tarefas e no aplicativo switcher, abaixo de outras janelas, e execute journalctl ... :

#!/bin/bash

xdotool search --name journalterm;  # wmctrl focus bug?
for i in below skip_{pager,taskbar} sticky; do
    wmctrl -v -r journalterm -b add,$i;  # comment out -v for quiet
done

tput civis;  # hide the terminal cursor

[JOURNALCTL_CMD]

onde [JOURNALCTL_CMD] deve ser substituído por

exec journalctl --lines=all --follow

ou

journalctl --lines=all --follow --no-hostname -oshort-unix \
    |stdbuf -i0 -oL -eL cut -d\  -f1 --complement \
    |grep --line-buffered -F 'systemd[1]' \
    |sed -uE "s/systemd\[1\]:/\[  'printf '3[00;32m''OK'printf '3[00m''  \]/g"

O antigo journalctl ... simplesmente exibe os logs do sistema

enquantooúltimoimitaasaídadosystemdduranteosúltimosestágiosdainicializaçãodosistemaepodepularalgumasmensagensqueforamexibidasduranteoprocessodeinicializaçãorealparasimplificar.

stdbufremoveobufferdecut,enquantogrepesedtêmseusprópriosparâmetrosnativosparaforçaranovasaídadosystemdaserexibidanoterminalassimqueestiverpronta.

Emseguida,ocomandoparaexecutaroscriptacimadeveseroseguinte,com[C]e[L]substituídospelascontagensdecolunaelinhaqueforamcalculadasanteriormente,respectivamente:

xfce4-terminal-Tjournalterm--geometry=[C]x[L]--hide-menubar--hide-borders--hide-toolbar--hide-scrollbar--execute/path/to/the/above/script

IssopodeseriniciadoautomaticamentenologinpormeiodaadiçãodeumaentradaexecutandoalinhaacimaemSessãoeinicialização>Autostartdeaplicativo.

Planodefundodologdeinicializaçãoestático

OscriptaseguirgeraráumPNGdasmensagensmaisrecentesdosystemd:

#!/bin/bashexecxfce4-terminal--fullscreen--hide-menubar--hide-scrollbar--execute\bash-c\"tput civis; PS1=; \
    journalctl --no-hostname -oshort-unix \
    |cut -d\  -f1 --complement \
    |grep -F 'systemd[1]' \
    |sed -E \"s/systemd\[1\]:/\[  'printf '3[00;32m''OK'printf '3[00m''  \]/g\" \
    |head -c-1; \
    read -t1; import -window root systemd-'date +%s'.png";

Observe que o PNG é gerado tirando uma captura de tela de um terminal de tela cheia, portanto, interagir com o sistema enquanto isso não é recomendado, embora o atraso causado por read .. possa ser reduzido em sistemas mais rápidos para reduzir o tempo de espera . Como com o comando xfce4-terminal ... acima, este script pode ser executado automaticamente pelo Xfce para gerar uma nova imagem estática de mensagens do systemd em cada login, se desejado. O Xfce observará se o arquivo que fornece o plano de fundo da área de trabalho foi alterado e atualizará o papel de parede de acordo, portanto, ajustar import para gravar no mesmo arquivo sempre poderá ser útil, dependendo do caso de uso.

O script acima requer apenas um terminal que saiba como executar a tela inteira e executar um script. Por exemplo, a linha exec xfce4-terminal ... pode ser substituída por xterm -fullscreen -e \ e o script ainda será executado conforme o esperado.

    
por 28.09.2018 / 16:00
0

Uma resposta poderia ser criar uma VM e, enquanto essa VM é inicializada, tire uma captura de tela dela. Coloque essa imagem como imagem de fundo.

    
por 26.09.2018 / 03:58