Linuxに置いてのGUIアプリを管理者権限で起動する方法に”gksu”というコマンドを経由するという方法が以前はありました。
ターミナルからであれば非推奨ながらも “sudo -H” コマンドなどで起動できたのですが、例えばGNOMEなどから直接ショートカットで実行したい場合などでは、ターミナルが開かないためパスワードが入力できないという問題があります。
gksuコマンドではsudoと同じように権限の昇格を行ってくれる上、GUIのフロントエンドも表示してくれるので、ターミナルを経由せずに管理者権限でアプリやコマンドを実行させることが可能でした。
ところが、このgksuが本家debianのリポジトリから削除されたことに伴い、Ubuntu でも バージョン18.04で削除されてしまいました。
$ sudo apt install gksu
[sudo] hoge のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ gksu は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
E: パッケージ 'gksu' にはインストール候補がありません
よって今後は、gksuコマンドを使ってGUI上から管理者権限でアプリを起動することができません。
これでは困ってしまうので、代替策をいろいろ調べたところ、下記記事を発見。
Linux Mint 19: 「’gksu’ not found」 廃止された gksu の代わりの方法 – 221B Baker Street
どうやら、代わりに”pkexec”コマンドを利用すればいいようです。
ただし、このコマンドをgksuのようにGUIで利用できるようにするには
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY コマンド
のようにする必要があるようです。
しかし、これを毎回打つのはかなり面倒なので、aliasへ登録しておきます。
上記の記事では
alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
のようにpkexecを上書きすることをお勧めされていましたが、これだとオプション無しの”pkexec”コマンドが使えなくなってしまいますので、僕の場合はこのようにしました。
alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
こうしておけば、もはや存在しなくなったgksuコマンドでオプション付きのpkexecが呼び出せますし、新しいコマンドを覚える必要もないので便利です。
aliasの効果は一時的なので、永続化させるためにこの記述を、
~/.bashrc
ファイルの最終行あたりに追記しておきます。
こうすることで、ログインするたびに.bashrcに記述したaliasコマントが実行されるので、常に使用することが可能になります。
ただし.bashrcはGNOMEのようなデスクトップ環境から直接呼び出されないので、
(例えばショートカットを作成してダブルクリックだけで起動したい場合などで) GUIから直接aliasで作ったgksuコマンドをたたいても、先ほどのaliasが設定されていない為存在しないコマンドとなり実行できません。
そこで、先ほどのオプション付きpkexecコマンドをシェルスクリプトファイルに書き、パスが通っている場所(/usr/local/binなど)に置いて、普通のコマンドとして扱えるようにしてしまいます。
例えば、
vi /usr/local/bin/gksu
のようにして、次のように記述して保存します。
#!/bin/bash
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $1
こうすることで、gksu コマンド を実行したときに、コマンドが$1に渡されるので目的の動作をさせることができますし、パスが通ったディレクトリに置くことで、どのディレクトリからもコマンドとして実行できます。
つまり、GNOMEのようなデスクトップ環境上でも、直接自作の”gksu”コマンドが実行できるようになります。
gksuが使えなくてお困りの方は是非一度試してみてください。