「カーネルモード設定」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://git.kernel.org/」を「https://git.kernel.org/」に置換) |
(→インストール: 英語版と同期、一覧表示方法変更) |
||
35行目: | 35行目: | ||
プロプライエタリの [[NVIDIA]] ドライバー (364.12 以上) は KMS をサポートしていますが、[[NVIDIA#DRM カーネルモードセッティング|手動で有効化]]する必要があります。 |
プロプライエタリの [[NVIDIA]] ドライバー (364.12 以上) は KMS をサポートしていますが、[[NVIDIA#DRM カーネルモードセッティング|手動で有効化]]する必要があります。 |
||
− | プロプライエタリの [[AMD Catalyst]] ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースの [[ATI]] ドライバに変えてください。 |
+ | プロプライエタリの [[AMD Catalyst]] ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースの [[AMDGPU]] ドライバ (古いビデオカードなら [[ATI]] ドライバ) に変えてください。 |
=== Early KMS start === |
=== Early KMS start === |
||
41行目: | 41行目: | ||
{{Tip|解像度の問題が発生する場合、[[#モードの強制と EDID|モードの強制]]で問題が解決しないか確認してください。}} |
{{Tip|解像度の問題が発生する場合、[[#モードの強制と EDID|モードの強制]]で問題が解決しないか確認してください。}} |
||
− | 通常 KMS は [[Arch ブートプロセス#initramfs|initramfs ステージ]]よりも後に初期化されます。起動中にできるだけ早く KMS をロードするには、 |
+ | 通常 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 ..."}} |
||
{{Note|Intel ユーザーは ACPI のエラーを出さないために {{ic|i915}} の前に {{ic|intel_agp}} を追加する必要があるかもしれません。ディスプレイ設定を変更してハイバネートから復帰する場合は必須になります。}} |
{{Note|Intel ユーザーは ACPI のエラーを出さないために {{ic|i915}} の前に {{ic|intel_agp}} を追加する必要があるかもしれません。ディスプレイ設定を変更してハイバネートから復帰する場合は必須になります。}} |
||
− | (生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります: |
+ | (生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように [[initramfs]] に埋め込む必要があります: |
{{hc|/etc/mkinitcpio.conf| |
{{hc|/etc/mkinitcpio.conf| |
2019年6月8日 (土) 15:44時点における版
関連記事
Kernel Mode Setting (KMS) は、ユーザースペースではなくカーネル空間でディスプレイの解像度・色深度を設定する方法です。
Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など) が有効になります。
目次
背景
昔、ビデオカードをセットアップするのは 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.conf
の MODULES
行に追加します。
amdgpu
AMDGPU ドライバー向けradeon
ATI ドライバー (古いモデル向け)i915
Intel 内蔵グラフィック向けnouveau
Nouveau オープンソースドライバー向け- QEMU のグラフィック出力を使う場合:
virtio-gpu
VirtIO 用、qxl
QXL 用、cirrus
Cirrus 用
例えば、Intel 内蔵グラフィックドライバーを利用し、KMS を早期に有効化させるには:
/etc/mkinitcpio.conf
MODULES="... i915 ..."
(生来の解像度に当てはまらない) カスタム 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-edid の get-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 を組み立てることもできます。完全な情報は ここ や そこ で読めます。
the nouveau wiki より:
カーネルコマンドラインから強制的にモードを選ぶこともできます。残念ながら、DRM に関するコマンドラインオプションはあまりドキュメント化されていません。使い方の簡単な説明はここにあります:
- https://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt
- https://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c
フォーマットは:
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"
)。