Debian 10のgdebiのバグを回避して利用する方法

[2020/7/14 追記] Step1の内容が不要なことを確認しました。読み飛ばしてください。ご迷惑をおかけして申し訳ございません。
#はじめに
こんにちは。皆さんはDebianをお使いですか？GNOME以外のデスクトップ環境をお使いですか？
野良パッケージをGUIツールを用いてDebianにインストールする場合、GNOMEデスクトップではGNOME Softwareが便利ですが、それ以外のデスクトップではgdebiが有効です。
しかし、Debian 10のgdebiはファイルマネージャーからdebファイルをダブルクリックして起動した場合、「パッケージをインストール」ボタンをクリックすると終了し、パッケージはインストールされません。今回は、この症状を回避してgdebiを使えるようにするための方法を紹介します。
#考えられる不具合の原因と対策の流れ
筆者は素人なのであくまでも挙動からの推測ですが、「パッケージをインストール」ボタンをクリックしたときのroot権限への切り替えがうまく行っていないようです。そこで、gdebiを最初から~~root権限で~~rootユーザーとして起動することで、不具合を回避します。以下では、その方法を3つのステップに分けて説明します（2020/7/14追記: Step1は不要です。読み飛ばしてください。Step2・3を読んでください）。gdebiはすでにインストールされているものとします。
#Step1. ~~PATHの設定~~→不要です、読み飛ばしてください[2020/7/14]
一部の野良debパッケージは、インストール時に`/usr/sbin`などに配置されているコマンドをフルパスを指定せずに実行しようとします。しかし、Debian 10の標準設定では、[NewInBuster](https://wiki.debian.org/NewInBuster)にあるように、root権限になっただけでは`/usr/sbin`などにPATHは通らず、インストールを実行できません。
そこで、`/etc/login.defs`について、PATHの設定を行っている部分（102行目付近）を以下のように変更し、root権限で`/usr/sbin`などにPATHが通るようにします。

```text:/etc/login.defs
ALWAYS_SET_PATH yes
ENV_SUPATH	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH	PATH=/usr/local/bin:/usr/bin:/usr/sbin:/bin:/usr/local/games:/usr/games
```
設定が終わったら再起動します。
以下の記事を参考にしました。
[NewInBuster - Debian Wiki](https://wiki.debian.org/NewInBuster)
[Debian $PATH variable change - stack overflow](https://stackoverflow.com/questions/7257874/debian-path-variable-change)

~~…とここまで解説してきましたが、Step2以降の設定を行うにあたり、Step1が必要あるのか正直分かってないです。誰か教えてください。~~→このStepは不要でした。Step2で用いる`pkexec`コマンドは、root権限ではなく、rootユーザーとしてコマンドを実行するためです。

#Step2. ~~root権限~~rootユーザーでgdebiを起動するシェルスクリプトを作成する
`/usr/local/bin`に、以下のシェルスクリプトを配置します。

```shell:/usr/local/bin/gdebi-gtk-exec
#!/bin/sh

pkexec "/usr/bin/gdebi-gtk" "$@"
```
pkexecコマンドで~~root権限~~rootユーザーの認証をしてからgdebiを起動するスクリプトです。今回`$@`には、gdebiで開くファイル名が入ります。
さらに、つぎのコマンドで実行権限を与えます。

```shell
# chmod +x /usr/local/bin/gdebi-gtk-exec
```
以上で、ターミナルから`$ gdebi-gtk-exec`を実行すると、~~root権限~~rootユーザーの認証を求める画面が表示されます。実際にrootパスワードを入力すると、~~root権限で~~rootユーザーとしてgdebiが立ち上がります。

#Step3. GUIで利用できるように、desktopファイルを改造する
Step2までではコマンドラインからしかgdebiを利用できません。そこで、ファイルマネージャーなどから利用できるようにするため、gdebiのdesktopファイルを改造します。
まず、以下のコマンドでシステムのdesktopファイルをユーザーのディレクトリにコピーします。

```shell
$ cp /usr/share/applications/gdebi.desktop ~/.local/share/applications/
```
つぎに、コピーしたdesktopファイルから、`gdebi-gtk-exec`を実行するように、155行目付近の`Exec=gdebi-gtk %f`をつぎのように変更します。

```text:~/.local/share/applications/gdebi.desktop
Exec=gdebi-gtk-exec %f
```
以上でコマンドラインを使用せずに、Debian 10でgdebiを利用できるようになりました。

#変更後の挙動
~~Step1-3~~Step2・3の設定を行ったあとにgdebiがどのような挙動をするのかスクリーンショット付きで紹介します。以下は[SRware Iron](https://www.srware.net/forum/viewforum.php?f=18)のインストール例です。
ファイルマネージャーに表示されているインストーラー"iron.deb"をダブルクリックします。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639183/f588263b-bf35-8dd2-da7e-cb769dfb24e7.png" width=70%>
すると、下図のように、rootパスワードの入力が求められます。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639183/c5eadc78-b509-112f-ed00-11530ca1bc7d.png" width=70%>
ここで、rootパスワードを入力すると、gdebiが~~root権限で~~rootユーザーとして起動します。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639183/3d7e50c5-bbc6-af85-5dd9-c1e94223a084.png" width=70%>
"パッケージをインストール"ボタンをクリックすると、インストールが始まります。
インストール中のスクリーンショットを撮り忘れてしまいましたが、しばらく待つとインストールが完了します。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639183/ef0b4544-8fe6-2fb7-72f5-042324ff814a.png" width=70%>

#まとめ
以上がDebian 10でgdebiを使う方法でした。ファイルマネージャー上のdebファイルをダブルクリックするといきなりrootパスワードが要求されるのは少し怖いですが、自分で分かって使う分には問題ないと思います。