시작 메뉴의 “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. 프로세스는 다음과 같습니다.
- 당신은 전화
startxwin startxwin새.Xauthority파일과라는 파일을 만듭니다.serverauth.1234(1234X를 시작할 때마다 변경됨)startxwin일부 클라이언트 및 서버 매개 변수를 설정합니다startxwinxinit일부 선택적 쉘 스크립트 및 인증 파일에 대한 참조를 포함하여 클라이언트 및 서버 매개 변수를 사용하여 호출 합니다.xinitrc 스크립트 중 일부를 실행하여 X 서버를 시작합니다.xinit클라이언트 (일반적으로xterm) 또는 클라이언트 rc 스크립트를 시작합니다 . 우리는 이것을 피하고 싶다- 클라이언트를 닫거나 클라이언트 rc 스크립트가 완료되면
xinitX 서버를 종료하십시오. 6 단계를 피하면 이도 피해야합니다
실행할 수 있습니다 XWin.exe주변의 작업없이 배쉬 로그인 쉘 내에서 직접 startxwin및 xinit수행합니다. 이것의 주요 장점은 우리가 원하는 것처럼 동작한다는 것입니다 : 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