Сохранить фон рабочего стола загрузочных сообщений TTY в X

422
sheß

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

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

1
Должно ли фоновое обновление обновляться при генерировании большего количества сообщений? dsstorefile1 5 лет назад 1
Это было бы круто. Но если есть простой ответ без, то нет. sheß 5 лет назад 0
Оказывается, оба способа довольно просты. dsstorefile1 5 лет назад 1

3 ответа на вопрос

1
Marcelo Roberto Jimenez

Следующая команда обновляет изображение в корневом окне изображением текстового содержимого виртуального терминала каждые 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 
Это уже довольно круто. К сожалению, soffice создает png портретный формат (или любой другой формат по умолчанию). Кроме того, одним недостатком является то, что компоновка изменяется по сравнению с тем, что было во время загрузки (цвета, а также расстояние и т. Д.) sheß 5 лет назад 0
Хорошо, я изменил ответ, чтобы использовать «конвертировать», чтобы вы могли указать разрешение экрана. О сохранении цветов я должен думать немного больше. Marcelo Roberto Jimenez 5 лет назад 1
1
dsstorefile1

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

Оба метода требуют установки 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_ 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 ...просто выводит системные журналы

System logs as the background

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

systemd output as the background

stdbufудаляет буферизацию из cut, while 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.


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

Static systemd output background

Следующий скрипт сгенерирует 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 автоматически, чтобы при необходимости генерировать свежий статический образ системных сообщений при каждом входе в систему. Xfce заметит, что файл, предоставляющий фон рабочего стола, изменился, и обновит обои соответствующим образом, поэтому настройка importзаписи в один и тот же файл каждый раз может оказаться полезной в зависимости от варианта использования.

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

Вот это да. Отличные идеи! Вот предложение weid: возможно ли каким-то образом запустить экран где-нибудь на раннем этапе загрузочного процесса, получить доступ к полноэкранному терминалу backgrouund для доступа к этому сеансу экрана и, таким образом, к тому, чтобы он был действительно интерактивным? sheß 5 лет назад 1
Спасибо! Я не уверен, что вы подразумеваете под интерактивом, но прокрутка в фоновом терминале должна ограничиваться только тем, что поставляет `xfce4-терминал`. FWIW открытие новых вкладок с помощью Ctrl-Shift-t по-прежнему работает. dsstorefile1 5 лет назад 0
С интерактивным, это на самом деле ведет себя как то, что вы видите, когда вы используете crtl + alt + f2 / f1, то есть возможность входа в систему и т. Д. sheß 5 лет назад 0
Вы можете удалить exec из `[JOURNALCTL_CMD]` и добавить `& exec bash` после него, чтобы сделать фоновый терминал интерактивным, но я не могу придумать простого способа, например, запустить и визуализировать весь сервер X11 внутри Терминал. dsstorefile1 5 лет назад 0
О, сейчас я этого не хочу. Я просто не хочу, чтобы это выглядело, и мне нравится то, что вы видите, когда нажимаете [alt] + [ctrl] + [f2], не запуская x-сервер или тому подобное. просто возможность войти через консоль sheß 5 лет назад 0
Понимаю. Существует [conspy] (https://packages.debian.org/sid/admin/conspy) для доступа к VT, но для этого требуются повышенные привилегии. dsstorefile1 5 лет назад 0
0
Nordlys Jeger

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

Да, но немного непрактично sheß 5 лет назад 1