2

Во время загрузки я вижу обычные сообщения на TTY. После этого, при запуске X, xfce & xfdesktop устанавливает сплошной цвет в качестве фона.

Я не использую фон, у меня нет значков на рабочем столе. Было бы здорово, если бы загрузочные сообщения оставались там даже после запуска X. Есть ли способ достичь этого?

3 ответа3

2

Я предоставлю два способа генерирования аппроксимации загрузочных сообщений в качестве фона рабочего стола, один динамический, а другой статический.

Оба метода требуют установки systemd и доступа к системным журналам для чтения через journalctl . Минимальные привилегии для запуска journalctl могут быть предоставлены через членство в группе systemd-journal, например, usermod -aG systemd-journal YOUR_USERNAME последующим выходом из системы и входом в систему.


Динамический фон журнала загрузки

Основная идея состоит в том, чтобы запустить неокрашенный терминал в самом нижнем слое окна для отображения содержимого журнала. Для простых оконных менеджеров, таких как fluxbox, это может быть достигнуто путем установки порядка стекирования закрепленного максимизированного терминала на "Рабочий стол" и запуска journalctl ... , при необходимости, автоматизируя настройку через перехватчики запуска оконного менеджера.

С другой стороны, при максимизации окна в Xfce вертикальная область рабочего стола за док-станцией остается незакрытой, поэтому пользователю нужно будет вручную определить геометрию терминала, необходимую для покрытия всего экрана, что в основном будет определяться шрифтом. Настройки и разрешение экрана. Хороший способ получить приближение - запустить

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

и проверьте, что решил терминал:

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

Следующий вспомогательный скрипт, который не предназначен для запуска вручную (см. Ниже команду xfce4-terminal ... ), будет затем использоваться для установки терминала с заголовком "journalterm" как липкого, опущенного на панели задач и в приложении. переключатель, под другими окнами, и выполните 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]

где [JOURNALCTL_CMD] следует заменить на

exec journalctl --lines=all --follow

или же

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 '\033[00;32m'`OK`printf '\033[00m'`  \]/g"

Прежний journalctl ... просто выводит системные журналы

Системные журналы в качестве фона

в то время как последний будет имитировать вывод systemd на последних этапах загрузки системы и для простоты может пропустить некоторые сообщения, которые отображались во время самого процесса загрузки.

вывод systemd в качестве фона

stdbuf удаляет буферизацию из cut , в то время как grep и sed имеют свои собственные собственные параметры для принудительного отображения нового вывода из systemd на терминале, как только он будет готов.

Затем команда для запуска вышеуказанного сценария должна быть следующей, с заменой [C] и [L] на количество столбцов и строк, которые были вычислены ранее, соответственно:

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

Это может быть автоматически запущено при входе в систему путем добавления записи, выполняющей вышеуказанную строку, в Session and Startup> Application Autostart.


Фон журнала статической загрузки

Фон статического вывода systemd

Следующий скрипт сгенерирует PNG самых последних сообщений systemd:

#!/bin/bash

exec xfce4-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 '\033[00;32m'`OK`printf '\033[00m'`  \]/g\" \
    |head -c-1; \
    read -t1; import -window root systemd-`date +%s`.png";

Обратите внимание, что PNG генерируется путем создания снимка экрана полноэкранного терминала, поэтому взаимодействие с системой во время этого процесса не рекомендуется, хотя задержка, вызванная read .. может быть уменьшена в более быстрых системах для сокращения времени ожидания. Как и в приведенной выше xfce4-terminal ... , этот сценарий может запускаться Xfce автоматически, чтобы при необходимости генерировать свежий статический образ сообщений systemd при каждом входе в систему. Xfce заметит, что файл, предоставляющий фон рабочего стола, изменился, и обновит обои соответствующим образом, поэтому настройка import для записи в один и тот же файл каждый раз может оказаться полезной в зависимости от варианта использования.

Для приведенного выше сценария требуется только терминал, который знает, как перейти в полноэкранный режим и запустить сценарий. Например, exec xfce4-terminal ... можно заменить на xterm -fullscreen -e \ и скрипт все равно будет работать, как и ожидалось.

1

Следующая команда обновляет изображение в корневом окне изображением текстового содержимого виртуального терминала каждые 5 секунд:

$ sudo watch -n 5 myscript.sh

Где 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
0

Одним из ответов может быть создание виртуальной машины, и пока она загружается, сделайте снимок экрана. Поместите этот скриншот в качестве фонового изображения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .