gnome-initial-setup が終わったら別のアプリケーションを起動する


gnome-initial-setup は新規ユーザーのログイン時にセットアップなどを行う。
ユーザーごとに言語設定を行うのに便利。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7d007c30-b818-1985-8d94-9b9bbb3a3cf6.png)


独自の設定を入れたいのだけれどどうしたらいいのかな?

# 環境

Debiana Testing (Debian 13 : 2024/07/06 時点)


# 調査

gnome 系は Unix philosophy に沿ってないのでメンドクサイ。
gbine-initial-setup のカスタマイズを調べてみたけど全然わからない。
ここらへんに
https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/tree/master
Vendor 設定があるが、試してみたけど動いてないようだった。


# ソース

設定方法がわからないので、ソースから再コンパイルかな? と思ったけどめんどくさそう。

今回は Debian をベースにしたシステムで使うつもりだけど、 以下のようなことが書いてあって読み解くのが大変。

> Although this mode is unreachable in the upstream version of Initial Setup, both
> Debian and Ubuntu have downstream patches to restore it.

# 別アプリケーションで対処

gnome-initial-setup に手を加えるのではなく、別プログラムを gnome-initial--setup が終わった後に起動する方法を採ることにした。

## 作戦

gnome-initial-setup は、新規ログオン時に一度だけ実行されます。
二度目からのログオン時には実行されません。
それは gnome-initial-setup が実行されたときにファイル

```
~/.config/gnonme-initial-setup-done 
```

が生成されるからです。
このファイルが無いときには gnome-nitial-setup が実行中とみなし、このファイルが生成されたら別アプリを実行するようにします。

# キックプログラム


これは gnome-initial-setup の後に首相官邸ページを表示するものです。

```
#!/bin/sh
FILE="${HOME}/.config/gnome-initial-setup-done"

while [ ! --e $FILE]
do
  sleep 1
done
firefox https://www.kantei.go.jp

```

全てのユーザの自動起動のために、
/etc/xdg/autostart/after-gnome-initial-setup.desktop
を以下の内容で作ります。

```
[Desktop Entry]
Type=Application
Name=Welcome 2nd stage
Exec=/usr/local/bin/after-gnome-initial-setup.sh
X-GNOME-Autostart-enabled=true
```

# テスト

debian のパッケージに README.source にテスト方法があります。

https://salsa.debian.org/gnome-team/gnome-initial-setup/-/blob/debian/latest/debian/README.source?ref_type=heads
```
Testing this package
====================

Test Case 1
---------------
rm ~/.config/gnome-initial-setup-done
Log out then log back in
gnome-initial-setup should automatically start

Test Case 2
----------------
Create a new user
Log in as the new user
gnome-initial-setup should automatically start

Test Case 3
----------------
Run this command
/usr/libexec/gnome-initial-setup --existing-user


```

今回は Test Case 2 の方法を使ってテストしました。


gnome-initial-setup が終わると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2a43edda-8bcc-655d-60a9-55ee9c7e3d76.png)

首相官邸のページが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5880ad80-d427-8fa5-3c30-cfa606ad0bb1.png)

# 1回のみ起動する

このプログラムだと、ログイン時に毎回表示されます。
gnome-initial-setup の実行後に1回だけ実行するには、

`/.config/gnonme-initial-setup-done `

と同じように


`/.config/after-gnonme-initial-setup-done `

ファイルを作成し、こちらのファイルがあれば処理を行わないようにするなどの処理が必要となります。


# パスワード変更を行う

「TkEasyGUI で パスワード変更 GUI を作る」
https://qiita.com/nanbuwks/items/358b53a2495199b54068

を使い、 gnome-initial-setup が終わったらパスワードを変更するようにしました。
上記の「1回のみ起動する」の処理も加えています。

```
#!/bin/sh
DONEFILE="${HOME}/.config/after-gnome-initial-setup-done"
WATCHFILE="${HOME}/.config/-gnome-initial-setup-done"
if [ -e $DONEFILE ]; then
  exit
fi

WATCHFILE="${HOME}/.config/gnome-initial-setup-done"

while [ ! -e $WATCHFILE ]
do
  sleep 1
done
passwordchange.py
touch $DONEFILE
```

処理が終わるとパスワード変更ダイアログが表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/19453646-4992-11c6-0d3b-132fc80f0e9e.png)