Difference between revisions of "Kernel Mode Setting (日本語)"

From ArchWiki
Jump to: navigation, search
m (Issue upon bootloading and dmesg)
m (モードの強制と EDID)
(9 intermediate revisions by 2 users not shown)
Line 7: Line 7:
 
[[zh-CN:Kernel Mode Setting]]
 
[[zh-CN:Kernel Mode Setting]]
 
[[zh-TW:Kernel Mode Setting]]
 
[[zh-TW:Kernel Mode Setting]]
{{Article summary start|概括}}
+
{{Related articles start (日本語)}}
{{Article summary text|カーネルモードセッティング (Kernel Mode Setting) の設定に関する情報。}}
+
{{Related2|ATI (日本語)|ATI}}
{{Article summary heading|関連項目}}
+
{{Related2|Intel Graphics (日本語)|Intel Graphics}}
{{Article summary wiki|ATI}}
+
{{Related2|Nouveau (日本語)|Nouveau}}
{{Article summary wiki|Intel Graphics (日本語)}}
+
{{Related articles end}}
{{Article summary wiki|Nouveau}}
+
{{Article summary end}}
+
  
 
Kernel [[Wikipedia:Mode-setting|Mode Setting]] (KMS) は、ユーザースペースではなくカーネル空間でディスプレイの解像度・色深度を設定する方法です。
 
Kernel [[Wikipedia:Mode-setting|Mode Setting]] (KMS) は、ユーザースペースではなくカーネル空間でディスプレイの解像度・色深度を設定する方法です。
  
Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など)が有効になります。
+
Linux カーネルの KMS 機能ではフレームバッファでのネイティブ解像度や素早いコンソール (tty) 切り替えができるようになります。KMS を使うと、歪みを消去したり 3D パフォーマンスの上昇、カーネル空間の電力節約などをもたらす新しい技術 (DRI2 など) が有効になります。
  
{{Note|プロプライエタリの [[NVIDIA|nvidia]] と [[AMD Catalyst|catalyst]] ドライバにもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための fbdev ドライバがありません。}}
+
{{Note|プロプライエタリの [[NVIDIA (日本語)|nvidia]] と [[AMD Catalyst (日本語)|catalyst]] ドライバにもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための fbdev ドライバがありません。}}
  
 
== 背景 ==
 
