PackageKit がないと処理コマンドが見つかりません。

PackageKit がないと処理コマンドが見つかりません。

コマンドラインの膨張と競合状態が必要ないため、FedoraからPackageKitを削除しました。

その時点から、command-not-foundは次のように失敗します。

❯ foo
bash: foo: command not found...
Failed to search for file: GDBus.Error:org.freedesktop.DBus.Error.NameHasNoOwner: Could not activate remote peer.
# because...
❯ dbus-send --system --print-reply  --dest=org.freedesktop.PackageKit  \
    /org/freedesktop/PackageKit org.freedesktop.DBus.Properties.Get  \  
    string:'org.freedesktop.PackageKit' string:'BackendName'

Error org.freedesktop.DBus.Error.NameHasNoOwner: Could not activate remote peer.

PackageKitなしでコマンドで見つからない機能を保存するには?dnfがこの問題を自分で解決できるはずです。

バージョン:

  • Fedora 31 Beta + GNOME Shell 3.34.0 + zsh 5.7.1
  • PackageKit-command-not-found-1.1.12-11.fc31.x86_64.rpm

答え1

まあ、この質問は何年も私を悩ませてきました。他の多くの人のように、嫌いPackageKitを無効にするために多くの努力をしました。また、かなりの影響がなければ除去できないという事実も発見しました。最善の方法は、systemctlサービスを無効にしてブロックして、すでにいっぱいのハードドライブに突然多数のパッケージをダウンロードするのを防ぐことです。代わりに、パッケージとシステムのアップグレードを処理するためにコマンドラインDNFにのみ依存します。

だから私は通常、私の脂肪質の指で「mkae」(または正しく入力できる人のための「make」)のようなコマンドを入力するたびに、この「迷惑な機能」に耐えます。

普段あきらめてこんな悩みを抱いて暮らす方ではありませんが、今日いよいよ掘り下げる時間を持つようになりましたが…気づきました。持つbashの機能です。しかし、Fedoraがbashを調整することを理解することはできません。それこれはPackageKitにとって非常に重要です。ただし、このトピックの検索結果も見つかりませんでした。 (ただし、他の多くの人もPackageKitに迷惑をかけているようで、明らかに私だけではありません。)

だから私はそれを掘り下げた。私はbashをかなりよく知っていて、マンページを検索することから始めることにしました。最終的にこの簡単な答えにつながります。

command_not_found_handlebash(およびzshなどの他の一部のシェル)には、任意のコマンドが見つからないときに呼び出す機能があることがわかりました。 PackageKitは、この機能を定義する/etc/profile.dの下にファイルをインストールすることがわかりました。それ/etc/profile.d/PackageKit.sh

関数のバージョンを見ると、これを無効にする方法はいくつかあります。

  • /etc/profile.d/PackageKit.shを削除できます(パッケージが更新されると表示されることがあります)。
  • 実行権限を削除します/usr/libexec/pk-command-not-found(パッケージの更新時に復元される可能性があります)。
  • ディレクトリを削除(または名前変更)します/usr/libexec/packagekitd(そしてパッケージが更新されたら再インストールすることもできます)。
  • unset -f command_not_found_handleローカルの.bashrcファイルに追加
  • 最後に、ローカルの.bashrcファイルに独自の素晴らしい「カスタム」機能を定義しますcommand_not_found_handle(上記の説明で説明したように)。私はこの道を進み始めましたが、古い「コマンドが見つかりません」が最善だと決めました...

PackageKitを完全に削除しようとしたときに多くの問題に直面していたので、単に所定の位置に置き、無効にしてマスクされたままにしました。だから私はローカルの.bashrcで機能を無効にする簡単な方法を選びましたGDBus.Error:org.freedesktop.DBus.Error.NameHasNoOwner

はい!

関連情報