LinuxForum.Fans
Тема

Как сменить картинку в экране GDM.HowTo/

Автор: gramozeka 15 сообщений 2556 просмотров
17.09.2020 13:30 · отредактировано #435281

В новом Гноме(как минимум с версии 3.36) в GDM нет простых и наглядных инструментов смены декораций как это было в старых версиях. Но это решаемая проблема.
Сперва о самом механизме: внешний вид оформления GDM-3.34.XX это ни что иное как урезанный вариант gnome-shell. Это даёт понимание «как это работает». Все настройки этого экрана находятся в скомпилированном правиле(shema) /usr/share/gnome-shell/gnome-shell-theme.gresource. Просто так этот файл не изменить, но можно его пересоздать теми средствами, какими он и был создан изначально.
На арче-вики есть немного устаревший мануал как это сделать - https://wiki.archlinux.org/index.php/GDM#Log-in_screen_background_image . Что-то действительно работает, но некоторые вещи выходят далеко за рамки собственно бекграунда и затрагивают вообще изменение поведения gnome-shell в gdm. Не понимая тонкостей работы этого механизма можно наворотить оля-ля... Но есть более простой способ( *ROFL* ) этой процедуры.
Блуждая по всемирной паутине я нарыл не очень сложный скриптик, который быстро и просто меняет картинку, оригинал я уже не найду, но сам скрипт вот :

text

#! /bin/sh

set -e

if ! hash gresource 2>/dev/null; then echo "gresource binary not found. " echo " " echo "Please install glib2 or glib2-devel" echo " " echo "Fedora:" echo "# dnf install glib2-devel" exit 1 fi

if [ "$#" -eq "0" ]; then echo 'Usage:' echo ' set-gdm-wallpaper [FLAG] /path/to/image Set login screen wallpaper' echo ' Flags:' echo ' --css 'css data' Replace css params inside #lockDialogGroup block. Ex: background-size: 1920px 1080px;' echo ' --resize 0..6 (default: 2) Use built-in css template for image resize and alignment. Try this option for fix multi monitor issue. Use 0 for disable resize.' echo ' 0 - background-repeat: repeat;' echo ' 1 - background-repeat: no-repeat;' echo ' 2 - background-repeat: no-repeat;background-size: cover;' echo ' 3 - background-size: 1920px 1080px;' echo ' 4 - background-size: 1920px 1080px;background-repeat: repeat;' echo ' 5 - background-position: 0 0;background-size: 1920px 1080px;background-repeat: repeat;' echo ' 6 - background-repeat: no-repeat;background-size: cover;background-position: center;' echo ' set-gdm-wallpaper --uninstall Remove changes and set original wallpaper (original gresource file)' exit 1 fi

if [ "$1" = "--uninstall" ]; then # Restore file if current gresource file is modified by this script. # If wallpaper-gdm.png text inside gresource file, then this is modified file. if grep -q "wallpaper-gdm.png" /usr/share/gnome-shell/gnome-shell-theme.gresource; then cp -f /usr/share/gnome-shell/gnome-shell-theme.gresource.backup /usr/share/gnome-shell/gnome-shell-theme.gresource

echo 'gnome-shell-theme.gresource recovered' fi

exit fi

image_parameters="background-repeat: no-repeat;background-size: cover;" if [ "$1" = "--css" ]; then image_parameters="$2;" shift;shift; fi

if [ "$1" = "--resize" ]; then case "$2" in 0) image_parameters="background-repeat: repeat;";; 1) image_parameters="background-repeat: no-repeat;";; 2) image_parameters="background-repeat: no-repeat;background-size: cover;";; 3) image_parameters="background-size: 1920px 1080px;";; 4) image_parameters="background-size: 1920px 1080px;background-repeat: repeat;";; 5) image_parameters="background-position: 0 0;background-size: 1920px 1080px;background-repeat: repeat;";; 6) image_parameters="background-repeat: no-repeat;background-size: cover;background-position: center;";; *) echo "Error: unknown --resize value" exit 1;; esac shift;shift; fi

if [ "$#" -ne "1" ]; then echo "Error: Illegal argument $1" exit 1 fi

image="$(realpath "$1")"

if [ ! -f "$image" ]; then echo "File not found: \"$image\" " exit 1 fi

echo "Updating wallpaper..."

# Restore gresource from backup if current gresource is modified if grep -q "wallpaper-gdm.png" /usr/share/gnome-shell/gnome-shell-theme.gresource; then cp -f /usr/share/gnome-shell/gnome-shell-theme.gresource.backup /usr/share/gnome-shell/gnome-shell-theme.gresource fi

workdir=$(mktemp -d) cd "$workdir"

