「カーネルモード設定」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(→‎インストール: 英語版と同期、一覧表示方法変更)
(3人の利用者による、間の10版が非表示)
1行目: 1行目:
 
[[Category:グラフィック]]
 
[[Category:グラフィック]]
 
[[Category:カーネル]]
 
[[Category:カーネル]]
  +
[[en:Kernel mode setting]]
[[Category:X サーバー]]
 
[[en:Kernel Mode Setting]]
+
[[es:Kernel mode setting]]
[[es:Kernel Mode Setting]]
+
[[hu:Kernel mode setting]]
[[hu:Kernel Mode Setting]]
+
[[ru:Kernel mode setting]]
[[zh-CN:Kernel Mode Setting]]
+
[[zh-hans:Kernel mode setting]]
[[zh-TW:Kernel Mode Setting]]
+
[[zh-hant:Kernel mode setting]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|ATI|ATI}}
+
{{Related|ATI}}
  +
{{Related|AMDGPU}}
{{Related2|Intel Graphics|Intel Graphics}}
 
  +
{{Related|Intel Graphics}}
{{Related2|Nouveau|Nouveau}}
 
  +
{{Related|Nouveau}}
 
{{Related articles end}}
 
{{Related articles end}}
   
17行目: 18行目:
 
Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など) が有効になります。
 
Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など) が有効になります。
   
{{Note|プロプライエタリの [[NVIDIA|nvidia]] と [[AMD Catalyst|catalyst]] ドライバにもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための fbdev ドライバがありません。}}
+
{{Note|プロプライエタリの [[NVIDIA]] ドライバ (364.12 以上) にもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための fbdev ドライバがありません。}}
   
 
== 背景 ==
 
== 背景 ==
昔、ビデオカードをセットアップするのは X サーバーの仕事でした。このため、バーチャルコンソールで派手なグラフィックを使うことは簡単ではありませんでした。また、X から バーチャルコンソール へ切り替えると ({{ic|Ctrl+Alt+F1}})、X サーバーはカーネルにビデオカードのコントロールを移さなくてはならず、動作が重くなりチラツキが生じていました。同じ"痛々しい"挙動はコントロールを X サーバーに戻すときも起こりました ({{ic|Ctrl+Alt+F7}})。
+
昔、ビデオカードをセットアップするのは X サーバーの仕事でした。このため、仮想コンソールで派手なグラフィックを使うことは簡単ではありませんでした。また、X から 仮想コンソール へ切り替えると ({{ic|Ctrl+Alt+F1}})、X サーバーはカーネルにビデオカードのコントロールを移さなくてはならず、動作が重くなりチラツキが生じていました。同じ"痛々しい"挙動はコントロールを X サーバーに戻すときも起こりました ({{ic|Ctrl+Alt+F7}})。
   
 
Kernel Mode Setting (KMS) によって、現在カーネルはビデオカードのモードを設定することができます。これによって、起動時からの派手なグラフィックや、バーチャルコンソールと X の早い切り替えなどが可能になりました。
 
Kernel Mode Setting (KMS) によって、現在カーネルはビデオカードのモードを設定することができます。これによって、起動時からの派手なグラフィックや、バーチャルコンソールと X の早い切り替えなどが可能になりました。
 
== インストール ==
 
== インストール ==
 
まず、''どの''方法を使うにせよ、以下を''常時''無効にする必要があります:
 
まず、''どの''方法を使うにせよ、以下を''常時''無効にする必要があります:
* ブートローダ内のあらゆる "vga=" オプション。KMS によるネイティブ解像度と衝突します。
+
* ブートローダ内のあらゆる {{ic|<nowiki>vga=</nowiki>}} オプション。KMS によるネイティブ解像度と衝突します。
* フレームバッファを有効にするあらゆる "video=" 行。ドライバと衝突します。
+
* フレームバッファを有効にするあらゆる {{ic|<nowiki>video=</nowiki>}} 行。ドライバと衝突します。
 
* 他のフレームバッファドライバ ([[uvesafb]] など)。
 
* 他のフレームバッファドライバ ([[uvesafb]] など)。
   
 
=== Late KMS start===
 
=== Late KMS start===
[[Intel Graphics|Intel]], [[Nouveau|Nouveau]], [[ATI|ATI]] ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。
+
[[Intel Graphics|Intel]], [[Nouveau]], [[ATI]], [[AMDGPU]] ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。
   
