Slackware GNU/Linux 14.2を実行していますが、デフォルトではXサーバーを起動しません。気まぐれで、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
を実行できないのはなぜですか?画面の下で実行されているシェルではアクセスできない「生の」コンソールで、どのリソースにアクセスできますか?
startx
を実行することは、コンピューターの前にいる場合にのみ意味があります。コンソールの所有権をテストすることは、これを判断する1つの方法です。ご存知のように、screen
セッションで操作することでだまされる可能性があります。その場合、Xはありません。
一般的なLinuxシステムには、固定数の仮想端末/コンソール(VC)があり、デバイス/dev/tty1
、/dev/tty2
などが割り当てられています。これらはコンソールログインシェルに使用され、キーストロークCtrlを使用してアクセスできます。 -Alt-F1、Ctrl-Alt-F2など。
さらに、/dev/pts/19
のような名前の疑似端末(PTY)があります。これらは、Xtermなどのターミナルエミュレータ、SSHセッション、画面ウィンドウなどに使用されます。
次のように、シェルが実行されている種類を確認できます。
$ echo $TTY
/dev/pts/19
よくわからない理由で、Xorgのようなフルスクリーングラフィックソフトウェアを仮想コンソールに関連付ける必要があります。 Xは、VCデバイス(例:/dev/tty7
)に書き込む権限がないと実行できないため、おそらくこのデバイスを開いて、特定の要求をに送信するために使用することから始まります。カーネル。これらの要求はPTYデバイスでは理解されないと思います。
以下に、2つのVCデバイスのアクセス許可を示します。最初のデバイス、/dev/tty1
では、myusername
としてログインしており、ログインしたプログラムによって、デバイスが自分が所有するように変更されました。2行目の/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
説明どおり ここ 。この方法にはSudo
権限が必要ですが、最終的には、指定したVCにログインしたかのように、通常のユーザーとしてstartx
を実行します。
これを最初に理解するには、ターミナル、シェル、コンソールの違いを理解する必要があります。
初期の頃は物理デバイスだったので仮想コンソール。しかし、今ではそれは別個の専用デバイスではありません。したがって、これを仮想端末と呼びます。
最近のほとんどの端末は、厳密に言えば端末エミュレーターです。これは、UNIXライクなシステムの動作における一種の役割であると同時に、システムによって提供される基本的なインターフェイスです。
実際、GUIを含むすべてがその上に構築されています。[1]
口語的には、「ターミナル」とは、スタートポグラフィを備えたコンピュータネットワークのエンドポイントを指します。
次に、質問が発生します。 GUIはコンソール上に構築されているため。次に、コマンドライン操作を実行する場合はどうすればよいですか。その答えはターミナルです...コンソールをさらにエミュレートします。そして、そこにお気に入りのコマンドを入力しましょう。
[1]の説明
したがって、ここでは、GUIでさえコンソール上に構築されていることがわかります。コマンド
startx
を入力すると、さらに新しいXServerを開くように要求されます。それで、なぜGUIターミナルがあなたにそれをさせなければならないのかあなた自身で考えてください??? [あなたはあなたのXServerを壊したいですか??]。および本当にそのコマンドを強制したい場合..管理者権限でstartx
コマンドを実行するだけです。成功しますが、XServerランタイムを確実に中断します。
最後の質問に答えるために.. [画面の下で実行されているシェルではアクセスできない「生の」コンソールでアクセスできるリソースは何ですか?]
実際、これまで、Xserverで実行されている端末からリソースにアクセスできないケースは見られませんでした。内部のXserverGUIターミナルからすべてのリソースにアクセスできる必要があります(これも通常のコンソールが提供するすべてのニーズを満たすように設計されているためです!!!)。
しかし、その枝に正確に座っているときに木の枝を切るのと同じ結果になるコマンドを実行すると、間違いなくエラーが発生します。
コンピュータサイエンスの分野ではすべてが理にかなっています。