# Creating gnome-shell-theme.gresource.xml with theme file list and add header echo '<?xml version="1.0" encoding="UTF-8"?>' >"$workdir/gnome-shell-theme.gresource.xml" echo '<gresources><gresource>' >>"$workdir/gnome-shell-theme.gresource.xml"

for res_file in $(gresource list /usr/share/gnome-shell/gnome-shell-theme.gresource); do # create dir for theme file inside temp dir mkdir -p "$(dirname "$workdir$res_file")"

if [ "$res_file" != "/org/gnome/shell/theme/wallpaper-gdm.png" ]; then # extract file ($res_file) from current theme and write it to temp dir ($workdir) gresource extract /usr/share/gnome-shell/gnome-shell-theme.gresource "$res_file" >"$workdir$res_file"

# add extracted file name to gnome-shell-theme.gresource.xml echo "<file>${res_file#\/}</file>" >>"$workdir/gnome-shell-theme.gresource.xml" fi done

# add our image ($image) to theme path and to xml file echo "<file>org/gnome/shell/theme/wallpaper-gdm.png</file>" >>"$workdir/gnome-shell-theme.gresource.xml" cp -f "$image" "$workdir/org/gnome/shell/theme/wallpaper-gdm.png"

# add footer to xml file echo '</gresource></gresources>' >>"$workdir/gnome-shell-theme.gresource.xml"

# find #lockDialogGroup block inside gnome-shell.css and replace with new_theme_params with our image # and add image_parameters new_theme_params="background: #2e3436 url(resource:\/\/\/org\/gnome\/shell\/theme\/wallpaper-gdm.png);$image_parameters" sed -i -z -E "s/#lockDialogGroup \{[^}]+/#lockDialogGroup \{$new_theme_params/g" "$workdir/org/gnome/shell/theme/gnome-shell.css"

# create gresource file with file list inside gnome-shell-theme.gresource.xml glib-compile-resources "$workdir/gnome-shell-theme.gresource.xml"

# Do backup only for original gresource file, not modified by this script. # If wallpaper-gdm.png text inside gresource file, then this is modified file. if ! grep -q "wallpaper-gdm.png" /usr/share/gnome-shell/gnome-shell-theme.gresource; then cp -f /usr/share/gnome-shell/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme.gresource.backup echo "Backup" fi

cp -f "$workdir/gnome-shell-theme.gresource" /usr/share/gnome-shell/

# Strange but safe from bug rm -rf "$workdir/org" rm -f "$workdir/gnome-shell-theme.gresource.xml" rm -f "$workdir/gnome-shell-theme.gresource" rm -r "$workdir"

echo "Done!"

https://gitlab.com/Gramozeka/gdm-change-background/-/tree/master
под конкретный размер экрана можно поменять соответствующие цифры и использовать как есть, пустой запуск выдаст описание аргументов. (Может кому сгодится))

26.09.2020 23:19 #435316

Дожили, чтоб картинку поменять, надо скрипты ваять =)

27.09.2020 09:24 #435320

yars, :) так Gnome изначально писался для гиков в своей третьей редакции.

28.09.2020 09:04 #435339

"gramozeka" написал:
GDM
А он нужен? В смысле, если система однопользовательская, то зачем DM?
28.09.2020 10:46 #435340
"DdShurick" написал:
А он нужен? В смысле, если система однопользовательская, то зачем DM?

ну кому и кобыла невеста! :D
Современные тенденции аль-ля - "я сам себе и жена и муж и мну никто не нуж" не есть здоровое состояние человека, даже на заре становления линукс шёл под девизом многопользовательской системы.
Постоянно из консоли писать startx или сразу прыгать из загрузки в сессию - это иногда бывает даже удобно, но всегда так жить..? Дануна таким быть.
Мне всегда нравились кеды, и преимущественно я из них только и работаю, но тем не менее, иногда для разнообразия можно и гномом, и крысой, а то и оупенбоксом заморочиться, мне не жалко пары-тройки гигов на диске для этого хозяйства, есть-то не просит.
По современным представлениям я так вообще еретик - у меня есть жена!(и дети), а линукс я не ставлю из репозитория, а готовлю сам!(из говна и палок, на коленке)...
http://www.linuxfromscratch.org/blfs/view/svn/ - наше всё.

28.09.2020 17:03 #435343

"gramozeka" написал:
так вообще еретик
Меня тоже таким считают

"gramozeka" написал:
готовлюлю сам!
Я тоже, но без DM, ибо я единственный пользователь.
28.09.2020 19:35 #435344
"DdShurick" написал:
Я тоже, но без DM, ибо я единственный пользователь.