プロプライエタリの [[NVIDIA|NVIDIA]], [[AMD Catalyst|AMD Catalyst]] ドライバはプンドライバスタックを使いません。KMS を使うにはオプンソライバに代えてください
+
プロプライエタリの [[NVIDIA]] ドライバー (364.12 以上) KMS をサポトしていますが、[[NVIDIA#DRM ネルモードセッティング|手動で有効化]]する必要があります
  +
  +
プロプライエタリの [[AMD Catalyst]] ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースの [[AMDGPU]] ドライバ (古いビデオカードなら [[ATI]] ドライバ) に変えてください。
   
 
=== Early KMS start ===
 
=== Early KMS start ===
   
  +
{{Tip|解像度の問題が発生する場合、[[#モードの強制と EDID|モードの強制]]で問題が解決しないか確認してください。}}
起動中にできるだけ早く KMS をロードするには、[[ATI|radeon]] (ATI/AMD カード向け)、[[Intel Graphics|i915]] (Intel 内蔵グラフィック向け)、[[Nouveau|nouveau]] (Nvidia カード向け) の内どれかのモジュールを、{{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 行に追加します。例えば:
 
  +
  +
通常 KMS は [[Arch ブートプロセス#initramfs|initramfs ステージ]]よりも後に初期化されます。起動中にできるだけ早く KMS をロードするには、依存するモジュールを {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 行に追加します。
  +
  +
* {{ic|amdgpu}} [[AMDGPU]] ドライバー向け
  +
* {{ic|radeon}} [[ATI]] ドライバー (古いモデル向け)
  +
* {{ic|i915}} Intel 内蔵グラフィック向け
  +
* {{ic|nouveau}} [[Nouveau]] オープンソースドライバー向け
  +
* [[QEMU#グラフィック|QEMU のグラフィック出力]]を使う場合: {{ic|virtio-gpu}} VirtIO 用、{{ic|qxl}} QXL 用、{{ic|cirrus}} Cirrus 用
  +
  +
例えば、Intel 内蔵グラフィックドライバーを利用し、KMS を早期に有効化させるには:
 
{{hc|/etc/mkinitcpio.conf|2=MODULES="... i915 ..."}}
 
{{hc|/etc/mkinitcpio.conf|2=MODULES="... i915 ..."}}
  +
(生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります:
 
  +
{{Note|Intel ユーザーは ACPI のエラーを出さないために {{ic|i915}} の前に {{ic|intel_agp}} を追加する必要があるかもしれません。ディスプレイ設定を変更してハイバネートから復帰する場合は必須になります。}}
  +
  +
(生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように [[initramfs]] に埋め込む必要があります:
   
 
{{hc|/etc/mkinitcpio.conf|
 
{{hc|/etc/mkinitcpio.conf|
 
2=FILES="/usr/lib/firmware/edid/your_edid.bin"}}
 
2=FILES="/usr/lib/firmware/edid/your_edid.bin"}}
   
その後カーネルイメージを再生成してください (詳しくは [[mkinitcpio|mkinitcpio]] を参照して下さい):
+
その後カーネルイメージを再生成してください (詳しくは [[mkinitcpio]] を参照して下さい):
   
{{bc|# mkinitcpio -p <カーネルプリセットの名前; 例 ''linux''>}}
+
# mkinitcpio -p <カーネルプリセットの名前; 例 ''linux''>
   
 
==トラブルシューティング==
 
==トラブルシューティング==
   
 
===フォントが小さすぎる===
 
===フォントが小さすぎる===
[[Fonts#デフォルトフォントを変更|デフォルトフォントを変更する方法]]を見てコンソールフォントを大きなフォントに代えてください。[community] にある端末用フォントには大きいものを含む様々なサイズがあります。
+
[[フォント#デフォルトフォントを変更|デフォルトフォントを変更する方法]]を見てコンソールフォントを大きなフォントに代えてください。Terminus フォント ({{Pkg|terminus-font}}) には {{ic|ter-132n}} など様々なサイズが含まれています。
  +
  +
もしくは[[#モードセッティングを無効にする|モードセッティングを無効化]]して解像度を下げることで相対的にフォントは大きくなります。
   
 
===ブートロードの問題と dmesg===
 
===ブートロードの問題と dmesg===
  +
古いシステムでは接続されたディスプレイデバイスのポーリングが重荷になることがあります。ポーリングは定期的に実行されるため、ハードウェアによっては最悪の場合、数百ミリ秒近く時間を取られます。動画を再生するときなど、絵面が止まってしまいます。10秒毎にディスプレイの出力が固まってしまうようなときは、ポーリングを無効化することで解決するかもしれません。
Polling for connected display devices on older systems can be quite expensive. Poll will happen periodically and can in worst cases take several hundred milliseconds, depending on the hardware. This will cause visible stalls, for example in video playback. These stalls might happen even when your video is on HDP output but you have other non HDP outputs in your hw configuration. If you experience stalls in display output occurring every 10 seconds, disabling polling might help.
 
   
起動中に 0x00000010 (2) のエラーコードが表示される場合 (10行近く表示され、最後にエラーコードが含まれているでしょう)、{{ic|/etc/modprobe.d/modprobe.conf}} に次の行を加えて下さい:
+
起動中に {{ic|0x00000010 (2)}} のエラーコードが表示される場合 (10行近く表示され、最後にエラーコードが含まれているでしょう)、{{ic|/etc/modprobe.d/modprobe.conf}} に次の行を加えて下さい:
 
options drm_kms_helper poll=0
 
options drm_kms_helper poll=0
   
 
==モードの強制と EDID==
 
==モードの強制と EDID==
{{Note|This section is a WIP. Improvements and corrections are more than welcome}}
 
   
 
あなたの使っているモニターや TV が正しい [[Wikipedia:EDID|EDID]] データを送信しない、またはそれに類似した問題が発生している場合、実効解像度が自動的に設定されなかったり全く画面が表示されなかったりすることがあります。カーネルには EDID のバイナリデータをロードする仕組みがあり、最も一般的な4つの解像度を設定するデータも提供しています。
 
あなたの使っているモニターや TV が正しい [[Wikipedia:EDID|EDID]] データを送信しない、またはそれに類似した問題が発生している場合、実効解像度が自動的に設定されなかったり全く画面が表示されなかったりすることがあります。カーネルには EDID のバイナリデータをロードする仕組みがあり、最も一般的な4つの解像度を設定するデータも提供しています。
   
もしあなたが EDID ファイルを持っているならば話は簡単です。持っていない場合、組み込まれている EDID バイナリ (もしくはカーネルコンパイルで生成するバイナリ、詳細は [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/EDID/HOWTO.txt ここ] を参照) のどれか一つを使うか自分で EDID を作って下さい。
+
もしあなたが EDID ファイルを持っているならば話は簡単です。持っていない場合、組み込まれている EDID バイナリ (もしくはカーネルコンパイルで生成するバイナリ、詳細は [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/EDID/HOWTO.txt ここ] を参照) のどれか一つを使うか自分で EDID を作って下さい。
   
(例えばモニタの Windows ドライバから展開した) EDID ファイルを持っている場合、{{ic|/usr/lib/firmware}} の下に {{ic|edid}} ディレクトリを作成して:
+
(例えばモニタの Windows ドライバから抽出したり {{Pkg|read-edid}} の {{ic|get-edid}} コマンドを使って取得した) EDID ファイルを持っている場合、{{ic|/usr/lib/firmware}} の下に {{ic|edid}} ディレクトリを作成して:
   
 
# mkdir /usr/lib/firmware/edid
 
# mkdir /usr/lib/firmware/edid
73行目: 90行目:
 
起動時にロードするために、カーネルコマンドラインで次を指定してください:
 
起動時にロードするために、カーネルコマンドラインで次を指定してください:
   
{{bc|1=drm_kms_helper.edid_firmware=edid/your_edid.bin}}
+
drm_kms_helper.edid_firmware=edid/your_edid.bin
   
 
特定の接続だけで使うように指定することも可能です:
 
特定の接続だけで使うように指定することも可能です:
   
{{bc|1=drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin}}
+
drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin
   
 
内蔵の4つの解像度を使うには、下の表を見て名前を指定してください:
 
内蔵の4つの解像度を使うには、下の表を見て名前を指定してください:
84行目: 101行目:
 
|-
 
|-
 
| '''解像度''' || '''指定する名前'''
 
| '''解像度''' || '''指定する名前'''
  +
|-
  +
| 800x600 || edid/800x600.bin
 
|-
 
|-
 
| 1024x768 || edid/1024x768.bin
 
| 1024x768 || edid/1024x768.bin
98行目: 117行目:
 
KMS を初期に実行するようにしている場合は、カスタム EDID ファイルを initramfs に含めないと起動時に問題が発生します。
 
KMS を初期に実行するようにしている場合は、カスタム EDID ファイルを initramfs に含めないと起動時に問題が発生します。
   
また、カーネルの {{ic|Documentation/EDID}} ソースに含まれている makefile を使って自分で EDID を組み立てることもできます。完全な情報は [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/EDID/HOWTO.txt ここ] や [https://www.osadl.org/Single-View.111+M591850c02b5.0.html そこ] で読めます。
+
また、カーネルの {{ic|Documentation/EDID}} ソースに含まれている makefile を使って自分で EDID を組み立てることもできます。完全な情報は [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/EDID/HOWTO.txt ここ] や [https://www.osadl.org/Single-View.111+M5315d29dd12.0.html そこ] で読めます。
   
  +
{{Warning|以下の方法は不完全です。Xorg は指定された解像度を使用しなかったりします。上の方法を使うことを推奨します。ただし {{ic|1=video=}} コマンドラインで解像度を指定するのは場合によっては役立ちます。}}
{{Warning|The method described below is somehow incomplete because e.g. Xorg does not take into account the resolution specified, so users are encouraged to use the method described above; however, specifying resolution with {{ic|1=video=}} command line may be useful in some scenarios}}
 
   
[http://nouveau.freedesktop.org/wiki/KernelModeSetting the nouveau wiki] より:
+
[https://nouveau.freedesktop.org/wiki/KernelModeSetting the nouveau wiki] より:
   
 
カーネルコマンドラインから強制的にモードを選ぶこともできます。残念ながら、DRM に関するコマンドラインオプションはあまりドキュメント化されていません。使い方の簡単な説明はここにあります:
 
カーネルコマンドラインから強制的にモードを選ぶこともできます。残念ながら、DRM に関するコマンドラインオプションはあまりドキュメント化されていません。使い方の簡単な説明はここにあります:
   
*http://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt
+
*https://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt
*http://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c
+
*https://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c
   
 
フォーマットは:
 
フォーマットは:
129行目: 148行目:
 
コネクタの名前・状態を取得するために、次のワンライナーを使うことができます:
 
コネクタの名前・状態を取得するために、次のワンライナーを使うことができます:
   
{{hc|<nowiki>for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done</nowiki>|
+
{{hc|<nowiki>$ for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done</nowiki>|
 
DVI-I-1: connected
 
DVI-I-1: connected
 
HDMI-A-1: disconnected
 
HDMI-A-1: disconnected
137行目: 156行目:
 
==モードセッティングを無効にする==
 
==モードセッティングを無効にする==
   
Catalyst ドライバを使っているときなど、ブランクスクリーンになったりディスプレイに "no signal" エラーがでたりするなどの理由で KMS を無効にしたい時があるかもしれません。KMS を無効にするには、カーネルパラメータに {{ic|nomodeset}} を追加します。詳しくは [[Kernel parameters]] を見て下さい。
+
Catalyst ドライバを使っているときなど、ブランクスクリーンになったりディスプレイに "no signal" エラーがでたりするなどの理由で KMS を無効にしたい時があるかもしれません。KMS を無効にするには、カーネルパラメータに {{ic|nomodeset}} を追加します。詳しくは[[カーネルパラメータ]]を見て下さい。
   
 
{{ic|nomodeset}} カーネルパラメータと共に、Intel のグラフィックカードでは {{ic|1=i915.modeset=0}} を Nvidia のグラフィックカードでは {{ic|1=nouveau.modeset=0}} をそれぞれ追加する必要があります。Nvidia の Optimus デュアルグラフィック環境では、3つのカーネルパラメータ全てを追加してください (つまり {{ic|1="nomodeset i915.modeset=0 nouveau.modeset=0"}})。
 
{{ic|nomodeset}} カーネルパラメータと共に、Intel のグラフィックカードでは {{ic|1=i915.modeset=0}} を Nvidia のグラフィックカードでは {{ic|1=nouveau.modeset=0}} をそれぞれ追加する必要があります。Nvidia の Optimus デュアルグラフィック環境では、3つのカーネルパラメータ全てを追加してください (つまり {{ic|1="nomodeset i915.modeset=0 nouveau.modeset=0"}})。
   
{{Note|KMS を無効にすると動作しない [[Xorg|Xorg]] ドライバがあります。詳しくはあなたの使っているドライバの wiki ページを見て下さい。}}
+
{{Note|KMS を無効にすると動作しない [[Xorg]] ドライバがあります。詳しくはあなたの使っているドライバの wiki ページを見て下さい。}}

2019年6月8日 (土) 15:44時点における版

関連記事

Kernel Mode Setting (KMS) は、ユーザースペースではなくカーネル空間でディスプレイの解像度・色深度を設定する方法です。

Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など) が有効になります。

ノート: プロプライエタリの NVIDIA ドライバ (364.12 以上) にもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための fbdev ドライバがありません。

背景

昔、ビデオカードをセットアップするのは X サーバーの仕事でした。このため、仮想コンソールで派手なグラフィックを使うことは簡単ではありませんでした。また、X から 仮想コンソール へ切り替えると (Ctrl+Alt+F1)、X サーバーはカーネルにビデオカードのコントロールを移さなくてはならず、動作が重くなりチラツキが生じていました。同じ"痛々しい"挙動はコントロールを X サーバーに戻すときも起こりました (Ctrl+Alt+F7)。

Kernel Mode Setting (KMS) によって、現在カーネルはビデオカードのモードを設定することができます。これによって、起動時からの派手なグラフィックや、バーチャルコンソールと X の早い切り替えなどが可能になりました。

インストール

まず、どの方法を使うにせよ、以下を常時無効にする必要があります:

  • ブートローダ内のあらゆる vga= オプション。KMS によるネイティブ解像度と衝突します。
  • フレームバッファを有効にするあらゆる video= 行。ドライバと衝突します。
  • 他のフレームバッファドライバ (uvesafb など)。

Late KMS start

Intel, Nouveau, ATI, AMDGPU ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。

プロプライエタリの NVIDIA ドライバー (364.12 以上) は KMS をサポートしていますが、手動で有効化する必要があります。

プロプライエタリの AMD Catalyst ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースの AMDGPU ドライバ (古いビデオカードなら ATI ドライバ) に変えてください。

Early KMS start

ヒント: 解像度の問題が発生する場合、モードの強制で問題が解決しないか確認してください。

通常 KMS は initramfs ステージよりも後に初期化されます。起動中にできるだけ早く KMS をロードするには、依存するモジュールを /etc/mkinitcpio.confMODULES 行に追加します。

  • amdgpu AMDGPU ドライバー向け
  • radeon ATI ドライバー (古いモデル向け)
  • i915 Intel 内蔵グラフィック向け
  • nouveau Nouveau オープンソースドライバー向け
  • QEMU のグラフィック出力を使う場合: virtio-gpu VirtIO 用、qxl QXL 用、cirrus Cirrus 用

例えば、Intel 内蔵グラフィックドライバーを利用し、KMS を早期に有効化させるには:

/etc/mkinitcpio.conf
MODULES="... i915 ..."
ノート: Intel ユーザーは ACPI のエラーを出さないために i915 の前に intel_agp を追加する必要があるかもしれません。ディスプレイ設定を変更してハイバネートから復帰する場合は必須になります。

(生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります:

/etc/mkinitcpio.conf
FILES="/usr/lib/firmware/edid/your_edid.bin"

その後カーネルイメージを再生成してください (詳しくは mkinitcpio を参照して下さい):

# mkinitcpio -p <カーネルプリセットの名前; 例 linux>

トラブルシューティング

フォントが小さすぎる

デフォルトフォントを変更する方法を見てコンソールフォントを大きなフォントに代えてください。Terminus フォント (terminus-font) には ter-132n など様々なサイズが含まれています。

もしくはモードセッティングを無効化して解像度を下げることで相対的にフォントは大きくなります。

ブートロードの問題と dmesg

古いシステムでは接続されたディスプレイデバイスのポーリングが重荷になることがあります。ポーリングは定期的に実行されるため、ハードウェアによっては最悪の場合、数百ミリ秒近く時間を取られます。動画を再生するときなど、絵面が止まってしまいます。10秒毎にディスプレイの出力が固まってしまうようなときは、ポーリングを無効化することで解決するかもしれません。

起動中に 0x00000010 (2) のエラーコードが表示される場合 (10行近く表示され、最後にエラーコードが含まれているでしょう)、/etc/modprobe.d/modprobe.conf に次の行を加えて下さい:

options drm_kms_helper poll=0

モードの強制と EDID

あなたの使っているモニターや TV が正しい EDID データを送信しない、またはそれに類似した問題が発生している場合、実効解像度が自動的に設定されなかったり全く画面が表示されなかったりすることがあります。カーネルには EDID のバイナリデータをロードする仕組みがあり、最も一般的な4つの解像度を設定するデータも提供しています。

もしあなたが EDID ファイルを持っているならば話は簡単です。持っていない場合、組み込まれている EDID バイナリ (もしくはカーネルコンパイルで生成するバイナリ、詳細は ここ を参照) のどれか一つを使うか自分で EDID を作って下さい。

(例えばモニタの Windows ドライバから抽出したり read-edidget-edid コマンドを使って取得した) EDID ファイルを持っている場合、/usr/lib/firmware の下に edid ディレクトリを作成して:

# mkdir /usr/lib/firmware/edid

それからバイナリを /usr/lib/firmware/edid ディレクトリにコピーしてください。

起動時にロードするために、カーネルコマンドラインで次を指定してください:

drm_kms_helper.edid_firmware=edid/your_edid.bin

特定の接続だけで使うように指定することも可能です:

drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin

内蔵の4つの解像度を使うには、下の表を見て名前を指定してください:

解像度 指定する名前
800x600 edid/800x600.bin
1024x768 edid/1024x768.bin
1280x1024 edid/1280x1024.bin
1600x1200 (カーネル 3.10 以上) edid/1600x1200.bin
1680x1050 edid/1680x1050.bin
1920x1080 edid/1920x1080.bin

KMS を初期に実行するようにしている場合は、カスタム EDID ファイルを initramfs に含めないと起動時に問題が発生します。

また、カーネルの Documentation/EDID ソースに含まれている makefile を使って自分で EDID を組み立てることもできます。完全な情報は ここそこ で読めます。

警告: 以下の方法は不完全です。Xorg は指定された解像度を使用しなかったりします。上の方法を使うことを推奨します。ただし video= コマンドラインで解像度を指定するのは場合によっては役立ちます。

the nouveau wiki より:

カーネルコマンドラインから強制的にモードを選ぶこともできます。残念ながら、DRM に関するコマンドラインオプションはあまりドキュメント化されていません。使い方の簡単な説明はここにあります:

フォーマットは:

video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
  • <conn>: コネクタ、例: DVI-I-1。利用できる接続は /sys/class/drm/ を見て下さい。
  • <xres> x <yres>: 解像度
  • M: compute a CVT mode?
  • R: reduced blanking?
  • -<bpp>: 色深度
  • @<refresh>: リフレッシュレート
  • i: インターレース化 (non-CVT mode)
  • m: 余白
  • e: 出力強制 ON
  • d: 出力強制 OFF
  • D: デジタル出力強制 ON (e.g. DVI-I connector)

"video" を使うことでアウトプットのモードを上書きすることができます、例えば、DVI 出力、1024x768、85 Hz、TV 出力オフに強制するには:

video=DVI-I-1:1024x768@85 video=TV-1:d

コネクタの名前・状態を取得するために、次のワンライナーを使うことができます:

$ for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
                                                                                         
DVI-I-1: connected
HDMI-A-1: disconnected
VGA-1: disconnected

モードセッティングを無効にする

Catalyst ドライバを使っているときなど、ブランクスクリーンになったりディスプレイに "no signal" エラーがでたりするなどの理由で KMS を無効にしたい時があるかもしれません。KMS を無効にするには、カーネルパラメータに nomodeset を追加します。詳しくはカーネルパラメータを見て下さい。

nomodeset カーネルパラメータと共に、Intel のグラフィックカードでは i915.modeset=0 を Nvidia のグラフィックカードでは nouveau.modeset=0 をそれぞれ追加する必要があります。Nvidia の Optimus デュアルグラフィック環境では、3つのカーネルパラメータ全てを追加してください (つまり "nomodeset i915.modeset=0 nouveau.modeset=0")。

ノート: KMS を無効にすると動作しない Xorg ドライバがあります。詳しくはあなたの使っているドライバの wiki ページを見て下さい。