アットウィキロゴ

X Window System 関連に関する疑問や質問。


X って何?

ディスプレイにGUIを表示するウィンドウシステムの1つ。

X はなんて呼べばいいの?

X の man ページ によれば以下のどれかの名称で呼ぶことが推奨されています。

  • X
  • X Window System (X ウィンドウシステム)
  • X Version 11 (X バージョン 11)
  • X Window System, Version 11 (X ウィンドウシステム, バージョン 11)
  • X11

「X という名前の Window System」なので「X Window」と略すと変です。「X Window s 」と書くと、かすりもしない上にやたら煽られます。

X の公式サイトはどこですか?

XFree86 バージョン 4.4.0 以降でのライセンス変更により、XFree86 4.3.0 を元に開発が分岐された X.Org がディストリビューションで公式に採用される傾向にあります。

X に関する公式のマニュアルはどこですか?

以下を参照。

X.Org

GUI ツールキット (X ツールキット) って何?

X で GUI アプリを作るためのウィジェット(部品)ライブラリです。
X では、GUI の仕様が最低限までしか定められていません。そこで、Xlib 等の低レベルなライブラリを直接触らないですむように、楽に開発できるようなツールキットが別に作られました。
UNIX では標準的に Motif というツールキットが使われていました。ただし Motif は商用だったので、Motif で作ったソフトはそれ自体はフリーでも Motif を購入しないと使えないという、非常に微妙なものになってしまっていました。
そこで、当時 Motif で作られていた GIMP の開発メンバーが、代わりに生み出したのが GIMP Toolkit(GTK+) です。これが後の GNOME で使われました。
さらに、標準的なツールキットが存在しない Linux のバラバラな GUI 状況をどうにかしようと、Trolltech という会社が作ったのが Qt(Q toolkit) です。Qt は KDE で採用されました。
GTK+ と Qt が現在の Linux における2大ツールキットになっています。

このビデオチップ (カード) は対応していますか?

X.Org / XFree86 の公式マニュアルを参照してください。
メーカー公式または非公式にドライバや情報を公開している事もあります。

メーカー製ドライバのインストール

Linuxカーネル付属のオープンソースのドライバとは別に、ビデオチップによってはメーカー製ドライバが提供されている場合があります。最近はダウンロードレポジトリが用意されているディストリビューションが多いので、これを利用するのがお勧めです。
レポジトリが用意されてない場合は、チップメーカーの公式サイトからダウンロードする必要がありますが、カーネルやlibcをアップデートする度にビデオドライバを再インストールしなければならず面倒です。以下ではメーカーサイトからのインストール方法を説明します。

NVIDIA

https://www.nvidia.com/ja-jp/drivers/unix/ から、ビデオチップの種類と Linux の区別に該当するドライバをダウンロードします。
nVIDIAのインストーラは X を止めないと動きません。ネットワーク接続は必要です。

$ sudo systemctl isolate multi-user.target

と入力して一時的にテキストモードにしてからインストーラを起動してください。
Systemd フリーなディストリビューションの場合は、X のログインマネージャを止めてテキストモードにします。例えば SLiM の場合は以下のコマンドです。

$ sudo service slim stop

インストール終了後に再起動し、つぎのコマンドで動作確認します。

$ nvidia-smi

x の設定には NVIDIA X Server Setting Tool を利用してください。メニューの項目([アプリケーション]→[システムツール]など)に無い場合、つぎのコマンドで起動します。

$ sudo -E nvidia-settings

NVIDIA製ドライバでデュアルモニタを使用する

NVIDIA 謹製ドライバは XRandR に対応していないので、NVIDIA X Server Setting Toolの「X Server Display Configuration」で「Enable Xinerama」を指定するか、Xinerama非対応のウインドウマネージャでも「TwinView」を指定することで、複数のモニタを1枚のように扱えます。しかしウインドウマネージャのメニュー等が扱いづらいという感じる方は、XRandR とは別のデュアルモニタ対応機構を持っている KDEXFce4を試してみるのも手です。

Ubuntu Weekly Recipe デュアルディスプレイを使う(gihyo.jp)
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0048?page=3

NVIDIA製ドライバで動画再生時にちらつきが出る

