web-dev-qa-db-ja.com

画面セッション内から `startx`を実行できません

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を実行できないのはなぜですか?画面の下で実行されているシェルではアクセスできない「生の」コンソールで、どのリソースにアクセスできますか?

3
Gregory Nisbet

startxを実行することは、コンピューターの前にいる場合にのみ意味があります。コンソールの所有権をテストすることは、これを判断する1つの方法です。ご存知のように、screenセッションで操作することでだまされる可能性があります。その場合、Xはありません。

0
DepressedDaniel

一般的な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を実行します。

0
Metamorphic

これを最初に理解するには、ターミナル、シェル、コンソールの違いを理解する必要があります。

  • Terminalはシェルを実行するプログラムであり、以前は物理デバイスであり(端末がキーボード付きのモニターになる前はテレタイプでした)、その概念はGnome-Terminalなどのソフトウェアに移されました。
  • Gnome-Terminal、Shellを実行する黒いウィンドウが表示されるので、コマンドを実行できます。
  • コンソールは特別な種類の端末であり、物理デバイスでもありました。 Linuxの例では、仮想コンソールがあり、Ctrl + Alt + F1からF7の組み合わせでアクセスできます。

初期の頃は物理デバイスだったので仮想コンソール。しかし、今ではそれは別個の専用デバイスではありません。したがって、これを仮想端末と呼びます。

最近のほとんどの端末は、厳密に言えば端末エミュレーターです。これは、UNIXライクなシステムの動作における一種の役割であると同時に、システムによって提供される基本的なインターフェイスです。

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

口語的には、「ターミナル」とは、スタートポグラフィを備えたコンピュータネットワークのエンドポイントを指します。

次に、質問が発生します。 GUIはコンソール上に構築されているため。次に、コマンドライン操作を実行する場合はどうすればよいですか。その答えはターミナルです...コンソールをさらにエミュレートします。そして、そこにお気に入りのコマンドを入力しましょう。

[1]の説明

したがって、ここでは、GUIでさえコンソール上に構築されていることがわかります。コマンドstartxを入力すると、さらに新しいXServerを開くように要求されます。それで、なぜGUIターミナルがあなたにそれをさせなければならないのかあなた自身で考えてください??? [あなたはあなたのXServerを壊したいですか??]。および本当にそのコマンドを強制したい場合..管理者権限でstartxコマンドを実行するだけです。成功しますが、XServerランタイムを確実に中断します。

最後の質問に答えるために.. [画面の下で実行されているシェルではアクセスできない「生の」コンソールでアクセスできるリソースは何ですか?]

実際、これまで、Xserverで実行されている端末からリソースにアクセスできないケースは見られませんでした。内部のXserverGUIターミナルからすべてのリソースにアクセスできる必要があります(これも通常のコンソールが提供するすべてのニーズを満たすように設計されているためです!!!)。

しかし、その枝に正確に座っているときに木の枝を切るのと同じ結果になるコマンドを実行すると、間違いなくエラーが発生します。

コンピュータサイエンスの分野ではすべてが理にかなっています。

0
sanjeev