デスクトップ環境構築 - 共通事項 - OctoPkg - 機能しないとき

 クラウディア
1. 概要
2. 対策(一般)
3. 対策(KDE)
4. 傍証

1. 概要

 あるときから、「OctoPkg」が、機能しなくなったのです。  自分の記録をたどると、2019年01月17日、「FreeBSD 12.0 RLEASE」を扱っていたあたりからかな。  状況は、パッケージの更新やインストール時に、「Confirmation」で「Yes」入力後、いつまで待っても、「認証」のダイアログが表示されないのです。  ソースを変えて、無理やり、「sudo」で起動したりもしましたが、どうやら、原因ははっきりとつかめていなかったのです。

2. 対策(一般)

 インストール時に

pkg install -y octopkg gksu
 でインストールしていたのですが、このとき、「bash」も同時にインストールします。

pkg install -y octopkg gksu bash
 こうすることで、たいていのデスクトップでは、「OctoPkg」が機能するようになります。

3. 対策(KDE)

 「KDE」は、さらに特別、インストールは

pkg install -y octopkg gksu kf5-kdesu bash
 となりますが、インストール後に

mkdir -pv /usr/local/lib/kde4
ln -s /usr/local/lib/libexec/kf5 /usr/local/lib/kde4/libexec
 とすることで、「OctoPkg」が機能するようになります。

4. 傍証

 「ports」を展開して、軽く「hack」してみて、なんとなくわかりました。  ソースディレクトリで、「grep」してみます。

$ grep bash *.cpp
unixcommand.cpp:  proc.start("/usr/local/bin/bash -c \"which " + binary + "\"");
unixcommand.cpp:    proc.start("/usr/local/bin/bash -c " + sParam);
utils.cpp:    proc.start("ps -o pid -C bash");
 認証のダイアログを表示させるのにおそらくは、「bash」を使用しているのです。  なんだかなぁ。  「bash」必須であれば、依存関係をつけてくれればいいし、どこでも使えるようにするには、「bash」でなく、「sh」なんだがな。  「KDE」に関しては

$ grep kdesu *.cpp
mainwindow_transaction.cpp:  else if (WMHelper::getSUCommand().contains("kdesu"))
mainwindow_transaction.cpp:    msg.remove(QRegularExpression("kdesu.+"));
wmhelper.cpp:    result = "/usr/local/lib/kde4/libexec/kdesu";
wmhelper.cpp:      QFile kdesu("/usr/local/lib/kde4/libexec/kdesu");
wmhelper.cpp:      if (kdesu.exists()){
 とまぁ、「/usr/local/lib/kde4/libexec/kdesu」を使っていますが、現在(2020年6月25日)の「KDE」では、「kdesu」は「/usr/local/lib/libexec/kf5/kdesu」にあるのです。  「ports」や「pkg」のチームもしくは、「OctoPkg」のメンテナに伝えたいのですが、英語ができないので、伝えられないのだ。