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가 이 문제를 자체적으로 해결할 수 있어야 할 것 같은데요?

버전:

  • 페도라 31 베타 + 그놈 쉘 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.

하아!

관련 정보