дело вкуса. Но для эстетики требует - система должна быть безупречна сама в себе, просто чтобы была. Но это спор ни о чём - каждый сам себе ССЗБ в меру собственных представлений о красивом и заблуждений о нужном.
Тут вон мамкины кулцхакиры с кали считают что самого бога за бороду ухватили, не вкуривая, что из любого лайва можно этот кали сляпать за недорого\недолго... что теперь.

28.09.2020 19:53 #435345
"gramozeka" написал:
что из любого лайва можно этот Kali сляпать

Не из любого. Увы. В той же Fedora вам придётся саму ОСь перепиливать, чтобы ошибками как ссаными тряпками не закидало, а в Mageia, так вообще изобретать новое колесо, поскольку в системе ничего нет. :)

28.09.2020 21:00 #435347
"Wolfenberg" написал:
Не из любого. Увы.

это как подойти к процессу... ну и понимание опять же.
Я вот тут давеча к одним на чай заглянул, так меня поставили в тупик вопросом "а чем отличаются dns-сервер от dhcp", так я честно ответил - "а хрен его знает"... и ведь не поверили.(хотя я вообще не врубаю что это за чертовщина).
По сути, в IT, мы становимся в итоге заложниками пары десятка приложений!(ну если уж совсем объективно то "пакетов", как это видят в дистрибутивах) А кто-то и десятком не пользуется, хотя и звучит дюже-специалистом.
Так что кому шашечки, а кому и на телеге норм, лишь бы доехать без гемора.

30.09.2020 19:40 #435362
gramozeka написал:
[quote="Wolfenberg"]Не из любого. Увы.

это как подойти к процессу... ну и понимание опять же.
Я вот тут давеча к одним на чай заглянул, так меня поставили в тупик вопросом "а чем отличаются dns-сервер от dhcp", так я честно ответил - "а хрен его знает"... и ведь не поверили.(хотя я вообще не врубаю что это за чертовщина).
По сути, в IT, мы становимся в итоге заложниками пары десятка приложений!(ну если уж совсем объективно то "пакетов", как это видят в дистрибутивах) А кто-то и десятком не пользуется, хотя и звучит дюже-специалистом.
Так что кому шашечки, а кому и на телеге норм, лишь бы доехать без гемора.[/quote]
Ну, на самом деле вопрос простой. На уровне начального IT-образования. DNS-сервер работает с одним или несколькими пакетами (пулами) ip-адресов во внешней сети. Как правило, все они статические. Все DNS-сервера представлены в интернете как домены (хостинги). К примеру, домен Яндекса: Ya.ru Бывают ещё и промежуточные DNS-серверы, выдающие динамические адреса для того, чтобы вы могли спокойно лазить по сети в поисках форумов, "тучек" или фотографий Винни Пуха (шутка).
Так же DNS образовывают в локальной сети для связки нескольких устройств в одну сеть (например, принтер, компьютеры офиса, телекс, видеокамеры, телефоны). Тут уже, чаще всего, эту роль вешают на роутер.
DHCP-сервер используется в сетях с выходом во внешнюю сеть. То бишь, это тупо шлюз, заменяющий локальный IP на внешний динамический из присвоенного ему пула адресов с ближайшего хостинга. Отличие от DNS составляет то, что пакет IP здесь неполный и может быть периодически заменён при балансировке нагрузки внутри хостинга.
Добавлено: 30.09.2020 20:40:17

"gramozeka" написал:
это как подойти к процессу... ну и понимание опять же.

А хоть как. При пропиле Mageia я сталкивался с тем, что с моим телефоном не работал сетевой канал. Совсем. А воть в OpenSuse или Debian хоть оргию устраивай в прямом эфире.
Или тот же Tor вываливался в ошибку, потому что был миллион и одна кривых зависимостей, на которые в багрепорте писали "Это неважно".
Я уже молчу про фишинг или кейлоггинг (была в них нужда одно время).

30.09.2020 22:42 #435364
"Wolfenberg" написал:
потому что был миллион и одна кривых зависимостей, на которые в багрепорте писали "Это неважно".

вот поэтому стоит осиливать своё.

Про зависимости...
Это тема лишь в одном случае стоит великой китайской стеной, когда всё делает кто-то там.
Набив руку в собирании своего дистра, я вообще не воспринимаю её как проблему, надо - взял и собрал, так как тебе это надо, есно надо отдавать себе отсчёт в адекватности понимания собственных действий.
Это наверно лучше продолжить в теме про LFS? Там как раз просится, но если я продолжу писать в одну каску, то пост просто станет не подъёмным, каждое сообщение тупо добавляется к предыдущему.