nvidia-settings で、ちらつきの出る X Screen の「Sync to VBlank」の項目にチェックを入れてみてください。

nVIDIAってどうよ

ATI

https://www.amd.com/ja/support/download/linux-drivers.html から、Linux の区別とビデオチップの種類に該当するドライバをダウンロードします。
ATIのインストーラはGUIのままインストールできますが、いまのところ自動ビルドに対応しているディストリビューションは RHEL や Ubuntu などです。それ以外のディストリビューションではインストーラのスクリプトの修正などが必要になる場合があります。
GUIの設定ツールに LACTがあります。

ATI Part2
http://pc11.2ch.net/test/read.cgi/linux/1241136718/
ATI
http://pc11.2ch.net/test/read.cgi/linux/1189481591/
ATIってどうよ
http://pc11.2ch.net/test/read.cgi/linux/1062191844/


設定

X の設定をやり直したい。

昔は手書きの設定ファイルが必須でしたが、X の設定は自動化が進んで、いまや xorg.conf なしがデフォルトです。自動設定を基本に、/etc/X11/xorg.conf.d/ に差分だけ追加するのが、標準的な設定手法です。

デスクトップ環境の設定マネージャ

GNOME gnome-control-center
KDE kcmshell6 kcm_kscreen
XFCE4 xfce4-display-settings
MATE mate-display-properties

Debian 系付属設定ツール (dpkg-reconfigure)

今ではキーボードやロケールの設定に使われます。

$ sudo dpkg-reconfigure keyboard-configuration
$ sudo dpkg-reconfigure locales

X の設定の雛型を自動作成する場合

X の -configure オプションで設定の雛型を作り、それを元に編集する方法もあります。root で Xorg -configure などと入力すると /root に雛形の xorg.conf.new ができるので、編集して /etc/X11 辺りに移動しましょう。

X の設定を直接編集する場合

設定の書式については Gentoo Linux ドキュメント -- X サーバー設定ガイド などを参照。

X だけ試しに起動させてみたい。(xinit)

X の設定を変更した時、純粋に X が起動するかどうかだけ確認したい場合は、xinit と実行して起動します。ウィンドウマネージャなどの設定を無視して、初期状態の X だけが起動します。
終了するにはマウスのカーソルをターミナルに合わせて、exit と入力します。

ホイールマウスを設定したい

Linux のデスクトップ環境にはホイールマウスのスクロール量の設定項目が無いことが多いようです。そこで imwheel をインストールします。

# sudo apt install imwheel

設定ファイル ~/.imwheelrc を書きます。マウスホイールの「上(Button4)」「下(Button5)」の移動量は 3 がデフォルトです。速くしたい場合は 5 や 8 にしてみて下さい。

# すべてのアプリケーション(.*)を対象にする
".*"
None,      Up,   Button4, 3
None,      Down, Button5, 3

5ボタンマウスの場合は、「進む」「戻る」ボタンを妨害しないように、以下のオプションを付けるのが普通です。これを ~/.xinit の exec より前に追記すると、X起動時に常駐するようになります。

imwheel -b "4 5"

5ボタンマウスを使いたい

(1) libinput の標準設定

X の共通ドライバ libinput では、標準で X11 のボタン番号が以下のように割り当てられます。大半の多ボタンマウスは、挿すだけでボタンが機能するでしょう。

Button 1 左クリック
Button 2 ホイールクイック
Button 3 右クリック
Button 4 ホイール上回転
Button 5 ホイール下回転
Button 6 チルト左など
Button 7 チルト右など
Button 8 サイド(戻る)
Button 9 サイド(進む)

(2) ボタンの順番を入れ換える (.Xmodmap に追記)

たとえば「戻る」「進む」のボタンを入れ替えたい場合は、xmodmap コマンドで次のように設定します。

$ xmodmap -e "pointer = 1 2 3 4 5 6 7 9 8"

(3) ログインしなおし、イベントの発生状況を確認する。(xev)

xev を実行し、xev のウィンドウでサイドボタンを押してみて、何番ボタンでイベントが発生しているかを確かめる。xev をオプションなしで実行すると、座標が大量に出て分からなくなるので、ボタン(とホイール)に絞るオプションを付けます。

$ xev -event button

マウスの名前やドライバのプロパティは xinput コマンドで確認できます。

