GUI 응용 프로그램은 상위 콘솔 응용 프로그램에서 PATH를 상속하지 않습니다.

GUI 응용 프로그램은 상위 콘솔 응용 프로그램에서 PATH를 상속하지 않습니다.

PATHGnome에서 GUI 응용프로그램은 이를 실행한 쉘 프로세스를 상속받지 않습니까 ? 분명히 GUI 응용 프로그램은 .Console 응용 프로그램에 문제가 없다는 것만 PATH알 수 있습니다.~/.profile

Bash 세션에서 현재 사용 가능한 GUI 애플리케이션을 실행하면 PATH실행에 실패합니다. 예를 들어:

  • Thunderbird가 라이브러리를 찾을 수 없습니다 libxpcom.so(해당 폴더에 있음). 그러나 which명령은 라이브러리를 찾습니다(폴더가 위치하기 때문 PATH).
  • Firefox는 다음과 같이 실패합니다."Mozilla 런타임을 찾을 수 없습니다."

추가해도 문제가 해결 PATH되지 않습니다.LD_LIBRARY_PATH

그러나 만약 내가:

  1. Gnome 세션을 설정 PATH하고 다시 시작하세요.~/.profile
  2. 또는 응용 프로그램을 시작하기 전에 해당 응용 프로그램의 폴더로 전환하십시오.

그런 다음 Bash 세션에서 아무런 문제 없이 GUI 애플리케이션을 실행할 수 있습니다. 사실, 현재 나는 두 번째 프로세스를 시뮬레이트하는 스크립트를 사용하고 있습니다.

문제는 무엇입니까? GUI 애플리케이션 실행 프로그램을 사용해야 합니까?

PATH나는 그것에 내 관습을 적용하고 싶지 않으므로 ~/.profile이 질문입니다.

관심을 가져주셔서 감사합니다.

환경:

  • 데비안 GNU/리눅스: 6.0.7
  • 그놈 버전: 2.30.2

편집하다:Gnome이 어떻게 시작되는지 모르겠습니다. GUI로 Debian을 설치했는데 기본적으로 그래픽 로그인 화면 후에 Gnome이 시작됩니다.

Bash는 "gnome-terminal --full-screen" 명령을 통해 Gnome 패널에서 시작됩니다.

편집 2:

Bob의 제안 덕분에 나는 실행을 시도했습니다 bash --norc. 즉, 기본 구성으로 Bash를 사용한 다음 Thunderbird 및 Firefox에 수동으로 경로를 추가했습니다. - 이제 두 응용 프로그램 모두 정상적으로 실행됩니다. 이 문제를 어떻게 해결할 수 있나요? 내 ~/.bashrc것은 단지 보충제 입니다 PATH. 게다가 이 명령은 두 가지 모두 which매우 잘 구문 분석합니다 . 어쩌면 내 안에 서로 숨겨져 있는 라이브러리가 있을까요 ? 무슨 일이 있어도 항상 비어 있습니다.firefoxthunderbirdPATHLD_LIBRARY_PATH

댓글 작성자가 제안한 것처럼 각 GUI 애플리케이션에 대한 실행 스크립트를 제공하는 것이 해결책일 수 있다고 생각합니다.

답변1

이에 대한 혼란의 대부분은 Linux 배포판마다 다르기 때문입니다. 일반적으로 말하면...

  • /etc/profile은 시작 시에만 획득됩니다.
  • /etc/profile은 /etc/profile.local(존재하는 경우)에서 시작됩니다.
  • /root/.bashrc 소스...
    • 시작 시 /etc/profile 이후.
    • 새 터미널 세션을 열 때.
  • 터미널 세션 명령줄에 입력된 명령만 사용됩니다./root/.bashrc에 설정합니다.
  • Gnome과 같은 GUI에서 실행되는 스크립트 및 프로그램에서 사용됩니다./etc/profile에 설정
  • /etc/profile이 /etc/profile.local을 실행하면(존재하는 경우) 변경 및 추가됩니다.보통 거기서 하는 것이 가장 좋습니다. 모든 서브쉘이 볼 수 있도록 "PATH 내보내기"를 기억하십시오.

나는 이것이 Ubuntu 10.04 기반 Puppy Linux 5.2.8 Lupu의 동작이라는 것을 알고 있으며 연구에 따르면 적어도 Ubuntu와 같은 많은 Debian 기반 배포판에서는 이것이 일반적입니다.

$HOME/.profile(/etc/profile 시스템 전체 스크립트와 유사한 사용자 스크립트)에 설정된 PATH가 Gnome과 같은 비터미널 세션에 적용된다고 생각할 수도 있지만 그렇지 않습니다. Xwindows GUI 및 다양한 디스플레이 관리자 등(예: Gnome)은 터미널 세션과 병렬로 실행되므로 $HOME/.bashrc 설정을 상속하지 않습니다.

대부분의 프로그램은 필요할 때 PATH 재설정을 담당하는 것 같습니다. 다음 명령은 "PATH="...를 포함하는 수십 또는 수백 개의 파일을 표시합니다.

grep -r 'PATH=' /etc/*

문제와의 관련성에 대한 설명

내 컴퓨터의 현재 프로세스 계층 구조는 명령의 편집된 출력에 표시됩니다.

ps -efH | cut -c49-126
----------------------
/bin/busybox init
  /bin/sh /usr/bin/xwin
    /usr/bin/xinit /root/.xinitrc -- -br -nolisten tcp
      X :0 -br -nolisten tcp
      openbox
        /bin/ash /sbin/pup_event_frontend_d
          sleep 2
  /usr/local/apps/ROX-Filer/ROX-Filer -p /root/Choices/ROX-Filer/PuppyPin
    roxterm
      gnome-pty-helper
      -sh
      -sh
      -sh
      -sh
      -sh
      -sh
        ps-FULL -efH
        cut -c49-126
    geany
  • 대부분의 시스템에서 출력의 첫 번째 줄은 "init"이지만 Puppy는 이러한 명령 중 상당수를 "busybox"로 대체합니다.
  • Xwindows 하위 시스템을 시작하는 "xwin"은 "init"에 의해 실행됩니다.
  • 아래로 이동하면 ROX-Filer는 데스크톱 관리자 역할을 하며 "xwin"과 동일한 수준에 있고 "roxterm"은 "gnome-terminal"과 유사하며 "-sh" 프로세스는 내가 사용하는 여러 bash 터미널 세션입니다. 다음에서 열기 탭이 있습니다.
  • Geany는 Xwin 및 ROX-Filer와 동일한 수준에서 실행 중인 GUI 편집기입니다.

내보낸 환경 변수(예: PATH)는 이를 시작한 프로세스(예: "상위 프로세스")에서만 상속됩니다. ps 출력에는 표시되지 않지만 /etc/profile(및 /etc/profile.local)은 "init" 시작 프로세스 중에 읽은 많은 스크립트 중 하나이므로 "xwin"은 여기에 설정된 PATH를 볼 수 있습니다. 그러나 .bashrc는아니요이러한 스크립트 중 하나에 설정된 PATH는 다른 GUI 프로그램에서 볼 수 없습니다.

GUI 프로그램회의bash 명령줄에서 실행하면 .bashrc PATH를 볼 수 있습니다.

관련 정보