Ubuntu20.04のgnome-shell-theme.gresource の再構成とlogin画面の変更
Ubuntu20.04からは、gnome-shellのcssはコンパイルされ、gnome-shell-theme.gresourceになりました。
いくつかのスクリプトでのデコンパイル→改変→コンパイル法はありましたが、階層構造まで移したものがなかったので、うまくいきませんでしたが、今回うまくいきましたので、記録します。
https://mifmif.mydns.jp/masterkudo/?p=473
から、extract.shを持ってきます。これは、階層構造もデコンパイルしてくれます。
例として、~/ダウンロード下に展開した場合で説明します。
実行属性をつけておきます。
$ cd ~/ダウンロード
$ chmod +x extract.sh
$ ./extract.sh /usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource
これで、~/ダウンロード/org/gnome/shell/theme以下におなじみのsvgやcssが展開されます。(階層も含んで以下の階層も作られています)
今度は、コンパイルのためのxmlファイルを作ります。
$ gedit ~/ダウンロード/org/gnome/shell/theme/gnome-shell-theme.gresource.xml
(ほんとはスクリプトでかっこよく決めたいが、lsとls -d(相対パス表示)でしこしこ行きました。)
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell/theme">
<file>Yaru/gnome-shell-high-contrast.css</file>
<file>Yaru/gnome-shell.css</file>
<file>Yaru-dark/gnome-shell-high-contrast.css</file>
<file>Yaru-dark/gnome-shell.css</file>
<file>calendar-today.svg</file>
<file>checkbox-dark.svg</file>
<file>checkbox-focused-dark.svg</file>
<file>checkbox-focused.svg</file>
<file>checkbox-off-dark.svg</file>
<file>checkbox-off-focused-dark.svg</file>
<file>checkbox-off-focused.svg</file>
<file>checkbox-off.svg</file>
<file>checkbox.svg</file>
<file>dash-placeholder.svg</file>
<file>gdm3.css</file>
<file>icons/scalable/actions/eye-not-looking-symbolic.svg</file>
<file>icons/scalable/actions/eye-open-negative-filled-symbolic.svg</file>
<file>icons/scalable/actions/keyboard-caps-lock-filled-symbolic.svg</file>
<file>icons/scalable/actions/keyboard-enter-symbolic.svg</file>
<file>icons/scalable/actions/keyboard-hide-symbolic.svg</file>
<file>icons/scalable/actions/keyboard-layout-filled-symbolic.svg</file>
<file>icons/scalable/actions/keyboard-shift-filled-symbolic.svg</file>
<file>icons/scalable/actions/pointer-double-click-symbolic.svg</file>
<file>icons/scalable/actions/pointer-drag-symbolic.svg</file>
<file>icons/scalable/actions/pointer-primary-click-symbolic.svg</file>
<file>icons/scalable/actions/pointer-secondary-click-symbolic.svg</file>
<file>icons/scalable/status/message-indicator-symbolic.svg</file>
<file>no-events.svg</file>
<file>no-notifications.svg</file>
<file>pad-osd.css</file>
<file>process-working.svg</file>
<file>toggle-off-dark.svg</file>
<file>toggle-off-hc.svg</file>
<file>toggle-off.svg</file>
<file>toggle-on-dark.svg</file>
<file>toggle-on-hc.svg</file>
<file>toggle-on.svg</file>
</gresource>
</gresources>
20.04-1-gnome-shell-theme.gresource.zipとして置いておきます。
カレントディレクトリを、合わせ、コンパイルします。
$ cd ~/ダウンロード/org/gnome/shell/theme
$ glib-compile-resources gnome-shell-theme.gresource.xml
こうしてできた、gnome-shell-theme.gresourceを、元のところに入れてテストしました。
$ sudo cp gnome-shell-theme.gresource /usr/share/gnome-shell/theme/Yaru/
(うまくいかなかった場合のために、/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresourceは.bakでも名前につけて、バックアップを取りましょう)
ログアウト・・・ログイン画面がちゃんと出ました。成功!
こんどは、login画面を変えられるか・・・
そこで、gdm3.cssを改変。
2095 #lockDialogGroup {
2096 background-color: #4f194c; }
を変更・・・
2095 #lockDialogGroup {
2096 background: #FEA5FA url(file:///usr/share/backgrounds/login.png);
2097 background-repeat: no-repeat;
2098 background-size: cover;
2099 background-position: center; }
というように、/usr/share/backgrounds/login.pngを指定します。そして/usr/share/backgrounds/login.pngを用意しておきます。
同じように、
$ glib-compile-resources gnome-shell-theme.gresource.xml
$ sudo cp gnome-shell-theme.gresource /usr/share/gnome-shell/theme/Yaru/
うまくいきました。
コンパイル済みのgnome-shell-theme.gresourceを以下に置いておきます。
20.04.chg.login.gnome-shell-theme.zip
基本的にうまくいく方法はわかりましたが、白を基調にしているので、明るい画面では、見にくいようです。各cssを変更して、色を変えるといいと思いました。
追記:
$ls | sed 's#^# <file>#g' | sed 's#$#</file>#g' > gtk.gresource.xml
あとlsに-dオプションで相対パス表示になるのでちょうどいいです。
という手がありましたね。
ディスカッション
コメント一覧
お疲れ様です。
moebuntuの既存のログイン画面のShellテーマをG Alternativesで設定できるか試してみようとした所、既に「gdm3-theme.gresource」となっており、gresource化したものでないと設定できないことが判明しました。
既存のShellテーマをgresource化することも一瞬考えてのですが、xmlを編集するなど面倒そうなのでやめました。
とりあえずは(まだわたしは試していませんが)Yaruテーマに背景挿入で手を打つことにします。
gresource化したものはG Alternativesで設定できることがわかったのは収穫でした。
お疲れ様です。
galternativesでのgdm3-theme.gresource設定確認できました。
gresource化すると、プログラミングする方が設定の構文解析をしなくてすみ、データベースを引くようにプログラムが簡単ですむので、アドミニストレータ対ユーザーの構造として、どうしてもその方向にならざるを得ないようですねェ。
Yaruテーマに背景挿入でうまくいけば、簡潔かと思います。
ただ、今回、ロック画面が、背景のblurになったように、gdmとthemeはより縁が切れています。
もしかしたら、/usr/share/gnome-shell/theme/Moebuntu/gnome-shell-theme.gresourceとしてgalternativesで設定となるやもしれないのは、ちょっと大変ですねぇ。
もしそうなったら、連絡ください。XMLは最新のを用意しますし、変更~試用時にできるだけ簡単なように、コンパイルスクリプトを作成しようと思います。
お疲れ様です。
確認ありがとうございます。
一つお願いがあるのですが、
暫定用として、YaruのShellテーマにmoebuntuのPlymouthやロック画面に使っているハートの壁紙データを挿入したgresourceファイルを作っていただけませんか?
*ちょっと文字とか見えづらいかもしれませんが。
> もしかしたら、/usr/share/gnome-shell/theme/Moebuntu/gnome-shell-theme.gresource
ちょっと先の話ではありますが、/usr/share/theme/に置くのが(問題がなければ、使う方からすれば)面倒がなくていいかと思っています。
*以前の恒久的なやり方ではそこに置いてました。
できればよろしくお願いします。
p.s.忘れていましたが、上記ログイン画面のサンプルのmoebuntuのロゴは以前同様
/usr/share/plymouth/ubuntu-logo.pngですか?
お疲れ様です。
回答の問題を外していたらすいません。
gresource自体にはにはlogin画面を含めていません。
・・・
20.04.chg.login.gnome-shell-theme.zip
から、同名ファイルをダウンロード。
nautilusなどで~/ダウンロード上で、解凍すると、gnome-shell-theme.gresourceができますが、この中にはログイン画面は含めていません。(実はgresourceに含めないで外部ファイルでいけるかも試してみたものです。)
実際のLoginの背景は、/usr/share/backgrounds/login.pngファイルなので、これを、おこのみの画像(ハートの壁紙データ等)にすれば、変わるはずです。
$ sudo cp ~/ダウンロード/gnome-shell-theme.gresource /usr/share/themes/moe-gnome-shell-theme.gresource
のように、/usr/share/themes/へコピーし(一応元のgnome-shell-themeと取り違えると大変なので、名前は変えました。)
場所はgalternativeで変更できるので、galternativeでgdm3-theme.gresourceを/usr/share/themes/moe-gnome-shell-theme.gresourceとすればOKとおもいます。
また、ログイン画面のサンプルのmoebuntuのロゴは以前同様
/usr/share/plymouth/ubuntu-logo.pngです。gdm3.cssには書いてありませんねぇ^^;なぜPlymouthにあるのか不思議ですよねぇ。
お疲れ様です。
20.04.chg.login.gnome-shell-theme.zip
の中のgresourceファイルでは/usr/share/backgrounds/login.pngが指定されているということですね。
わかりました。それならお手軽に好きな画像に変えられますね。
ありがとうございます。
お疲れ様です。
ちょっと本文の方が、解りづらかったですね。直しておきました。
まだ、これからだと思うのですが、gnome-shellのthemeの置き場所については、
① できれば、本家を踏襲して
/usr/share/gnome-shell/theme/Moebuntu/gnome-shell-theme.gresourceに置く。
本家は、ウインドウthemeとgdmテーマを分けたという意味でこうしてると思います。
② これは私もなるほどと思ったのですが、
/usr/share/themes/MoePinkShell5のようにMoePinkShell5として配布できるように、
例えば/usr/share/themes/MoePinkShell5/gresource/に
moe-gnome-shell-theme.gresourceと、元となるlogin画面を(例えばmoebuntu_bg.png)を入れて配布できれば、あとは説明上galtanativeのみで行けそうですね。
②なら、導入はかなり楽になると思います。
とりあえずのパッケージングの際の、コンパイルについても承りますので連絡ください。
お疲れ様です。
とりあえずログイン画面ハートの壁紙で試してみました。
ちょっと見えづらいかんはあるけど暫定としてはいいですね。
ありがとうございます。
置き場所の件はとりあえず②の方向で良さそうですね。
ところで、ちょっと思ったことがあるのですが、
gresourceってもしかしてgdm3.cssさえgresource化すれば良かったりしますか?
*更にエイリアスがいけたりして?
もしそれが可能ならgresourceの扱いも楽になるような気がします。
*もちろん他のファイルは裸のまま置くことになります。
お疲れさまです。
gnome-shell-theme.gresourceをでコンパイルしてみるとわかるのですが、以前のようなCSSなどの平板な並びではなく、ディレクトリの階層を含んだ構造になっています。そのため、もとのファイルをどこに置けばよいかまた、ディレクトリ名はなにかレガシーがありません。
また、gnome-shell-theme.gresourceは、内部のディレクトリが1つかけても、ログイン画面が出なくなり、代わりに「なにかおかしい〜管理者に連絡してください」という旨の表示が出ます。
面倒なことに、CTRL-ALT-F2などで、ほかのttyを使い、バックアップしておいた、gnome-shell-theme.gresourceを書き戻さねばなりません。結構何度もトライしたので・・・大変でした。
gresourceを崩すのは、難しいと思います。
お疲れ様です。
試していただきありがとうございます。
背景画像を埋め込んでなくても大丈夫だったことからもしやと思ったのですが、
そう単純ではないんですね。
そうすると画像類は含まなくても大丈夫ということなんでしょうかね?
ただ、画像を含まなくて何かいいことがあるかというとなさそうですね。
お疲れさまです。
実際には、darkテーマらしきものや、svgでのスイッチの画像ようなものが入ってたりのようですが、gdm3として、どこまで必要なのか、正直言ってわかりません。gdm3とaltanativeは言い、またgnome-shellフォルダに有るので、いるのやろいらないのやら・・・^^;
UBUNTU20.04のgnome-shell-theme.gresourceのgdm3.cssにMoePinkShell4のgnome-shell.cssを入れてコンパイルしてみる(https://mifmif.mydns.jp/masterkudo/?p=804)と、惜しいところまでは行きます。ちょっと荒っぽく言えば、gdm3.cssで、前のように配色を変えられそうな感じではあります。
前述の②案の方向で良いように思います。
・・・
萠え萌えmoebuntuの方見ました。現状もgnome-shell.cssと同じであれば、その部分の入れ替えでも行けそうな予感ですね。これは良い兆候です。
お疲れ様です。
ログイン画面の萌え化状況をアップして、
その際にまたリンクさせていただきました。
ところで今いじっているシェルテーマは色使いが割と単純なので、
思ったよりかは楽そうです。
できることなら日本語Remix版までに用意したいと思っています。
デスクトップテーマはアップグレードパスのタイミングが目標かな?
お疲れ様です。
リンクいただきありがとうございます。
コロナ対策ー仕事関係で、問題があるのですがなんとか出来そうです。
面倒なXML関係は、シェルスクリプトでだいたいのところやっつけられますので、相談ください。