$ xinput list

モニターのリフレッシュレートを変更したい(cvt)

ノートPC や HDMI などのディスプレイ接続では、モニター側から EDID というハードウェア情報が送られてきて、Xorg はそれを信用して設定します。だから昔のような表示ずれの問題はほぼ無くなってますが、リフレッシュレートを変えたい場合などに設定できる方法を記します。
※ここでは、1920x1080 のディスプレイでリフレッシュレートを 60Hz に変更する方法を例にやります。以下のコマンドを実行します。うまく表示できていれば、~/.xinitrc に追記します。

xrandr --newmode $(cvt 1920 1080 60 | grep Modeline | sed 's/Modeline //')

GUI ログインの設定でインストールしたが、コンソールログインに変えたい

デフォルトのログイン方法をテキストモードに変える方法です。

簡単な説明

Systemd のデフォルトのターゲットを multi-user.target に切り替えます。

$ sudo systemctl set-default multi-user.target

SysVinit の Debian 系: update-rc.d を使ってログインマネージャの起動を停止する。

PCLinuxOS、Slackware: root になって /etc/inittab の id=数字 の行を編集し、起動するランレベルを変える。id=3 にすると CUI、id=5 にすると GUI (ディスプレイマネージャ) で起動される。

詳しい解説

「GUI ログイン」を担当しているのは lightdm, sddm, slim などの「ディスプレイマネージャ(DM)」という種類のソフトです。これらが OS 起動時に起動されるため「GUI ログイン」になっています。

  • ps -ef | grep dm と実行するとどのディスプレイマネージャが起動しているか分かります。

OS 起動時にDMが起動されないようにすれば、「CUI (コンソール) ログイン」になる。

Systemd

Systemd の multi-user.target は、runlevel3.target が graphical.target になっている Debian や Ubuntu でも使えます。
Systemd のターゲットは、複数のサービスや他のターゲットの同期ポイントにすぎません。システム状態を静的に強制する昔のランレベルとは仕組みが異なります。Systemd のターゲットがテキストモードと GUI を切り替えられるのは、multi-user.target と graphical.target が、後者が前者に依存する親子関係になっているからです。

$ sudo systemctl set-default multi-user.target

というコマンドは、デフォルトで multi-user.target まで起動することを決めています。
graphical.target から一時的にテキストモードにするには、

$ sydo systemctl isolate multi-user.target

というコマンドを実行します。isolate(孤立させる)というコマンドで依存関係を断ち切ることで、GUI を閉じているわけです。

SysVinit の deb 系(AntiX、Devuanなど)

CUI / GUI の区別なくランレベル 2 で起動するので、update-rc.d を使ってDMの起動を停止してください。具体的には(GDMの例)、

# update-rc.d -f gdm remove

とすることで、/etc/init.d/ からリンクされている起動設定を削除することができます。元に戻したい場合もコマンド一発で可能です。

頻繁に CUI と GUI を行き来するのなら、未使用のランレベル (3 など) にDMを使わない設定をしておき、inittab のランレベルを切り替えても良いでしょう。

  • ログインマネージャー greetd を利用することで、/etc/X11/Sessions/ の内容を反映しつつコンソールログインとの切り替えも自由になります。

PCLinuxOS・Slackware系: デフォルトのランレベルを3に変更

起動時のランレベルが 5 だとDMが起動し、ランレベルが 3 のときは起動しないように設定されています。

  • /usr/sbin/chkconfig --list と実行すると各デーモンの起動ランレベルを確認できます。

OS 起動時のランレベルは /etc/inittab の id=数字 で設定されているので、これを 3 に変更して再起動すればOK。

今後特に GUI ログインする必要がなければ、DMを含むパッケージをアンインストールしてしまっても大丈夫です。

一時的にコンソールログインを利用するには

一時的にコンソールログインを利用する場合は Ctrl+Alt キーと F3~F6 キーのどれかを押してください。 コンソールログイン画面に切り替えられます。(GUI ログインの画面への復帰は Ctrl+Alt+F2 キー)
Systemd フリーなディストリビューションの場合は、昔ながらの Ctrl+Alt+F1〜F6 で CUI 、Ctrl+Alt+F7 で GUI 復帰が多いです。
ディスプレイマネージャが起動している状態だと、コンソールでログインしても startx 等で X を起動することができません。X が必要な場合はコンソールからログアウトして GUI ログインの画面に戻ってログインしてください。

