「Xorg」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(関連記事を修正(英語版に追従))
(→‎ユーザーが X を終了できないようにする: === Rootless Xorg === を英語版より追加)
549行目: 549行目:
 
Option "DontZap" "True"
 
Option "DontZap" "True"
 
EndSection}}
 
EndSection}}
  +
  +
=== Rootless Xorg ===
  +
  +
Xorg may run with standard user privileges instead of root (so-called "rootless" Xorg). This is a significant security improvement over running as root. Note that most display managers do not support rootless Xorg.
  +
  +
You can verify which user Xorg is running as with {{ic|ps -o user $(pgrep Xorg)}}.
  +
  +
See also {{man|1|Xorg.wrap}}, {{man|8|systemd-logind}}, [[Systemd/User#Xorg as a systemd user service]], [[Fedora:Changes/XorgWithoutRootRights]] and {{Bug|41257}}.
  +
  +
==== Using xinitrc ====
  +
  +
To configure rootless Xorg using [[xinitrc]]:
  +
  +
* Run startx as a subprocess of the login shell; run {{ic|startx}} directly and do not use {{ic|exec startx}}.
  +
* Ensure that Xorg uses virtual terminal for which permissions were set, i.e. passed by logind in {{ic|$XDG_VTNR}} via [[xinit#xserverrc|.xserverrc]].
  +
* If using certain proprietary display drivers, [[kernel mode setting]] [https://cgit.freedesktop.org/xorg/xserver/tree/hw/xfree86/xorg-wrapper.c#n222 auto-detection] will fail. In such cases, you must set {{ic|1=needs_root_rights = no}} in {{ic|/etc/X11/Xwrapper.config}}.
  +
  +
==== Using GDM ====
  +
  +
[[GDM]] will run Xorg without root privileges by default when [[kernel mode setting]] is used.
  +
  +
==== Session log redirection ====
  +
  +
When Xorg is run in rootless mode, Xorg logs are saved to {{ic|~/.local/share/xorg/Xorg.log}}. However, the stdout and stderr output from the Xorg session is not redirected to this log. To re-enable redirection, start Xorg with the {{ic|-keeptty}} flag and redirect the stdout and stderr output to a file:
  +
  +
startx -- -keeptty >~/.xorg.log 2>&1
  +
  +
Alternatively, copy {{ic|/etc/X11/xinit/xserverrc}} to {{ic|~/.xserverrc}}, and append {{ic|-keeptty}}. See [https://bbs.archlinux.org/viewtopic.php?pid=1446402#p1446402].
   
 
==トラブルシューティング==
 
==トラブルシューティング==

2021年10月23日 (土) 14:54時点における版

関連記事

https://www.x.org/wiki/ より:

X.Org プロジェクトは X Window System のオープンソース実装を提供しています。開発作業は freedesktop.org コミュニティと共同で行われています。

Xorg は X window system バージョン 11 のオープンソースのリファレンス実装です。Linux ユーザーの中で Xorg が一番ポピュラーな選択となってから、GUI アプリケーションにとって Xorg は欠かせない存在となり、ほとんどのディストリビューションで広く採用されています。詳しくは Wikipedia の XorgXorg のウェブサイト を見て下さい。

目次

インストール

X サーバーをインストールするには、まず xorg-server パッケージをインストールする必要があります。

また、設定作業などに必要なパッケージのいくつかが xorg-apps グループに入っており、それぞれ関連するセクションで説明しています。

ヒント: デフォルトの X 環境はほとんど裸の状態です。基本的に、X を使うにあたってウィンドウマネージャデスクトップ環境をインストールすることになるでしょう。

ドライバーのインストール

Linux カーネルにはオープンソースのビデオドライバーが含まれておりハードウェアでアクセラレートされたフレームバッファをサポートしています。しかし、OpenGL や X11 における 2D アクセラレーションを使うにはユーザーランドのサポートが必要です。

まず、あなたのカードを確認してください:

$ lspci | grep -e VGA -e 3D

それから適切なドライバーをインストールしてください。パッケージデータベースを検索してオープンソースビデオドライバーの一覧を表示することができます:

$ pacman -Ss xf86-video

Xorg はインストールされているドライバーを自動的に検索します:

  • 使用しているハードウェアにあったドライバー(以下に記載)がインストールされていない場合、Xorg はまず最初に fbdev (xf86-video-fbdev) を検索します。
  • fbdev が存在しなかった場合、次に汎用ドライバーである vesa (xf86-video-vesa) を検索します。vesa はほとんどのチップセットで動作しますが 2D や 3D のアクセラレーションは含まれていません。
  • vesa も見つからない場合、Xorg はカーネルモードセッティングにフォールバックします。カーネルモードセッティングでは GLAMOR アクセラレーションが利用できます (modesetting(4) を参照)。

ビデオアクセラレーション機能を動かしたり、GPU が設定できる全てのモードを表示するには、適切なビデオドライバが必要です:

ブランド 種別 ドライバ OpenGL OpenGL (Multilib) ドキュメント
 AMD/ATI  オープンソース xf86-video-amdgpu mesa lib32-mesa AMDGPU
xf86-video-ati ATI
プロプライエタリ catalystAUR catalyst-libglAUR lib32-catalyst-libglAUR AMD Catalyst
Intel オープンソース xf86-video-intel mesa lib32-mesa Intel Graphics
Nvidia オープンソース xf86-video-nouveau mesa lib32-mesa Nouveau
プロプライエタリ nvidia nvidia-utils lib32-nvidia-utils NVIDIA
nvidia-340xxAUR nvidia-340xx-utilsAUR lib32-nvidia-340xx-utilsAUR
VIA オープンソース xf86-video-openchrome VIA
ノート: オンボードのグラフィックカードとディスクリート GPU が混載されていて NVIDIA Optimus が有効になっているノートパソコンを使用する場合は NVIDIA OptimusBumblebee を見てください。

他のビデオドライバーは xorg-drivers グループで見つけることができます。

Xorg はクローズドソースのドライバーがなくとも問題なく動作するはずです。基本的に、ゲームのための 3D 支援レンダリングや、デュアルスクリーン、TV 出力など高度な機能を使う場合にのみプロプライエタリのドライバが必要になります。

AMD

GPU アーキテクチャ Radeon カード オープンソースドライバー プロプライエタリドライバー
GCN 4 以降 Wikipedia を参照 AMDGPU AMDGPU PRO
GCN 3 AMDGPU Catalyst /
AMDGPU PRO
GCN 2* AMDGPU / ATI Catalyst2
GCN 1* AMDGPU / ATI Catalyst1
TeraScale 2&3 HD 5000 - HD 6000 ATI Catalyst
TeraScale 1 HD 2000 - HD 4000 Catalyst Legacy
TeraScale 以前 X1000 以前 -
*: 実験的な AMDGPU サポート。

起動

ディスプレイマネージャ

X を起動する楽な方法はディスプレイマネージャを使うことです。ただし、他のアプリケーションや依存パッケージが必要になります。

手動

ディスプレイマネージャを使わずに X サーバーを起動したい場合、Xinitrc を見て下さい。

設定

ノート: Arch はデフォルトの設定ファイルを /usr/share/X11/xorg.conf.d に配置しており、ほとんどの場合、追加の設定は必要ありません。

Xorg は初期設定に xorg.conf という名前の設定ファイルと .conf が末尾につくファイルを使います: これらのファイルが使われるフォルダの一覧は [1] を見たり man xorg.conf を実行することで(利用できるオプションの説明と一緒に)調べることができます。

.conf ファイルを使う

/etc/X11/xorg.conf.d/ ディレクトリにはユーザー定義の設定を保存します。あなたは自由に設定ファイルを /etc/X11/xorg.conf.d/ に追加することができますが、ファイル名には XX- (XX は数字です) を先頭につけ拡張子は .conf である必要があります (例えば 10 は 20 より早く読み込まれます)。これらのファイルは X サーバーの起動時にパースされ従来の xorg.conf 設定ファイルの一部として扱われます。基本的に X サーバーは設定ファイルの集合を xorg.conf の最後のエントリとしてひとつの大きなファイルとして扱います。

xorg.conf を使う

/etc/X11/xorg.conf/etc/xorg.conf で Xorg を設定することもできます。xorg.conf のスケルトンを生成するには

# Xorg :0 -configure

上のコマンドで /root/xorg.conf.new ファイルが作られるはずです。これを /etc/X11/xorg.conf にコピーして上書きすることができます。

ヒント: 既に X サーバーを動作させている場合は、別のディスプレイを使って下さい、例: Xorg :2 -configure

もしくは、あなたのビデオカードドライバに自動で Xorg を設定するツールが含まれているかもしれません。詳しくは NVIDIAAMD Catalyst などあなたの使っているビデオカードの記事を見て下さい。

ノート: 設定ファイルは大文字・小文字を区別しません、また “_” は無視されます。(Option など) 設定ファイル内のほとんどの文字列も大文字・小文字・空白・“_” を区別しません。

入力デバイス

入力デバイスのドライバーについては、X サーバーはデフォルトで libinput ドライバー (xf86-input-libinput) を使用しますが、xf86-input-evdev と関連するドライバーも使用できます [2]

Udev があなたのハードウェアを検知し、/usr/share/X11/xorg.conf.d/ ディレクトリに入っているデフォルト設定ファイル 10-evdev.conf40-libinput.conf によって、evdev と libinput がほとんど全てのデバイスのホットプラグ・インプットドライバーとして動作します。Udevsystemd によって提供されています。

X サーバーの起動後、ログファイルを確認することで、どちらのドライバーがデバイスによってホットプラグされているか確認できます (ログファイルの名前は違っているかもしれません):

$ grep -e "Using input driver " Xorg.0.log

evdev や libinput があなたの持っているデバイスをサポートしていないときは、必要なドライバーを xorg-drivers グループからインストールしてください。

ホットプラグの動作については#設定を見てください。

マウスのアクセラレーション

次のページを参照してください: マウスのアクセラレーション

特殊なマウスボタン

次のページを参照してください: 全てのマウスボタンを動作させる

タッチパッド

次のページを参照してください: libinput または Synaptics タッチパッド

タッチスクリーン

次のページを参照してください: タッチスクリーン

キーボードの設定

次のページを参照してください: Xorg でのキーボード設定

InputClass

参照: https://fedoraproject.org/wiki/Input_device_configuration

InputClass は、ひとつのデバイスではなく「あるクラス」のデバイス(ホットプラグのデバイスを含む)に適用される新しいタイプの設定セクションです。InputClass セクションの適用範囲は指定された match によって決まります – 入力デバイスに適用するには、全ての match をデバイスにあてがう必要があります。例えば InputClass セクションは以下のように使われます:

Section "InputClass"
    Identifier             "touchpad catchall"
    MatchIsTouchpad        "on"
    Driver                 "synaptics"
EndSection

次のスニペットも理解するのに役立つかもしれません:

Section "InputClass"
        Identifier             "evdev touchpad catchall"
        MatchIsTouchpad        "on"
        MatchDevicePath        "/dev/input/event*"
        Driver                 "evdev"
EndSection

このスニペットが xorg.conf や xorg.conf.d に存在する場合、システム上の全てのタッチパッドに synaptics ドライバが割り当てられます。優先順位 (xorg.conf.d の英数字の順番) によってドライバーの設定は前の設定を上書きすることに注意してください – 一般的なクラスほど、初めの方に置くべきです。xorg-server パッケージによって提供されるデフォルトのスニペットは 00-evdev.conf であり、全ての入力デバイスに evdev ドライバを割り当てます。

match オプションによってセクションを適用するのはどのデバイスなのか指定します。全ての match 行を満たしたデバイスだけに、セクションが適用されます。使うことができる match は以下の通り:

  • MatchIsPointer, MatchIsKeyboard, MatchIsTouchpad, MatchIsTouchscreen, MatchIsJoystick – デバイスグループに適用するための boolean オプション。
  • MatchProduct "foo|bar": 製品の名前に "foo" か "bar" が含まれているデバイスにマッチ
  • MatchVendor "foo|bar|baz": 製造者(ベンダー)名に "foo" や "bar"、"baz" が含まれているデバイスにマッチ
  • MatchDevicePath "/dev/input/event*": デバイスパスが一致しているデバイスにマッチ (利用できるパターンは fnmatch(3) を見て下さい)
  • MatchTag "foo|bar": "foo" や "bar" といったタグが付けられたデバイスにマッチ。タグはバックエンドの設定 – udev によって指定され特別な設定が必要なデバイスをラベリングします。

ユーザー定義設定のためのセクションの例:

Section "InputClass"
    Identifier             "lasermouse slowdown"
    MatchIsPointer         "on"
    MatchProduct           "Lasermouse"
    MatchVendor            "LaserMouse Inc."
    Option                 "ConstantDeceleration" 20
EndSection

このセクションは、"Lasermouse Inc." によって作られた "Lasermouse" という名前を持つポインティングデバイスにマッチし、デバイスには 20 の値の constant deceleration が適用されます。20倍マウスの速度が遅くなります。

X サーバーによって扱って欲しくないデバイスがあるかもしれません。設定によってそうしたデバイスを無視させることができます:

Section "InputClass"
    Identifier            "no need for accelerometers in X"
    MatchProduct          "accelerometer"
    Option                "Ignore" "on"
EndSection

設定例

以下のサブセクションでは一般的に使われる設定オプションのための設定例を記述しています。あなたが GNOME や KDE などのデスクトップ環境を使っている場合、xorg.conf に設定したオプションはログイン時にユーザー定義オプションによって上書きされてしまう可能性があります

例: (トラックポイント用の) ホイールエミュレーション

トラックポイントのある PC (例: Thinkpad) を使っている場合、以下を xorg.conf に追加することでミドルボタンを使ってマウスホイールをエミュレートできます:

Section "InputClass"
    Identifier            "Wheel Emulation"
    MatchIsPointer        "on"
    MatchProduct          "TrackPoint"
    Option                "EmulateWheelButton" "2"
    Option                "EmulateWheel" "on"
EndSection

(横スクロールを含む) トラックポイントの完全なサポートをするには以下を使って下さい:

Section "InputClass"
    Identifier            "Trackpoint Wheel Emulation"
    MatchProduct	  "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
    MatchDevicePath	  "/dev/input/event*"
    Option		  "EmulateWheel"		"true"
    Option		  "EmulateWheelButton"	        "2"
    Option		  "Emulate3Buttons"	        "false"
    Option		  "XAxisMapping"		"6 7"
    Option		  "YAxisMapping"		"4 5"
EndSection
例: Tap-to-click

Tap-to-click は(タッチパッドタブの)マウス設定ダイアログから有効にすることができますが、gdm でタップを有効にする必要があるなら、以下のスニペットを使って下さい:

Section "InputClass"
    Identifier            "tap-by-default"
    MatchIsTouchpad       "on"
    Option                "TapButton1" "1"
EndSection
例: Acer 5920G ラップトップのキーボードレイアウト・モデル

キーボードモデルやレイアウトは /etc/X11/xorg.conf.d/keyboard.conf ファイルや同じディレクトリの他の .conf ファイルで設定できます。

  • MatchIsKeyboard "yes": 入力デバイスをキーボードに設定
  • Option "XkbModel" "acer_laptop": キーボードモデルを Acer ラップトップキーボードに設定。acer_laptop はあなたの使っているキーボードに置き換えられます。
  • Option "XkbLayout" "jp": キーボードレイアウトを日本語に設定。jp は使いたいレイアウトに変えることができます。
  • Option "XkbVariant" "sundeadkeys": レイアウトのバリアントを Sun dead keys に設定。デフォルトのバリアントを使うなら XkbVariant オプションは省略できます。

キーボードレイアウト・モデルのリストは /usr/share/X11/xkb/rules/base.lst にあります。

Section "InputClass"
    Identifier             "Keyboard Defaults"
    MatchIsKeyboard        "yes"
    Option                 "XkbModel" "acer_laptop"
    Option                 "XkbLayout" "jp"
    Option                 "XkbVariant" "sundeadkeys"
EndSection
例: (3ボタンマウス用の) 中ボタンのエミュレーション

中ボタンのエミュレーションによって、右・左ボタンを一緒に押すことで3つ目のボタンのイベントを発動させるようにすることができます。これは X でのコピーアンドペーストに役に立つでしょう。

/etc/X11/xorg.conf.d/10-evdev.conf の mouse input catchall を修正します

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "Emulate3Buttons"     "True"
        Option "Emulate3Timeout"     "25"
EndSection

Option "Emulate3Buttons" "True" オプションで3ボタンのエミュレートを有効にして Option "Emulate3Timeout" "25" オプションで中ボタンのクリックとして認識する時間を 25ms としています。

モニターの設定

はじめに

ノート: 新しいバージョンの Xorg は自動で設定を行います。あなたが設定をする必要はありません。

まず、/etc/X11/xorg.conf.d/10-monitor.conf のような、新しい設定ファイルを作成します。

/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor"
    Identifier             "Monitor0"
EndSection

Section "Device"
    Identifier             "Device0"
    Driver                 "vesa" #Choose the driver used for this monitor
EndSection

Section "Screen"
    Identifier             "Screen0"  #Collapse Monitor and Device section to Screen section
    Device                 "Device0"
    Monitor                "Monitor0"
    DefaultDepth            16 #Choose the depth (16||24)
    SubSection             "Display"
        Depth               16
        Modes              "1024x768_75.00" #Choose the resolution
    EndSubSection
EndSection
ノート: デフォルトでは、Xorg はモニターを検出する必要があり、できなかった場合は起動しません。そのようなときは上記のような設定ファイルを作成して自動検出をさせないことで解決できます。これが必要な場合としては、モニターがない状態で起動して Xorg を自動的に起動するヘッドレスシステムが考えられます。ログイン時に自動的に起動する方法は仮想端末ディスプレイマネージャを使います。

マルチモニター

一般的な情報はマルチディスプレイを見て下さい。

GPU 固有の手順は以下を参照してください:

複数のグラフィックカード

利用するドライバを正しく定めてグラフィックカードのバス ID を入力する必要があります。

Section "Device"
    Identifier             "Screen0"
    Driver                 "nouveau"
    BusID                  "PCI:0:12:0"
EndSection

Section "Device"
    Identifier             "Screen1"
    Driver                 "radeon"
    BusID                  "PCI:1:0:0"
EndSection

バス ID を取得するには:

$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation G96 [GeForce 9600M GT] (rev a1)

この場合バス ID は 1:0:0。

画面サイズと DPI

X サーバーの DPI は以下の順番で決定されます:

  1. -dpi コマンドラインオプションが一番優先されます。
  2. オプションが使われていない場合、X 設定ファイルの DisplaySize 設定が DPI の設定に使われます。
  3. DisplaySize が設定されていない場合、DDC のモニターサイズ値が DPI の設定に使われます。
  4. DDC がサイズを指定していない場合、75 DPI がデフォルトで使われます。

正しいドット密度 (DPI) を設定するには、ディスプレイのサイズを知る必要があります。(フォントレンダリングなど)細部の設定が必要な場合、適切な DPI の設定は特に重要です。以前は、メーカーは 96 DPI を標準として作成していました (10.3" モニターなら 800x600、13.2" モニターなら 1024x768)。最近では、画面の DPI は様々であり、縦横で等しくないこともあります。例えば、19" ワイドスクリーン LCD が 1440x900 なら DPI が 89x87 になります。DPI を設定するために、Xorg サーバーはグラフィックカードを通して DDC によってモニターの物理的な画面サイズを自動検出します。

ディスプレイのサイズと DPI が正しく検出・計算されているか確認するには:

$ xdpyinfo | grep -B2 resolution

dimensions がディスプレイサイズと一致しているかチェックしてください。正しく画面サイズを計算できない時、Xorg サーバは 75x75 DPI をデフォルトにするので、あなたはそれを計算する必要があります。

スクリーンの物理的な大きさがわかっているときは、Xorg の設定ファイルに入力することで正しい DPI が計算されます:

Section "Monitor"
    Identifier             "Monitor0"
    DisplaySize             286 179    # ミリメートル単位
EndSection

フルの xorg.conf を作成しないでモニタの仕様の入力だけを行いたい場合は新しい設定ファイルを作成してください。例えば (/etc/X11/xorg.conf.d/90-monitor.conf):

Section "Monitor"
    Identifier             "<default monitor>"
    DisplaySize            286 179    # In millimeters
EndSection

スクリーンの横と縦の物理的な長さがわからないときは(最近は対角線の長さ(インチ数)しかわからないことも多い)、モニターの最大解像度(アスペクト比)か対角線の長さを使って縦と横の長さを計算できます。(ピタゴラスの定理を使って)最大解像度1280x800(もしくはアスペクト比16:10)、13.3インチのスクリーンの場合:

$ echo 'scale=5;sqrt(1280^2+800^2)' | bc  # 1509.43698

このコマンドでピクセルの対角線の長さがわかり、この値を使うことで物理的な縦と横の長さを知ることができます (そしてそれをミリメートルに変換できます):

$ echo 'scale=5;(13.3/1509)*1280*25.4' | bc  # 286.43072
$ echo 'scale=5;(13.3/1509)*800*25.4'  | bc  # 179.01920
ノート: 上記の計算はピクセルアスペクト比が1:1のモニターでは上手く行きますが、モニターによってはアスペクト比が潰されることがあります (例: 16:10 のアスペクト解像度が 16:9 のモニターに適用される)。その場合、画面の大きさを手動で計測する必要があります。

手動で DPI を設定する

ノート: dpi は自由に設定することができ、Qt や GTK を使用しているアプリケーションはそれにあわせてスケールしますが、スケールによる画像の乱れがビットマップを使用する GUI に現れないように dpi は 96, 120 (25% 増分), 144 (50% 増分), 168 (75% 増分), 192 (100% 増分) などに設定するのを推奨します。また、アイコンの最低 dpi は基本的に 96 になっているので、96 dpi 未満に設定しても GUI のグラフィックのサイズは小さくなりません。

RandR に対応しているドライバ (例えばオープンソースの ATI ドライバ) なら、次のコマンドで設定できます:

$ xrandr --dpi 144
ノート: 変更はすぐにはアプリケーションに適用されません。再起動する必要があります。

設定を永続的にするには xprofile を見て下さい。

プロプライエタリの NVIDIA ドライバー

使う解像度が一つの場合 DPI を手動で設定することができます (DPI calculator):

Section "Monitor"
    Identifier             "Monitor0"
    Option                 "DPI" "96 x 96"
EndSection

/etc/X11/xorg.conf.d/20-nvidia.conf 内で以下のオプションを (Device セクションに) 追加して DPI を手動設定できます:

Option              "UseEdidDpi" "False"
Option              "DPI" "96 x 96"

DPMS

DPMS (Display Power Management Signaling) はコンピュータが使われていない時にモニターを省電力モードに移行させる技術です。一定時間後にモニタを自動で standby にすることができます。DPMS を見て下さい。

コンポジット

X の Composite 拡張によってウィンドウ階層のサブツリー全体がオフスクリーンバッファにレンダリングされます。アプリケーションはバッファの内容を取得できるようになります。オフスクリーンバッファは親のウィンドウに自動的にマージされるか、コンポジットマネージャと呼ばれる外部のプログラムによってマージされます。詳しくは次のページを見て下さい: コンポジット型ウィンドウマネージャ

ウィンドウマネージャによっては、コンポジットマネージャをインストールしなくてもコンポジットが行われます (例: Compiz, Enlightenment, KWin, Marco, Metacity, Muffin, Mutter, Xfwm)。そうでないウィンドウマネージャの場合、スタンドアロンのコンポジットマネージャを使用します。

コンポジットマネージャ一覧

  • Picom — X コンポジタ (xcompmgr-dana のフォーク)。
https://github.com/chjj/compton || picom
  • Xcompmgr — X.org 向けのウィンドウ効果ができるコンポジットマネージャ。
https://cgit.freedesktop.org/xorg/app/xcompmgr/ || xcompmgr
  • Unagi — モジュール式のコンポジットマネージャ。C で書かれており XCB をベースにしています。
http://projects.mini-dweeb.org/projects/unagi || unagiAUR

ヒントとテクニック

X スタートアップ (startx) 調整

X のオプションを見るには:

$ man Xserver

以下のオプションは /usr/bin/startx ファイルの "defaultserverargs" 変数に追加してください:

  • 16ビットフォントの遅延ロードを有効にする:
-deferglyphs 16
ノート: kdm から X を起動したとき、startx スクリプトが実行されないように思われるかもしれません。X オプションを /usr/share/config/kdm/kdmrc ファイルの "ServerArgsLocal" に加える必要があります。

ネストした X セッション

他のデスクトップ環境に入れ子になったセッションを起動するには:

$ /usr/bin/Xnest :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1

上記で現在の X セッションの中に 1024x768 のウィンドウの Window Maker セッションが起動します。

このためには xorg-server-xnest パッケージをインストールする必要があります。

リモートで GUI プログラムを実行する

次の記事を参照してください: Secure Shell#X11 フォワーディング

必要に応じて入力ソースを有効化・無効化

xinput を使えば一時的に入力ソースを有効化・無効化することができるようになります。ThinkPad のように複数のマウスがあって、どちらか片方だけ使いたい時などに役立ちます。

xorg-xinput パッケージをインストールしてください。

無効化したいデバイスの ID を調べて下さい:

$ xinput

例えば Lenovo ThinkPad T500 では、出力は以下のようになります:

$ xinput
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                   	id=11	[slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad              	id=10	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=8	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=9	[slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                  	id=12	[slave  keyboard (3)]

xinput --disable device_id (device_id は無効化したいデバイスの ID) でデバイスを無効にします。次の例では Synaptics Touchpad の ID 10 を無効にします:

$ xinput --disable 10

デバイスを有効にするには、次のコマンドを実行してください:

$ xinput --enable 10

もしくはデバイス名を使うこともできます。タッチパッドを無効化するコマンドは:

$ xinput --disable "SynPS/2 Synaptics TouchPad"

ホットキーでアプリケーションを終了

ホットキーでスクリプトを実行:

#!/bin/bash
windowFocus=$(xdotool getwindowfocus);
pid=$(xprop -id $windowFocus | grep PID);
kill -9 $pid

依存パッケージ: xorg-xprop, xdotool

TTY のアクセスをブロック

X から tty へのアクセスをブロックしたい場合、以下を xorg.conf に追加してください:

Section "ServerFlags"
    Option "DontVTSwitch" "True"
EndSection

ユーザーが X を終了できないようにする

X が動作しているときにユーザーから kill されないようにしたい場合、以下を xorg.conf に追加してください:

Section "ServerFlags"
    Option "DontZap"      "True"
EndSection

Rootless Xorg

Xorg may run with standard user privileges instead of root (so-called "rootless" Xorg). This is a significant security improvement over running as root. Note that most display managers do not support rootless Xorg.

You can verify which user Xorg is running as with ps -o user $(pgrep Xorg).

See also Xorg.wrap(1), systemd-logind(8), Systemd/User#Xorg as a systemd user service, Fedora:Changes/XorgWithoutRootRights and FS#41257.

Using xinitrc

To configure rootless Xorg using xinitrc:

  • Run startx as a subprocess of the login shell; run startx directly and do not use exec startx.
  • Ensure that Xorg uses virtual terminal for which permissions were set, i.e. passed by logind in $XDG_VTNR via .xserverrc.
  • If using certain proprietary display drivers, kernel mode setting auto-detection will fail. In such cases, you must set needs_root_rights = no in /etc/X11/Xwrapper.config.

Using GDM

GDM will run Xorg without root privileges by default when kernel mode setting is used.

Session log redirection

When Xorg is run in rootless mode, Xorg logs are saved to ~/.local/share/xorg/Xorg.log. However, the stdout and stderr output from the Xorg session is not redirected to this log. To re-enable redirection, start Xorg with the -keeptty flag and redirect the stdout and stderr output to a file:

startx -- -keeptty >~/.xorg.log 2>&1

Alternatively, copy /etc/X11/xinit/xserverrc to ~/.xserverrc, and append -keeptty. See [3].

トラブルシューティング

共通

何か問題が発生したらログを確認してください。ログは /var/log/ または (v1.16 からデフォルトのルートレス X の場合) ~/.local/share/xorg/ の中に保存されています。GDM を使っている場合は systemd の journal をチェックしてください [4]

ログファイルの名前は Xorg.n.log です。n はディスプレイ番号に置き換えられます。デフォルト設定のシングルユーザーマシンの場合は Xorg.0.log を確認すれば良いですが、他の構成の場合は見るべきログは違うかもしれません。X サーバーのセッションが起動したときのタイムスタンプと X が起動するのに使われたコンソールを確認することで適切なログファイルを見分けられます。例:

$ grep -e Log -e tty Xorg.0.log
[    40.623] (==) Log file: "/home/archuser/.local/share/xorg/Xorg.0.log", Time: Thu Aug 28 12:36:44 2014
[    40.704] (--) controlling tty is VT number 1, auto-enabling KeepTty
  • ログファイルの中に (EE) で始まる行が存在しないか確認してください。(EE) はエラーです。また、(WW) は警告です。
  • $HOME に存在する .xinitrc ファイルが空の場合、X を起動するにはファイルを削除するか正しく編集する必要があります。空の場合、X は画面を表示せず Xorg.0.log にエラーも出力されません。ファイルを削除するとデフォルトの X 環境が起動します。
  • 画面が真っ黒になった場合、別の仮想端末に切り替えて (例: Ctrl+Alt+F2)、root でログインしてください。root と入力して root パスワードを入力することでログインできます。
次のコマンドで X サーバーを終了させることが可能です:
# pkill X
上記のコマンドが機能しない場合、再起動してください:
# reboot
  • キーボード・マウス・タッチパッドなどに問題がおこる場合は カテゴリ:入力デバイス内のそれぞれのページを見て下さい。
  • ATIIntelNVIDIA の記事に問題の解決方法が載ってないか調べてください。

右 CTRL キーが oss キーマップとして動作しない

root で /usr/share/X11/xkb/symbols/fr を編集して:

include "level5(rctrl_switch)"

// include "level5(rctrl_switch)"

に変更して X を再起動するか次を実行してください:

setxkbmap fr oss

"su" で X クライアントの起動が失敗する

"Client is not authorized to connect to server" と表示される場合、次の行を /etc/pam.d/su/etc/pam.d/su-l に追加して下さい:

session        optional        pam_xauth.so

pam_xauth が正しく環境変数を設定し xauth キーを管理します。

プログラムが "font '(null)'" を要求する

  • エラーメッセージ: "unable to load font `(null)'."

いくつかのプログラムはビットマップフォントでだけ動作します。2つの主要なビットマップフォントのパッケージがあります、xorg-fonts-75dpixorg-fonts-100dpi です。両方は必要ありません、片方だけで十分です。どちらがあなたに適しているか調べるには、次を実行してください:

$ xdpyinfo | grep resolution

それからあなたに適している方を使って下さい (XX は 75 か 100 に置き換える):

# pacman -S xorg-fonts-XXdpi

フレームバッファモード問題

以下のログメッセージを残して X の起動が失敗する場合:

(WW) Falling back to old probe method for fbdev
(II) Loading sub module "fbdevhw"
(II) LoadModule: "fbdevhw"
(II) Loading /usr/lib/xorg/modules/linux//libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
       compiled for 1.6.1, module version=0.0.2
       ABI class: X.Org Video Driver, version 5.0
(II) FBDEV(1): using default device

Fatal server error:
Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices

xf86-video-fbdev パッケージをアンインストールしてください。

Matrox カードで DRI が停止する

Matrox カードを使っていて Xorg をアップグレードすると DRI が停止する場合、次の行を xorg.conf のビデオカードの Device セクションに追加してください:

Option "OldDmaInit" "On"

リカバリ: GUI ログインの前に Xorg を無効化

Xorg を自動的に起動するように設定していて、なんらかの理由でログイン・ディスプレイマネージャが表示される前に Xorg が起動するのを防ぎたい場合(例えば、システムを間違って設定したせいで Xorg がマウスやキーボード入力を受け付けない場合)、以下の2つの方法でこれを達成できます。

  • デフォルトのターゲットを rescue.target に変更してください。systemd#起動時のデフォルトターゲットを変更する を参照。
  • 誤ってシステムを設定して Xorg を使えなくしただけでなく、GRUB メニューの待ち時間をゼロに設定、または起動時から Xorg を無効にするのに GRUB を使えない場合、Arch Linux のライブ CD を使って下さい。インストールガイドに従ってインストールした Arch Linux をマウントして chroot します。もしくは、Ctrl+Alt + function キー (通常は X によって使用されていない F1 から F7) を使って tty を切り替えてから root でログインして以下を行います。

設定に応じて、以下の作業のどれか、または複数を行う必要があります:

X が起動できない: Keyboard initialization failed

ハードディスクが満杯の場合、startx は失敗します。/var/log/Xorg.0.log の最後が次のようになるはずです:

(EE) Error compiling keymap (server-0)
(EE) XKB: Couldn't compile keymap
(EE) XKB: Failed to load keymap. Loading default keymap instead.
(EE) Error compiling keymap (server-0)
(EE) XKB: Couldn't compile keymap
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
Fatal server error:
Failed to activate core devices.
Please consult the The X.Org Foundation support  at http://wiki.x.org
for help.
Please also check the log file at "/var/log/Xorg.0.log" for additional information.
 (II) AIGLX: Suspending AIGLX clients for VT switch

root パーティションに空き容量を作ってから X を起動してください。

black screen, No protocol specified.., Resource temporarily unavailable for all or some users

X は設定と一時ファイルをユーザーの home ディレクトリに作成します。あなたの home ディレクトリが入っているパーティションに十分な空き容量があることを確認してください。悪いことに、ディスク容量が不足していることを X サーバーは何も知らせません。

Rootless Xorg (v1.16)

バージョン 1.16 から [5]、Xorg は logind を利用して通常ユーザーの権限で動作させることが出来るようになっています。このために必要なのは:

  • systemd; 複数のインスタンスを扱えるバージョン216以降
  • xinit で X を起動; ディスプレイマネージャはサポートされていません
  • プロプライエタリのディスプレイドライバにおける KMS 実装は自動的に検出できないため /etc/X11/Xwrapper.configneeds_root_rights = no を手動で設定する必要があります [6]

以上の条件を満たさない場合、/etc/X11/Xwrapper.config で root 権限を有効にしてください:

needs_root_rights = yes

Xorg.wrap(1)systemd/ユーザー#systemd のユーザーサービスとしての Xorg も参照。

GDMKernel Mode Setting が使われている場合、デフォルトで root 権限を利用しないで Xorg を起動します。

リダイレクトが機能しない

ユーザーの Xorg ログが ~/.local/share/xorg/Xorg.log に保存されるとき、X セッションからの出力はログに含まれません。リダイレクトを有効にするには、-keeptty フラグを使って X を起動してください:

exec startx -- -keeptty > ~/.xorg.log 2>&1

もしくは /etc/X11/xinit/xserverrc~/.xserverrc にコピーして、-keeptty を追記して下さい。[7] を参照。

動画を視聴しようとすると緑色の画面が表示される

色深度の設定が間違っています。例えば、16ではなく24に設定する必要があります。

SocketCreateListener エラー

"SocketCreateListener() failed" というエラーメッセージを吐いて X が落ちてしまう場合、/tmp/.X11-unix 内のソケットファイルを削除する必要があります。この問題は root で Xorg を起動した場合に発生します。

参照

  • Xplain - X Window System の詳しい解説