48
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Xウィンドウマネージャっているの?

Last updated at Posted at 2018-03-27

デスクトップの壁紙に好きな画像を表示したり、Xアプリを[×]ボタンで閉じたり、マウスを使ってウィンドウサイズを変えたり。これらはXウィンドウマネージャの仕事です。
とても重要な仕事をしますが、Xサーバとは、どのような関係なのでしょうか?

結論を言うと、Xサーバから見るとXウィンドウマネージャは他のXアプリと大差なく、Xウィンドウマネージャが無くてもX Window Systemとして成り立ちます。
しかし、使い勝手は悪くなるし、Xウィンドウマネージャを必要とする機能は当然動きません。

それを承知の上で、今回、XウィンドウマネージャなしでXサーバを立ち上げたいと思います。
 Xサーバ(startx)の起動設定、
 および、コマンドでのウィンドウ操作に関する文章です。
 使用OS:ArchLinux(VirtualBoxゲスト)

XWindowSystem.png

前提

下記のパッケージ等は、事前にインストールされているという前提で話を進めます。
・xorg-server
・xorg-xinit
・xorg-xeyes
・xorg-xclock
・xorg-xwininfo
・xdotool
・xterm
・openbox
・xorg-twm

ヒント、ArchLinuxでtwmを使う場合、以下のパケージをインストールしないとエラーが出ます。

sudo pacman -S xorg-fonts-100dpi

Xサーバ起動

ttyコンソールのログイン表示がされている状態(Xサーバが起動されていない状態)から話を始めます。
login.png

ログイン後、
.xinitrcを作成するため、以下のコマンドを入力してください。

echo "xterm" > ~/.xinitrc

#注意、.xinitrcが存在する場合、上書きします。

Xサーバを起動するために次のコマンドを打ちます。

startx

xterm.png

図のように.xinitrcに記述したxtermが現れます。2、3秒で起動したと思いますが、もう、Xサーバ管理下の画面です。
しかし、Xウィンドウマネージャが起動されていないため、xtermの上段にはタイトルバーが表示されていません。マウスを使っての移動やウィンドウサイズの変更など何もできません。

今のキーマップはUSキーボードになっているはずです。
試しに; : [ ]辺りのキーを押してみて下さい。
キーの刻印とは違う文字が表示されるはずです。

setxkbmap -model jp106 -layout jp,us

と打つことで、日本語キーボードに変わります。

Xアプリを動かす

次に

xterm &

と打ってみて下さい。
新しいxtermが起動されているはずですが、同じ位置に表示されているので、見分けが付きません。

xwininfo -tree -root

と打つと

xwininfo: Window id: 0x2bd (the root window) (has no name)

  Root window id: 0x2bd (the root window) (has no name)
  Parent window id: 0x0 (none)
     2 children:
     0x600022 "user001@ARCH64-PC:~": ("xterm" "XTerm")  484x316+0+0  +0+0
        1 child:
        0x60002d (has no name): ()  484x316+0+0  +1+1
     0x400022 "user001@ARCH64-PC:~": ("xterm" "XTerm")  484x316+0+0  +0+0
        1 child:
        0x40002d (has no name): ()  484x316+0+0  +1+1

と筆者の環境では表示されました。

0x2bd (the root window)とあります。このXサーバのルートウィンドウのIDが0x2bdだと分かります。
そのルート配下に2つの子ウィンドウがあります。
筆者の環境では0x600022と0x400022です。
これが、.xinitrcに記述したxtermと、先ほどキー入力したxtermです。

一つ動かしてみましょう。

xdotool windowmove 0x400022 100 320

ウィンドウサイズを変えてみましょう。

xdotool windowsize 0x400022 500 250

いかがですか?Xウィンドウマネージャが無くてもXサーバが使えます。

当然、

xclock &
xeyes &
firefox &

など、別のXアプリも実行することができます。

screen01.png

(firefoxのメニュー表示はうまく動作しませんでした。多分、Xウィンドウマネージャの機能を使っているのでしょう)

Xウィンドウマネージャを起動する

OpenBoxの起動

ここで、xtermから

openbox-session

と打ってみます。

screen02.png

図のように、各Xアプリの上段にタイトルバーが現れました。
各Xアプリを動かしたり、閉じたり、普段と変わらない操作ができるようになりました。

OpenBoxの終了

デスクトップ背景を右クリックするとOpenBoxのメニューが現れます。

menu01.png

そのメニューの一番下にあるLog Outをクリックすれば、OpenBoxが終了します。
試しに押してみて下さい。押すとOpenBoxが終了すると同時にXアプリの上段からタイトルバーが消えるのが分かります。

Twmの起動

次に

twm

と入力すると、各Xアプリのタイトルバーが、twmが表示するものに変わりました。

screen03.png

いかがですか?Xウィンドウマネージャを変えることでデスクトップ画面の見た目と操作性がまったく違うものになります。

Xサーバを終わらせる

Xウィンドウマネージャを終わらせても、Xサーバは終わらない。では、Xサーバはどうすれば終わるのでしょうか?それは、最初(.xinitrc)に実行したxtermで

exit

と打てばXサーバは終了し、最初のログインした画面に戻ります。

最後に

今回、Xウィンドウマネージャが無くてもXアプリが動くことを試しました。
XウィンドウマネージャはXアプリを動かした後からでも起動できることを試しました。
この文章はあくまで実験的なものです。Xウィンドウマネージャを起動しない理由もXアプリを実行した後で起動する理由もないので、通常はXアプリより先にXウィンドウマネージャを起動します。

2020-01-26追記 続き、超かんたん、自作ウィンドウマネージャの作り方

48
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?