フォントキャッシュを更新したい (fc-cache)

近年の X では、Fontconfig というシステムを介してフォントを描画しています。フォントを追加したら、フォントキャッシュを更新することで、新しいフォントが使えるようになります。以下のような書式です:

$ fc-cache -fv

X上でキーボードのオートリピートを使いたい/止めたい (xset)

xset r on でオートリピートが有効になります。xset r off とすると無効になります。
$HOME/.xinitrc などにでも書いておいてください。

X上でWindowsキーを使いたい/再設定したい

Windows キーの押下を検知した際にどう振舞うかを ~/.xinitrc などに設定しておけば使えます。
ITMediaのX上でWindowsキーを使いたいを参照のこと。

XInput にゲームコントローラーを使いたい。(jstest-gtk)

Steam や各種エミュレーターなど、近年の Linux ゲームでは、SDL2 というライブラリで、コントローラーのデータベースを読んで自動設定してくれます。すぐ遊べるでしょう。
ゲームコントローラーの細かい調整は、Xだけで実現するよりも jstest-gtk を利用するのが簡単です。画面上のメーターで軸ズレ調整などができます。ボタンの割り当てをカスタマイズしたい場合は、Steam のコントローラー設定を利用するか、AntiMicroX をインストールします。

$ sudo apt install jstest-gtk antimicrox

~/.Xresources やら ~/.Xdefaults やら ~/.xsession やら ~/.xinitrc やらわけが分かりません。

~/.Xresourcesと~/.Xdefaultsって、どう違うんですか? を参照の事。
これらのファイルの設定は、いまどきのデスクトップ環境では無視されるのが普通です。
軽量なウインドウマネージャやレガシーアプリ(rxvt-unicode や xterm など)では、.Xresources(新)と.Xdefaults(旧)は X の見た目の設定に、.xsession はログイン後の起動スクリプトとして使われることはあります。


トラブル

X の動作が重過ぎるんですが。

X が動いたのはいいものの、滅茶苦茶重くてやってられん。そんなときはとりあえず以下の項目を調べてみよう。

OpenGL の動作を調べる(glxinfo)

$ sudo apt install mesa-utils
$ glxinfo | grep -E "(direct rendering|OpenGL vendor|OpenGL renderer)"

以上を実行して、direct rendering:Yes と表示されれば、ハードウェアアクセラレーションは正常に効いてます。
OpenGL renderer の項目にビデオカード名がない(llvmpipe や swrast になっている)場合は、アクセラレーションが効いてません。

DRI が使われているか調べる (glxgears)

glxgears を実行すると、歯車のアニメーションの秒間フレーム数(FPS)が表示されます。カクカクだとアクセラレーションが効いてません。モニターの垂直同期(V-Sync)が設定されてると、リフレッシュレート(60fps など)に固定されます。

動画のハードウェアデコードの確認(vainfo)

Web ブラウザの動画再生で VA-API のハードウェアデコードが効いてるか調べます。正しく認識されれば、サポートしているコーデックが表示されます。NVIDIA 純正ドライバの場合は vdpauinfo です。

$ sudo apt install vainfo
$ vainfo

ウィンドウマネージャを軽いのに変える

KDE とか GNOME はいろいろと重たいので、そういうのを使ってたらもう少し軽い奴を試してみるとか。

円記号「¥」がバックスラッシュ「\」になっています!オカシイです!

「\」が Windows では「¥」と見えるのに、X で見ると「\」となっている。
これは正常です。表示に使うフォントで割り当てられている文字が違うだけでデータ的には同じです。
Windows 向けフォントでは円記号(¥)、X 向けフォントではバックスラッシュ(\)であることが多い模様。X で¥と表示されるフォントもたまにあります。
コマンド使用時やプログラミング時には表示が「¥」となっていても「バックスラッシュ」と呼ぶことが多いです。
元々の規格では「\」などいくつかの文字は各国ごとに任意に割り当てを変えていいことになっていました。そこで日本の規格で「\」の位置に「¥」を割り当てたのが原因です。

X アプリ間でコピー&ペーストできません!!

