시작 메뉴의 “XWin 서버”링크를 사용하거나 startxwin
Cygwin 셸에서 실행하여 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
(1234
X를 시작할 때마다 변경됨)startxwin
일부 클라이언트 및 서버 매개 변수를 설정합니다startxwin
xinit
일부 선택적 쉘 스크립트 및 인증 파일에 대한 참조를 포함하여 클라이언트 및 서버 매개 변수를 사용하여 호출 합니다.xinit
rc 스크립트 중 일부를 실행하여 X 서버를 시작합니다.xinit
클라이언트 (일반적으로xterm
) 또는 클라이언트 rc 스크립트를 시작합니다 . 우리는 이것을 피하고 싶다- 클라이언트를 닫거나 클라이언트 rc 스크립트가 완료되면
xinit
X 서버를 종료하십시오. 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