스크린 세션 내에서 'startx'를 실행할 수 없습니다

스크린 세션 내에서 'startx'를 실행할 수 없습니다

저는 기본적으로 X 서버를 시작하지 않는 Slackware GNU/Linux 14.2를 실행하고 있습니다. 변덕스럽게 세션 중에 startx실행을 시도했는데 screen경고가 표시되었습니다.

/usr/libexec/Xorg.wrap: Only console users are allowed to run the X server
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
Couldn't get a file descriptor referring to the console

startx스크린 세션 내에서 실행할 수 없는 이유는 무엇입니까 ? "원시" 콘솔에서는 액세스할 수 있지만 화면 아래에서 실행되는 셸에서는 액세스할 수 없는 리소스는 무엇입니까?

답변1

startx달리기는 컴퓨터 앞에 있을 때만 의미가 있습니다. 콘솔 소유권을 테스트하는 것은 이를 확인하는 한 가지 방법입니다. 발견한 대로 screen세션 내에서 작동하면 스푸핑될 수 있습니다. 이 경우에는 X가 없습니다.

답변2

일반적인 Linux 시스템에는 장치 /dev/tty1등 으로 할당되는 고정된 수의 가상 터미널/콘솔(VC)이 있습니다. /dev/tty2이는 콘솔 로그인 셸에 사용되며 Ctrl-Alt-F1, Ctrl-Alt-F2 등의 키를 사용하여 액세스할 수 있습니다.

/dev/pts/19또한 Xterm, SSH 세션, 화면 창 등과 같은 터미널 에뮬레이터에 사용되는 PTY(의사 터미널)가 있습니다 .

다음과 같이 쉘이 어떤 유형에서 실행되고 있는지 확인할 수 있습니다.

$ echo $TTY
/dev/pts/19

나에게 완전히 명확하지 않은 이유 때문에 Xorg와 같은 전체 화면 그래픽 소프트웨어는 가상 콘솔과 연결되어야 합니다. X는 VC 장치에 쓸 수 있는 권한(예: /dev/tty7)이 없으면 실행할 수 없으므로 먼저 장치를 열고 이를 사용하여 커널에 일부 요청을 보낼 수 있습니다. PTY 장치가 이러한 요청을 이해하지 못하는 것 같습니다.

아래에서 두 VC 장치에 대한 권한을 볼 수 있습니다. 첫 번째에서는 /dev/tty1로 로그인했는데 myusername내 프로그램에 로그인하면 장치가 내가 소유한 장치로 변경된 것을 볼 수 있습니다. 두 번째 줄은 여전히 ​​로그인 프롬프트를 표시하기 때문에 /dev/tty2속합니다 .root

$ ls -al /dev/tty{1,2}
crw------- 1 myusername tty 4, 1 Dec  9 05:47 /dev/tty1
crw--w---- 1 root       tty 4, 2 Dec  9 05:11 /dev/tty2

지정된 VC에서 실행 하고 싶지만 startx직접 액세스할 수 없는 경우(예: SSH를 통해 로그인하거나 화면 창에 대화하는 경우) 다음을 사용할 수 있습니다 systemd-run.여기. 이 방법에는 권한이 필요 하지만 궁극적으로 는 지정된 VC에 로그인한 것처럼 일반 사용자로 실행 sudo하게 됩니다 .startx

답변3

이를 이해하려면 먼저 차이점을 이해해야 합니다.터미널, 셸 및 콘솔.

  • 단말기쉘을 실행하는 프로그램으로, 물리적 장치(터미널이 키보드가 있는 모니터가 되기 전에는 텔레타이프라이터였습니다)였지만 그 개념이 Gnome-Terminal과 같은 소프트웨어로 옮겨졌습니다.
  • Gnome-Terminal 실행시 검은창이 뜹니다껍데기그래서 우리는 명령을 실행할 수 있습니다.
  • 편안물리적 장치이기도 한 특수 터미널입니다. Linux의 예가상 콘솔Ctrl + Alt + F1 ~ F7 조합을 통해 액세스할 수 있습니다.

가상 콘솔은 초기에는물리적 장치. 하지만 이제는 별도의 전용 장치가 아닙니다. 그래서 우리는 그것을 가상 터미널이라고 부릅니다..

엄밀히 말하면 오늘날 대부분의 터미널은 터미널 에뮬레이터입니다. 유닉스 계열 시스템의 작업에 있어서의 역할이자 시스템이 제공하는 기본 인터페이스이기도 하다.

실제로 GUI를 포함한 모든 것이 그 위에 구축됩니다. [1]

구어적으로 "터미널"은 스타 토폴로지를 가진 컴퓨터 네트워크의 끝점을 의미한다고 말할 수 있습니다.

그러면 문제가 발생합니다. GUI는 콘솔에 구축되어 있기 때문입니다. 그렇다면 몇 가지 명령줄 작업을 수행하려면 어떻게 해야 할까요? 대답은 터미널입니다. 콘솔을 더욱 시뮬레이션하고 즐겨 사용하는 명령을 입력할 수 있게 해주는 터미널입니다.

[1]의 설명

따라서 여기서 우리는 GUI도 콘솔에 구축되어 있다는 것을 알고 있습니다. 명령을 입력하면 startx새 XServer를 열도록 다시 요청합니다. 그렇다면 왜 GUI 터미널이 이것을 허용해야 하는지 스스로에게 물어보세요. ? ? [XServer를 깨뜨리고 싶나요? ? ]. 그리고명령을 강제로 실행하려면 startx관리 권한으로 명령을 실행하면 됩니다. 성공할 것이지만 XServer 런타임은 확실히 중단될 것입니다.

그리고 마지막 질문에 답하자면.. [화면 아래에서 실행되는 셸에서는 액세스할 수 없지만 "원시" 콘솔에서는 어떤 리소스에 액세스할 수 있습니까? ]

실제로 지금까지 Xserver에서 실행되는 터미널을 통해 리소스에 접근할 수 없는 상황은 본 적이 없습니다. 내부 Xserver GUI 터미널을 통해 모든 리소스에 액세스할 수 있어야 합니다.. (이 터미널은 또한 일반 콘솔이 제공해야 하는 모든 요구 사항을 충족하도록 설계되었기 때문입니다!!!)..

그러나 나뭇가지에 앉아 있는 동안 나뭇가지를 자르는 것과 같은 결과를 갖는 명령을 실행하면 오류가 발생하기 마련입니다.

컴퓨터 과학에서는 모든 것이 의미가 있습니다.

관련 정보