== 背景 ==
昔、ビデオカードをセットアップするのは X サーバーの仕事でした。このため、バーチャルコンソールで派手なグラフィックを使うことは簡単ではありませんでした。また、X から バーチャルコンソール へ切り替えると ({{Keypress|Ctrl+Alt+F1}})、X サーバーはカーネルにビデオカードのコントロールを移さなくてはならず、動作が重くなりチラツキが生じていました。同じ"痛々しい"挙動はコントロールを X サーバーに戻すときも起こりました ({{Keypress|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 の早い切り替えなどが可能になりました。
Line 32: Line 30:
  
 
=== Late KMS start===
 
=== Late KMS start===
[[Intel Graphics (日本語)|Intel]], [[Nouveau]], [[ATI]] ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。
+
[[Intel Graphics (日本語)|Intel]], [[Nouveau (日本語)|Nouveau]], [[ATI (日本語)|ATI]] ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。
  
プロプライエタリの [[NVIDIA]], [[AMD Catalyst]] ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースドライバに代えてください。
+
プロプライエタリの [[NVIDIA (日本語)|NVIDIA]], [[AMD Catalyst (日本語)|AMD Catalyst]] ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースドライバに代えてください。
  
 
=== Early KMS start ===
 
=== Early KMS start ===
  
起動中にできるだけ早く KMS をロードするには、[[radeon]] (ATI/AMD カード向け)、[[Intel Graphics (日本語)|i915]] (Intel 内蔵グラフィック向け)、[[nouveau]] (Nvidia カード向け) の内どれかのモジュールを、{{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 行に追加します:
+
起動中にできるだけ早く KMS をロードするには、[[ATI (日本語)|radeon]] (ATI/AMD カード向け)、[[Intel Graphics (日本語)|i915]] (Intel 内蔵グラフィック向け)、[[Nouveau (日本語)|nouveau]] (Nvidia カード向け) の内どれかのモジュールを、{{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 行に追加します。例えば:
 +
{{hc|/etc/mkinitcpio.conf|2=MODULES="... i915 ..."}}
 +
(生来の解像度に当てはまらない) カスタム EDID ファイルを使っている場合、同じように initramfs に埋め込む必要があります:
  
{{hc|/etc/mkinitcpio.conf|2=MODULES="i915"
+
{{hc|/etc/mkinitcpio.conf|
'''or'''
+
2=FILES="/lib/firmware/edid/your_edid.bin"}}
MODULES="radeon"
+
'''or'''
+
MODULES="nouveau"}}
+
  
カーネルイメージを再生成します(詳しくは [[mkinitcpio]] を参照して下さい):
+
その後カーネルイメージを再生成してください (詳しくは [[mkinitcpio (日本語)|mkinitcpio]] を参照して下さい):
  
{{bc|# mkinitcpio -p <name of your kernel preset; e.g. ''linux''>}}
+
{{bc|# mkinitcpio -p <カーネルプリセットの名前; ''linux''>}}
  
 
==トラブルシューティング==
 
==トラブルシューティング==
Line 58: Line 55:
 
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.
 
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}} に次の行を加えて下さい:
+
起動中に 0x00000010 (2) のエラーコードが表示される場合 (10行近く表示され、最後にエラーコードが含まれているでしょう)、{{ic|/etc/modprobe.d/modprobe.conf}} に次の行を加えて下さい:
 
  options drm_kms_helper poll=0
 
  options drm_kms_helper poll=0
  
==モードを強制する==
+
==モードの強制と EDID==
 +
{{Note|This section is a WIP. Improvements and corrections are more than welcome}}
 +
 
 +
あなたの使っているモニターや 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 を作って下さい。
 +
 
 +
(例えばモニタの Windows ドライバから展開した) EDID ファイルを持っている場合、{{ic|/lib/firmware}} の下に {{ic|edid}} ディレクトリを作成して:
 +
 
 +
# mkdir /lib/firmware/edid
 +
 
 +
それからバイナリを {{ic|/lib/firmware/edid}} ディレクトリにコピーしてください。
 +
 
 +
起動時にロードするために、カーネルコマンドラインで次を指定してください:
 +
 
 +
{{bc|1=drm_kms_helper.edid_firmware=edid/your_edid.bin}}
 +
 
 +
特定の接続だけで使うように指定することも可能です:
 +
 
 +
{{bc|1=drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin}}
 +
 
 +
内臓の4つの解像度を使うには、下の表を見て名前を指定してください:
 +
 
 +
{| border="1"
 +
|-
 +
| '''解像度''' || '''指定する名前'''
 +
|-
 +
| 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 に含めないと起動時に問題が発生します。
 +
 
 +
また、カーネルの {{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 そこ] で読めます。
 +
 
 +
{{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] より:
 
[http://nouveau.freedesktop.org/wiki/KernelModeSetting the nouveau wiki] より:
  
Line 72: Line 112:
 
  video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
 
  video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
  
*<conn>: 接続端子、例: DVI-I-1、カーネルログを見て下さい。
+
*<conn>: コネクタ、例: DVI-I-1。利用できる接続は {{ic|/sys/class/drm/}} を見て下さい。
 
*<xres> x <yres>: 解像度
 
*<xres> x <yres>: 解像度
 
*M: compute a CVT mode?
 
*M: compute a CVT mode?
Line 84: Line 124:
 
*D: デジタル出力強制 ON (e.g. DVI-I connector)  
 
*D: デジタル出力強制 ON (e.g. DVI-I connector)  
  
You can override the modes of several outputs using "video" several times, for instance, to force DVI to 1024x768 at 85 Hz and TV-out off:  
+
"video" を使うことでアウトプットのモードを上書きすることができます、例えば、DVI 出力、1024x768、85 Hz、TV 出力オフに強制するには:
 
  video=DVI-I-1:1024x768@85 video=TV-1:d
 
  video=DVI-I-1:1024x768@85 video=TV-1:d
 +
 +
コネクタの名前・状態を取得するために、次のワンライナーを使うことができます:
 +
 +
{{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
 +
HDMI-A-1: disconnected
 +
VGA-1: disconnected
 +
}}
  
 
==モードセッティングを無効にする==
 
==モードセッティングを無効にする==
Line 91: Line 139:
 
Catalyst ドライバを使っているときなど、ブランクスクリーンになったりディスプレイに "no signal" エラーがでたりするなどの理由で KMS を無効にしたい時があるかもしれません。KMS を無効にするには、カーネルパラメータに {{ic|nomodeset}} を追加します。詳しくは [[Kernel parameters (日本語)]] を見て下さい。
 
Catalyst ドライバを使っているときなど、ブランクスクリーンになったりディスプレイに "no signal" エラーがでたりするなどの理由で KMS を無効にしたい時があるかもしれません。KMS を無効にするには、カーネルパラメータに {{ic|nomodeset}} を追加します。詳しくは [[Kernel parameters (日本語)]] を見て下さい。
  
モードセッティングをするには {{Pkg|xf86-video-modesetting}} を[[Pacman (日本語)|インストール]]する必要があります。
+
{{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 ページを見て下さい。}}

Revision as of 04:38, 19 January 2014

Template:Related articles start (日本語)

  • ATI
  • Intel Graphics
  • Nouveau
  • </ul></div>

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

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

    Note: プロプライエタリの nvidiacatalyst ドライバにもカーネルモードセッティング機能はありますが、カーネル固有の機能は使っていないため、高解像度コンソールのための 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 ドライバでは既に全てのチップセットで KMS が自動的に有効になっています。そのため手動でインストールする必要はありません。

    プロプライエタリの NVIDIA, AMD Catalyst ドライバはオープンドライバスタックを使いません。KMS を使うにはオープンソースドライバに代えてください。

    Early KMS start

    起動中にできるだけ早く KMS をロードするには、radeon (ATI/AMD カード向け)、i915 (Intel 内蔵グラフィック向け)、nouveau (Nvidia カード向け) の内どれかのモジュールを、/etc/mkinitcpio.confMODULES 行に追加します。例えば:

    /etc/mkinitcpio.conf
    MODULES="... i915 ..."

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

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

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

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

    トラブルシューティング

    フォントが小さすぎる

    デフォルトフォントを変更する方法を見てコンソールフォントを大きなフォントに代えてください。[community] にある端末用フォントには大きいものを含む様々なサイズがあります。

    ブートロードの問題と dmesg

    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行近く表示され、最後にエラーコードが含まれているでしょう)、/etc/modprobe.d/modprobe.conf に次の行を加えて下さい:

    options drm_kms_helper poll=0
    

    モードの強制と EDID

    Note: This section is a WIP. Improvements and corrections are more than welcome

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

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

    (例えばモニタの Windows ドライバから展開した) EDID ファイルを持っている場合、/lib/firmware の下に edid ディレクトリを作成して:

    # mkdir /lib/firmware/edid
    

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

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

    drm_kms_helper.edid_firmware=edid/your_edid.bin

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

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

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

    解像度 指定する名前
    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 を組み立てることもできます。完全な情報は ここそこ で読めます。

    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 video= command line may be useful in some scenarios

    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 を追加します。詳しくは Kernel parameters (日本語) を見て下さい。

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

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