スクリーンセッション内で '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ランニングはコンピュータの前にあるときにのみ意味があります。コンソールの所有権をテストすることはこれを確認する1つの方法です。見つかったとおり、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私のプログラムにログインすると、デバイスが自分が所有しているデバイスに変更されたことがわかります。 2行目はまだログインしているプロンプトを表示しているためです/dev/tty2root

$ 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の組み合わせでアクセスできます。

仮想コンソールは最初物理デバイス。しかし、今は別の専用デバイスではありません。だから私たちはそれを仮想端末と呼びます。

厳密に言えば、今日のほとんどの端末は端末エミュレータです。 Unixシリーズシステムの作業における役割であり、システムが提供する基本インタフェースでもある。

実際、GUIを含むすべてがその上に構築されています。 [1]

言い換えれば、「ターミナル」は、スタートポロジを持つコンピュータネットワークのエンドポイントを意味すると言うことができます。

これで問題が発生します。 GUIはコンソールに構築されているためです。それでは、いくつかのコマンドラインタスクを実行するにはどうすればよいですか?答えは端末です。コンソールをさらにシミュレートし、お気に入りのコマンドを入力できるようにする端末です。

[1]の説明

したがって、ここでは、GUIもコンソールに構築されていることを知っています。コマンドを入力すると、startx新しいXserverを開くように再要求します。もしそうなら、なぜGUI端末がこれを許可するのかを自分に尋ねてください。 ? ? [XServerを壊したいですか? ? ]。そしてコマンドを強制的に実行するには、startx管理者権限でコマンドを実行します。 成功しますが、Xserverランタイムは間違いなく中断されます。

そして最後の質問に答えると.. [画面の下で実行されているシェルではアクセスできませんが、「raw」コンソールではどのリソースにアクセスできますか? ]

実際、これまでXserverで実行されている端末を介してリソースにアクセスできない状況は見たことがありません。内部のXserver GUI端末を介してすべてのリソースにアクセスできる必要があります。

ただし、小枝に座っている間に小枝を切り取るなどの結果を持つコマンドを実行すると、エラーが発生します。

コンピュータサイエンスでは、すべてが意味があります。

関連情報