01.10.2020 19:56 #435374
gramozeka написал:
[quote="Wolfenberg"]потому что был миллион и одна кривых зависимостей, на которые в багрепорте писали "Это неважно".

вот поэтому стоит осиливать своё.

Про зависимости...
Это тема лишь в одном случае стоит великой китайской стеной, когда всё делает кто-то там.
Набив руку в собирании своего дистра, я вообще не воспринимаю её как проблему, надо - взял и собрал, так как тебе это надо, есно надо отдавать себе отсчёт в адекватности понимания собственных действий.
Это наверно лучше продолжить в теме про LFS? Там как раз просится, но если я продолжу писать в одну каску, то пост просто станет не подъёмным, каждое сообщение тупо добавляется к предыдущему.[/quote]
LFS позиционируется как аналог Gentoo, но без автоматизации. Т.е. вам создали только bash и gcc.
В Mageia же немного по-другому. В каждом пакете RPM есть файлик запуска .spec. Так вот, эти файлы написаны "как в бурелом" - то на QT, то на awesome, то на Ruby, то вообще тупо одни символы стоят. Причём, на одни и те же программы может приходится до 500 пакетов различных ЯП. Вот и вся кривизна...

01.10.2020 20:25 #435375
"Wolfenberg" написал:
LFS позиционируется как аналог Gentoo, но без автоматизации. Т.е. вам создали только bash и gcc.
В Mageia же немного по-другому. В каждом пакете RPM есть файлик запуска .spec. Так вот, эти файлы написаны "как в бурелом" - то на QT, то на awesome, то на Ruby, то вообще тупо одни символы стоят. Причём, на одни и те же программы может приходится до 500 пакетов различных ЯП. Вот и вся кривизна...

не-не, LFS не позиционируется никак кроме того что заявлено в шапке проекта. Но в реальности, LFS, если подходить с точки зрения формальной логики, лишь пролог к собственно LFS, вторая часть называется BLFS, а там ещё и ещё, что в своей сути и реальном воплощении является ни чем иным, как стендовой площадкой вообще всего линукса, это фабричный испытательный образец-эталон, на котором тестируется весь мейнстрим. Там схема простая как палка - консолидированная группа разработчиков(делегатов) всех базовых дистрибутивов собирают и отрабатывают взаимодействие компонентов, обновлений и прочего, на "сферическом коне в вакууме" - неком "идеальном" RC-кандидате. А потом уже каждый тащит это всё к себе. Я достаточно долго наблюдаю за этой системой - все обновления сперва появляются там, потом, порой после бурных дебатов, вырабатывается некий консенсус, и это всё расходится по дистрибутивам, по дороге допиливаясь под конкретику.
RPM - это лишь пакетная модель, есть и плюсы и минусы, но есть и фишка - она идеально работает только при условии, что есть куча народу с квалификацией, и есть мейнфрейм, на котором идет непрерывная сборка и тестирование, например как в красношапке или дебе.(вот почитать для развития https://www.debian.org/devel/buildd/ ) На коленке же, эту тему не потянуть хоть убейся. Потому как сама специфика rpm подразумевает долгое скрупулёзное и неспешное препарирование готовых программных продуктов в среде работающей системы. То что магея это всё не потянет было понятно сразу, не тот уровень денег и квалификации, что наглядная история и показала. Это просто факт.

02.10.2020 19:51 · отредактировано #435380
"gramozeka" написал:
RPM - это лишь пакетная модель, есть и плюсы и минусы, но есть и фишка - она идеально работает только при условии, что есть куча народу с квалификацией, и есть мейнфрейм, на котором идет непрерывная сборка и тестирование, например как в красношапке или дебе.

Полностью согласен. Аналогично работает любая система пакетов. Хотя, как по мне, для практического ковыряния (можно и палочкой) Deb куда удобнее (ну логи там более развёрнутые).

"gramozeka" написал:
То что магея это всё не потянет было понятно сразу, не тот уровень денег и квалификации,

Mageia реально бы потянула всё и дальше больше (были предложения хорошего финансирования от Debian, центрального совета Open Source), если бы команда разработчиков не пересралась между собой по поводу "нужности" ПО.

02.10.2020 22:25 #435381
"Wolfenberg" написал:
если бы команда разработчиков не пересралась между собой по поводу "нужности" ПО.

Вот в том и соль! Стадо баранов под предводительством матёрого волчары играючи уделает стаю волков если во главе её баран.
Амбиции они в бане с женой полезны и приятны, а в деле, их надо засовывать подальше и поглубже. Многие неплохие проекты заканчивались бесславно именно на делёжке не убитого медведя. Так что - умерла, так умерла...

Войдите или зарегистрируйтесь, чтобы ответить.