昔ながらの X クライアントは「コピー&ペースト」でなくて、「領域選択 (囲って) &ペースト」。

Windows の場合

  1. 領域を選択する (文字列を囲む)
  2. 右クリックメニュー>コピー (Ctrl+c) でコピー。
  3. 貼り付け先にカーソルをあわせる。
  4. 右クリックメニュー>ペースト (Ctrl+v) でペースト。

X の場合

  1. 領域を選択 (文字列を囲む) ← この状態ですでにバッファに入っている
  2. 貼り付け先にカーソルをあわせてマウスの真ん中ボタンをクリック (ホイールマウスならホイールをクリック。2ボタンマウスなら同時押し。)

その他使っている GUI ツールキットで Windows 風の操作 *も* 使えることもある。(これは X のコピペとは無関係に動作)
Emacs や Bash 等 GNU ソフトウェアではカット&ペーストという名称が普及する前からこれらが "kill" (キル), "yank" (ヤンク) と呼ばれていたりするので、Web 上の解説や man ページなどを読むときは注意しよう。

プログラムが固まって反応しなくなったのでマシンを再起動したいんですが

固まる原因となったプログラムを強制的に終了させてみよう。

ターミナルエミュレータ上でコマンドラインのプログラムが無反応

そのウィンドウ上で

  • Ctrl+q キーを押す (Ctrl+s キーを押してしまってた場合の復帰)
  • Ctrl+c キーを押す
  • マウスで閉じる

でも単に処理中で入力を受け付けないだけだったということが多々…

X アプリでマウスのクリックもキーボードの入力も効かない (コマンドラインから kill で強制終了)

Ctrl+Alt キーと F3~F6 キーのどれかを押すとコンソールログイン画面に切り替えられます。(X 画面への復帰は Ctrl+Alt+F2 キー)
あるいは固まったマシンが LAN などネットワークでつながっているなら、別のマシンから SSH, Telnet などでログインすることもできるかもしれません。
無事ログインしたら、原因と思われるプログラムの PID (プロセス番号) を ps aux と入力して探し、kill PID と入力して強制終了させます。それでもだめなら kill -9 PID とします。

$ ps aux
 PID TTY          TIME CMD
 404 pts/1    00:00:00 bash
 460 pts/1    00:00:00 ps
 480 pts/1    00:00:00 X
$ kill 480

関連: コマンドを強制終了する(2)
(コマンド入力が可能だということでここで shutdown -r now と入力してリブートするのも可。)

kill でもどうにもならない (Xごと強制終了)

魔法の SysRQ キーと呼ばれるキーコンビ (Alt+SysRQ+α) が有効になってるかもしれない。JF の 神秘のSYSRQキー文書 に使い方は書いてあるので、大事に至る前に前もって読んでおいて設定しておくのも良いかも。

ぽちっとな

さんざん手を尽くしたなら祈りながら電源スイッチに全てを託そう。神の御加護を。データが無事である事を祈る!

X のログってどこにあるの?

Xorg.0.log など、それっぽいファイルが ~/.local/share/xorg にあります。
そこに無ければ、journalctl -b /usr/bin/Xorg を実行してみて下さい。
Wayland 環境では X 自体がないので当然出力されません。Xwayland のログが残ることはあります。
Systemd フリーなディストリビューションでは、昔ながらの /var/log ディレクトリにあることが多いです。


その他

X上でスクリーンショットを撮りたい。

方法はいろいろ。

デスクトップ環境標準

デフォルトで PrintScreen キーに割り当てられてます。

GNOME gnome-screenshot
KDE spectacle
Xfce4 xfce4-screenshooter
MATE mate-screenshot

Scrot

Scrot は、コマンドラインからでも柔軟に使える軽量ツールで、LXDE や Raspberry Pi などでの定番です。

$ sudo apt install scrot

flameshot

flameshot は、スクリーンショットを撮ったその場で矢印・モザイク・テキストなどを描き込めるツールで、ブログや SNS でよく見かけます。

現在の dpi (dots per inch) を知りたい。(xdpyinfo)

xdpyinfo で見ることができます。表示が大きいので xdpyinfo | grep resolution のようにフィルタリングして見るのがいいでしょう。

最終更新:2026年06月26日 20:40