태그 보관물: cygwin

cygwin

Cygwin의 XWin 서버가 xterm을 자동으로 시작하지 못하게하려면 어떻게합니까? 시작 메뉴의 “XWin

시작 메뉴의 “XWin 서버”링크를 사용하거나 startxwinCygwin 셸에서 실행하여 Cygwin의 X 서버를 시작할 때마다 xterm 창이 자동으로 나타나며, 원치 않거나 필요하지도 않습니다.

어떻게 피할 수 있습니까?

(질문은 영감 이 댓글 에 의해 스테인 Vanpoucke 스택 오버플 이상)



답변

@me_and부터 원래 질문에 대답 한 이후 startxwin의 동작이 변경된 것 같으므로 홈 디렉토리에 빈 .startxwinrc를 만들면 더 이상 작동하지 않습니다.

나는 여기서 답을 찾았다 . 본질적으로 .startxwinrc의 마지막 명령이 종료되면 서버가 종료됩니다. 이를 방지하려면 이것을 .startxwinrc의 마지막 줄로 넣을 수 있습니다.

sleep inf

이렇게하면 클라이언트 프로그램이 시작되지 않지만 .startxwinrc가 종료되지 않습니다.


답변

업데이트 :이 답변이 오래되었습니다. 최신 답변은 아래 user551570의 답변을 참조하십시오 .

보낸 사람 man startxwin:

명령 행에 특정 클라이언트 프로그램이 제공되지 않으면 startxwin, 사용자의 홈 디렉토리에서 .startxwinrc클라이언트 프로그램을 시작하기위한 쉘 스크립트로 실행되도록 호출 된 파일을 찾습니다 . 그러한 파일이 없으면 startxwin다음을 기본값으로 사용합니다.

xterm  -geometry  +1+1  -n  login  -display  :0

따라서 X 서버를 시작할 때 프로그램이 시작되지 않도록하려면 빈 .startxwinrc파일이 필요합니다. Cygwin 프롬프트에서 다음을 실행하십시오.

touch ~/.startxwinrc


답변

현재 2014년 11월 , 최신 버전의 startxwin사용은 xinit실제로 호출되는 Cygwin에서 / X 서버를 시작합니다 XWin.exe. 프로세스는 다음과 같습니다.

  1. 당신은 전화 startxwin
  2. startxwin.Xauthority파일과라는 파일을 만듭니다 .serverauth.1234( 1234X를 시작할 때마다 변경됨)
  3. startxwin 일부 클라이언트 및 서버 매개 변수를 설정합니다
  4. startxwinxinit일부 선택적 쉘 스크립트 및 인증 파일에 대한 참조를 포함하여 클라이언트 및 서버 매개 변수를 사용하여 호출 합니다.
  5. xinit rc 스크립트 중 일부를 실행하여 X 서버를 시작합니다.
  6. xinit클라이언트 (일반적으로 xterm) 또는 클라이언트 rc 스크립트를 시작합니다 . 우리는 이것을 피하고 싶다
  7. 클라이언트를 닫거나 클라이언트 rc 스크립트가 완료되면 xinitX 서버를 종료하십시오. 6 단계를 피하면 이도 피해야합니다

실행할 수 있습니다 XWin.exe주변의 작업없이 배쉬 로그인 쉘 내에서 직접 startxwinxinit수행합니다. 이것의 주요 장점은 우리가 원하는 것처럼 동작한다는 것입니다 : X 서버가 시작되고 계속 실행됩니다. 불행하게도, .Xauthority시작하는 동안 파일이 전달 되지 않기 때문에 X 서버는 로컬 프로세스가 파일에 연결하도록 허용하므로 안전하지 않습니다.

다행히도 xinit우리가 원하지 않는 대부분의 작업을 수행합니다. 우회 xinit하지만 startxwin서버 자체와 관련된 나머지 요소를 유지 하는 빠른 해킹이 있습니다.

TL; DR : 이어 startxwin판독 하단의 라인있다 :

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

해당 줄을 다음과 같이 변경하십시오.

eval \"$server\" $display $serverargs

이제부터는 startxwin스크립트가을 호출 XWin.exe하지 않고 직접 호출 xinit합니다. 분명히 이것은 클라이언트 rc 스크립트를 비활성화 할 것이지만, 우리는 처음에는 스크립트를 원하지 않았습니다. 또한 X는 클라이언트 프로세스를 필요로하지 않고 계속해서 실행 상태를 유지함을 의미합니다 xinit.


답변

startxwin (.exe)으로 Cygwin X를 시작하는 습관을 들였습니다. 내 .startxwinrc 파일은 다음과 같습니다.

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

지금까지는 효과가있었습니다. 내가 얻는 유일한 오류는 다른 X 프로세스에 의해 여전히 디스플레이가 “열려”있는 것입니다. 이 오류는 X 서버가 기본적으로 모든 세션에 대해 생성하는 특정 파일을 지정합니다. Cygwin 사람들은 세션이 종료 될 때 삭제되지 않는다는 것을 알고 있습니다.

그래서 나는 이것을 “치료”하기 위해 별명을 썼습니다 :

alias freex='rm /tmp/.X0-lock'

나는 .bashrc와 .bash_profile 파일에 따옴표 사이에 똑같은 줄을 넣었다.

HTH.

BZT


답변