저는 Steam Deck에서 Arch Linux를 실행하고 있습니다. Steam Deck에는 읽기 전용 루트 파일 시스템이 있어 Flatpak을 사용하거나 팩맨 기반 설치를 삭제하는 대신 파일 시스템을 쓰기 가능하게 만들어야 합니다.Deck의 소프트웨어를 업데이트할 때마다.
나는 Flatpak의 팬이 아니며 Nix를 선호합니다. 특히 Flatpak에는 필요하지 않지만 필요한 패키지가 있기 때문입니다.
Nix를 사용하면 chroot 감옥에서 루트 액세스 없이 전체 패키지 관리자를 실행할 수 있습니다.nix 사용자 chroot유용.
설치 후 chrooted nix 환경으로 들어가는 명령은 nix-user-chroot ~/.nix bash -l
새 셸에서 제대로 실행됩니다.
그러나 마지막에 똑같은 줄을 붙여넣으면 .bashrc
당황하게 됩니다.
이는 명령을 두 번 실행할 때 발생하는 것과 똑같은 오류인 것 같습니다.
Steam Deck 쉘은 chroot 감옥에서 실행되는 것으로 보입니다.이 기술chroot했는지 확인하려면( nix-user-chroot ~/.nix bash -l
bashrc에서는 실행되지 않음):
nix-user-chroot ~/.nix bash -l
그래서 내 질문은 각 터미널에 대해 호출되도록 이것을 어떻게 자동화할 수 있느냐는 것입니다 .
답변1
의견에서 muru가 언급했듯이 문제는 첫 번째 실행이 nix-user-chroot ~/.nix bash -l
제대로 작동하지만 다시 실행을 시도하는 새 셸을 생성한다는 것 nix-user-chroot
입니다. 해결책은 nix-user-chroot
if 절에 넣고 nix 환경이 이미 로드되었는지 확인하는 것입니다 .
if [ -z "${NIX_PROFILES}" ]; then
./nix-user-chroot ~/.nix bash -l
fi
뒤쪽에.bashrc
nix 구성 파일을 로드합니다(설치 프로그램이 또는 파일에 한 줄을 추가했습니다 .profile
).
답변2
Settings
나는 다른 작업을 수행하고 ->의 Konsole 명령을 Edit Current Profile...
다음과 같이 변경했습니다.
/bin/bash -c "~/.local/bin/nix-user-chroot ~/.nix bash"
Vapor
구성 파일이 읽기 전용이기 때문에 새 구성 파일을 만들어야 했습니다 .
그것은 거의 같은 일을 합니다. Konsole에만 있으므로 이 작업을 수행하면 뭔가 수정해야 할 경우를 대비하여 bash가 계속 작동합니다. :)
그런 다음 애플리케이션에 대해 실행 가능한 bash 스크립트를 생성하고 ~/.local/bin/<YOURAPPNAME>
다음을 사용하여 실행 가능하게 만듭니다.chmod +x ~/.local/bin/<YOURAPPNAME>
#! /usr/bin/env bash
~/.local/bin/nix-user-chroot ~/.nix ~/.nix-profile/bin/<YOURAPPNAME>
데스크톱 사용을 위해 다음을 만듭니다 ~/.local/share/applications/<YOURAPPNAME>.desktop
.
[Desktop Entry]
Version=1.0
Name=<YOURAPPNAME>
Comment=<YOURAPPDESCRIPTION>
Exec=~/.local/bin/<YOURAPPNAME>
Terminal=false
Type=Application
Icon=meld
Categories=GNOME;Development;
StartupNotify=false
NoDisplay=false