ディスプレイにGUIを表示するウィンドウシステムの1つ。
X の man ページ によれば以下のどれかの名称で呼ぶことが推奨されています。
「X という名前の Window System」なので「X Window」と略すと変です。「X Window
s
」と書くと、かすりもしない上にやたら煽られます。
XFree86 バージョン 4.4.0 以降でのライセンス変更により、XFree86 4.3.0 を元に開発が分岐された X.Org がディストリビューションで公式に採用される傾向にあります。
以下を参照。
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をアップデートする度にビデオドライバを再インストールしなければならず面倒です。以下ではメーカーサイトからのインストール方法を説明します。
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 謹製ドライバは XRandR に対応していないので、NVIDIA X Server Setting Toolの「X Server Display Configuration」で「Enable Xinerama」を指定するか、Xinerama非対応のウインドウマネージャでも「TwinView」を指定することで、複数のモニタを1枚のように扱えます。しかしウインドウマネージャのメニュー等が扱いづらいという感じる方は、XRandR とは別のデュアルモニタ対応機構を持っている KDEや XFce4を試してみるのも手です。
Ubuntu Weekly Recipe デュアルディスプレイを使う(gihyo.jp)
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0048?page=3
nvidia-settings で、ちらつきの出る X Screen の「Sync to VBlank」の項目にチェックを入れてみてください。
nVIDIAってどうよ
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 の設定は自動化が進んで、いまや xorg.conf なしがデフォルトです。自動設定を基本に、/etc/X11/xorg.conf.d/ に差分だけ追加するのが、標準的な設定手法です。
| GNOME | gnome-control-center |
| KDE | kcmshell6 kcm_kscreen |
| XFCE4 | xfce4-display-settings |
| MATE | mate-display-properties |
今ではキーボードやロケールの設定に使われます。
$ sudo dpkg-reconfigure keyboard-configuration $ sudo dpkg-reconfigure locales
X の -configure オプションで設定の雛型を作り、それを元に編集する方法もあります。root で Xorg -configure などと入力すると /root に雛形の xorg.conf.new ができるので、編集して /etc/X11 辺りに移動しましょう。
設定の書式については Gentoo Linux ドキュメント -- X サーバー設定ガイド などを参照。
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"
X の共通ドライバ libinput では、標準で X11 のボタン番号が以下のように割り当てられます。大半の多ボタンマウスは、挿すだけでボタンが機能するでしょう。
| Button 1 | 左クリック |
| Button 2 | ホイールクイック |
| Button 3 | 右クリック |
| Button 4 | ホイール上回転 |
| Button 5 | ホイール下回転 |
| Button 6 | チルト左など |
| Button 7 | チルト右など |
| Button 8 | サイド(戻る) |
| Button 9 | サイド(進む) |
たとえば「戻る」「進む」のボタンを入れ替えたい場合は、xmodmap コマンドで次のように設定します。
$ xmodmap -e "pointer = 1 2 3 4 5 6 7 9 8"
xev を実行し、xev のウィンドウでサイドボタンを押してみて、何番ボタンでイベントが発生しているかを確かめる。xev をオプションなしで実行すると、座標が大量に出て分からなくなるので、ボタン(とホイール)に絞るオプションを付けます。
$ xev -event button
マウスの名前やドライバのプロパティは xinput コマンドで確認できます。
$ xinput list
ノートPC や HDMI などのディスプレイ接続では、モニター側から EDID というハードウェア情報が送られてきて、Xorg はそれを信用して設定します。だから昔のような表示ずれの問題はほぼ無くなってますが、リフレッシュレートを変えたい場合などに設定できる方法を記します。
※ここでは、1920x1080 のディスプレイでリフレッシュレートを 60Hz に変更する方法を例にやります。以下のコマンドを実行します。うまく表示できていれば、~/.xinitrc に追記します。
xrandr --newmode $(cvt 1920 1080 60 | grep Modeline | sed 's/Modeline //')
デフォルトのログイン方法をテキストモードに変える方法です。
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 ログイン」になっています。
OS 起動時にDMが起動されないようにすれば、「CUI (コンソール) ログイン」になる。
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 を閉じているわけです。
CUI / GUI の区別なくランレベル 2 で起動するので、update-rc.d を使ってDMの起動を停止してください。具体的には(GDMの例)、
# update-rc.d -f gdm remove
とすることで、/etc/init.d/ からリンクされている起動設定を削除することができます。元に戻したい場合もコマンド一発で可能です。
頻繁に CUI と GUI を行き来するのなら、未使用のランレベル (3 など) にDMを使わない設定をしておき、inittab のランレベルを切り替えても良いでしょう。
起動時のランレベルが 5 だとDMが起動し、ランレベルが 3 のときは起動しないように設定されています。
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 ログインの画面に戻ってログインしてください。
近年の X では、Fontconfig というシステムを介してフォントを描画しています。フォントを追加したら、フォントキャッシュを更新することで、新しいフォントが使えるようになります。以下のような書式です:
$ fc-cache -fv
xset r on でオートリピートが有効になります。xset r off とすると無効になります。
$HOME/.xinitrc などにでも書いておいてください。
Windows キーの押下を検知した際にどう振舞うかを ~/.xinitrc などに設定しておけば使えます。
ITMediaのX上でWindowsキーを使いたいを参照のこと。
Steam や各種エミュレーターなど、近年の Linux ゲームでは、SDL2 というライブラリで、コントローラーのデータベースを読んで自動設定してくれます。すぐ遊べるでしょう。
ゲームコントローラーの細かい調整は、Xだけで実現するよりも jstest-gtk を利用するのが簡単です。画面上のメーターで軸ズレ調整などができます。ボタンの割り当てをカスタマイズしたい場合は、Steam のコントローラー設定を利用するか、AntiMicroX をインストールします。
$ sudo apt install jstest-gtk antimicrox
~/.Xresourcesと~/.Xdefaultsって、どう違うんですか? を参照の事。
これらのファイルの設定は、いまどきのデスクトップ環境では無視されるのが普通です。
軽量なウインドウマネージャやレガシーアプリ(rxvt-unicode や xterm など)では、.Xresources(新)と.Xdefaults(旧)は X の見た目の設定に、.xsession はログイン後の起動スクリプトとして使われることはあります。
X が動いたのはいいものの、滅茶苦茶重くてやってられん。そんなときはとりあえず以下の項目を調べてみよう。
$ sudo apt install mesa-utils $ glxinfo | grep -E "(direct rendering|OpenGL vendor|OpenGL renderer)"
以上を実行して、direct rendering:Yes と表示されれば、ハードウェアアクセラレーションは正常に効いてます。
OpenGL renderer の項目にビデオカード名がない(llvmpipe や swrast になっている)場合は、アクセラレーションが効いてません。
glxgears を実行すると、歯車のアニメーションの秒間フレーム数(FPS)が表示されます。カクカクだとアクセラレーションが効いてません。モニターの垂直同期(V-Sync)が設定されてると、リフレッシュレート(60fps など)に固定されます。
Web ブラウザの動画再生で VA-API のハードウェアデコードが効いてるか調べます。正しく認識されれば、サポートしているコーデックが表示されます。NVIDIA 純正ドライバの場合は vdpauinfo です。
$ sudo apt install vainfo $ vainfo
KDE とか GNOME はいろいろと重たいので、そういうのを使ってたらもう少し軽い奴を試してみるとか。
「\」が Windows では「¥」と見えるのに、X で見ると「\」となっている。
これは正常です。表示に使うフォントで割り当てられている文字が違うだけでデータ的には同じです。
Windows 向けフォントでは円記号(¥)、X 向けフォントではバックスラッシュ(\)であることが多い模様。X で¥と表示されるフォントもたまにあります。
コマンド使用時やプログラミング時には表示が「¥」となっていても「バックスラッシュ」と呼ぶことが多いです。
元々の規格では「\」などいくつかの文字は各国ごとに任意に割り当てを変えていいことになっていました。そこで日本の規格で「\」の位置に「¥」を割り当てたのが原因です。
昔ながらの X クライアントは「コピー&ペースト」でなくて、「領域選択 (囲って) &ペースト」。
Windows の場合
X の場合
その他使っている GUI ツールキットで Windows 風の操作 *も* 使えることもある。(これは X のコピペとは無関係に動作)
Emacs や Bash 等 GNU ソフトウェアではカット&ペーストという名称が普及する前からこれらが "kill" (キル), "yank" (ヤンク) と呼ばれていたりするので、Web 上の解説や man ページなどを読むときは注意しよう。
固まる原因となったプログラムを強制的に終了させてみよう。
そのウィンドウ上で
でも単に処理中で入力を受け付けないだけだったということが多々…
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 と入力してリブートするのも可。)
魔法の SysRQ キーと呼ばれるキーコンビ (Alt+SysRQ+α) が有効になってるかもしれない。JF の 神秘のSYSRQキー文書 に使い方は書いてあるので、大事に至る前に前もって読んでおいて設定しておくのも良いかも。
さんざん手を尽くしたなら祈りながら電源スイッチに全てを託そう。神の御加護を。データが無事である事を祈る!
Xorg.0.log など、それっぽいファイルが ~/.local/share/xorg にあります。
そこに無ければ、journalctl -b /usr/bin/Xorg を実行してみて下さい。
Wayland 環境では X 自体がないので当然出力されません。Xwayland のログが残ることはあります。
Systemd フリーなディストリビューションでは、昔ながらの /var/log ディレクトリにあることが多いです。
方法はいろいろ。
デフォルトで PrintScreen キーに割り当てられてます。
| GNOME | gnome-screenshot |
| KDE | spectacle |
| Xfce4 | xfce4-screenshooter |
| MATE | mate-screenshot |
Scrot は、コマンドラインからでも柔軟に使える軽量ツールで、LXDE や Raspberry Pi などでの定番です。
$ sudo apt install scrot
flameshot は、スクリーンショットを撮ったその場で矢印・モザイク・テキストなどを描き込めるツールで、ブログや SNS でよく見かけます。
xdpyinfo で見ることができます。表示が大きいので xdpyinfo | grep resolution のようにフィルタリングして見るのがいいでしょう。