https://wiki.archlinux.jp/api.php?action=feedcontributions&user=AshMyzk&feedformat=atom
ArchWiki - 利用者の投稿記録 [ja]
2024-03-28T13:38:27Z
利用者の投稿記録
MediaWiki 1.34.0
https://wiki.archlinux.jp/index.php?title=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3&diff=36676
スクリーンキャプチャ
2024-03-28T11:11:09Z
<p>AshMyzk: /* X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする */ パッケージリンクを更新</p>
<hr />
<div>[[Category:システム管理]]<br />
[[Category:マルチメディア]]<br />
[[cs:Taking a screenshot]]<br />
[[en:Taking a screenshot]]<br />
[[es:Taking a screenshot]]<br />
[[fr:Capture d'écran]]<br />
[[ru:Taking a screenshot]]<br />
[[zh-hans:Taking a screenshot]]<br />
{{Related articles start}}<br />
{{Related|キーボードショートカット#カスタマイズ}}<br />
{{Related articles end}}<br />
この記事では、[[Wikipedia:ja:スクリーンショット|スクリーンショット]]と[[Wikipedia:ja:スクリーンキャスト|スクリーンキャスト]]のソフトウェアを一覧にして解説しています。<br />
<br />
== スクリーンショットソフトウェア ==<br />
<br />
=== 専用のソフトウェア ===<br />
<br />
* {{App|CoreShot|X11 用のシンプルで軽量なスクリーンキャプチャユーティリティ。C-Suite |https://cubocore.org/|{{AUR|coreshot}}}}<br />
* {{App|Deepin Screenshot|とても使いやすいスクリーンショットツール。機能: スクリーンショットツールを発動するホットキー、選択した領域のスクリーンショットの取得、スクリーンショットに文章や線画を簡単に追加。Python/Qt5 ベース。|https://www.deepin.org/|{{Pkg|deepin-screenshot}}}}<br />
* {{App|Escrotum|pygtk を使用して画面をキャプチャ。scrot の影響を受けています。|https://github.com/Roger/escrotum|{{AUR|escrotum-git}}}}<br />
* {{App|Flameshot|インタラクティブにスクリーンショットを取得できる Qt5 ベースのソフトウェア。取得したいエリアを選択して様々なツールで落書きしたりカスタマイズする機能があります。|https://github.com/lupoDharkael/flameshot|{{Pkg|flameshot}}}}<br />
* {{App|gnome-screenshot|dconf, gtk3, libcanberra にしか依存しないため GNOME 以外でも使えます。|http://gnome.org|{{Pkg|gnome-screenshot}}}}<br />
* {{App|gscreenshot|シンプルな GTK スクリーンショットユーティリティ。遅延時間を設定したり範囲選択・クリップボードにコピーする機能があります。|https://github.com/thenaterhood/gscreenshot|{{AUR|gscreenshot}}}}<br />
* {{App|imgur-screenshot|スクリーンショットを取得して [http://imgur.com imgur] にアップロードするツール。|https://github.com/jomo/imgur-screenshot|{{AUR|imgur-screenshot-git}}}}<br />
* {{App|KShare|ShareX の影響を受けているクロスプラットフォームのユーティリティ。Qt で書かれています。|https://kshare.arsenarsen.com|{{AUR|kshare}}}}<br />
* {{App|Lightscreen|退屈なスクリーンショットの保存とカタログ化を自動化するシンプルなツール。表には現れないバックグラウンドプロセスとして動作し、(複数の) ホットキーで呼び出してスクリーンショットファイルをユーザーの設定にあわせてディスクに保存する。|http://lightscreen.com.ar|{{AUR|lightscreen}}}}<br />
* {{App|maim|スクリーンショットを取得するシンプルなコマンドラインユーティリティ。scrot を置き換えるものとして様々な点で scrot よりも優れています。|https://github.com/naelstrof/maim|{{Pkg|maim}}}}<br />
* {{App|screencloud|画面全体のスクリーンショットや領域を選択して撮影し、[http://imgur.com imgur]+auth にスクリーンショットをアップロードできるツール。プラグインとシステムトレイが付属。|http://screencloud.net/|{{AUR|screencloud}}}}<br />
* {{App|screengrab|スクリーンショットを手軽に取得するためのクロスプラットフォームのアプリケーション (Qt)。|http://screengrab.doomer.org/|{{Pkg|screengrab}}}}<br />
* {{App|[[Wikipedia:Scrot|Scrot]]|X 向けのシンプルなコマンドラインスクリーンショットユーティリティ。|http://freecode.com/projects/scrot|{{Pkg|scrot}}}}<br />
* {{App|Shutter|リッチなスクリーンショット・編集プログラム。|http://shutter-project.org/|{{Pkg|shutter}}}}<br />
* {{App|Spectacle|スクリーンショットを撮るための [[KDE]] のアプリケーション。デスクトップ全体、単一のウィンドウ、ウィンドウの一部、四角形またはフリーハンドで指定した領域の画面をキャプチャすることができます。{{Grp|kdegraphics}}{{Broken package link|パッケージが存在しません}} に含まれています。|https://github.com/KDE/spectacle/|{{Pkg|spectacle}}}}<br />
* {{App|Xfce4 Screenshooter|画面全体、アクティブウィンドウ、または選択領域のキャプチャを行えます。スクリーンショットを撮るまでの待機時間とスクリーンショットを撮った後の動作を設定できます: PNG ファイルに保存、クリップボードにコピー、別のアプリケーションで開く、無料の画像ホスティングサービスである Imgur や ZimageZ にアップロード。{{Grp|xfce4-goodies}} に含まれています。|https://goodies.xfce.org/projects/applications/xfce4-screenshooter|{{Pkg|xfce4-screenshooter}}}}<br />
* {{App|xwd|X Window System イメージダンプユーティリティ。|http://xorg.freedesktop.org/|{{Pkg|xorg-xwd}}}}<br />
<br />
==== xwd ====<br />
<br />
{{man|1|xwd}} is provided by {{Pkg|xorg-xwd}}.<br />
<br />
ルートウィンドウのスクリーンショットを撮るには:<br />
<br />
$ xwd -root -out screenshot.xwd<br />
<br />
{{Tip|スクリーンショットを撮る前に遅延を取得するには、{{ic|sleep}} コマンドを使用します。例: {{ic|sleep 5; xwd ...}}}}<br />
<br />
==== scrot ====<br />
<br />
{{Pkg|scrot}} を使用すると、CLI からスクリーンショットを取得できるようになり、ユーザー定義可能な遅延時間などの機能が提供されます。特に指示がない限り、ファイルは現在の作業ディレクトリに保存されます。<br />
<br />
$ scrot -t 20 -d 5<br />
<br />
上記のコマンドは、Web 投稿用にサムネイル (元の 20%) とともに日付付きの ''.png'' ファイルを保存します。この場合、キャプチャする前に 5 秒の遅延を発生させます。<br />
<br />
ファイルに保存するときに、標準の日付と時刻の書式設定を使用することもできます。例えば、<br />
<br />
$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png<br />
<br />
スクリーンショットを現在の年、月、日、時、分、秒を含むファイル名でホーム ディレクトリ内の "screenshots" というフォルダーに保存します。<br />
<br />
詳細については、{{man|1|scrot}} を参照してください。<br />
<br />
{{Note|一部のウィンドウ マネージャー ({{AUR|dwm}}、{{Pkg|xmonad}}、およびおそらくその他) では、ウィンドウマネージャーのキーボード ショートカット経由で実行すると、{{ic|scrot -s}} が正しく動作しませんが、scrot の呼び出しの前に短い一時停止を追加することで、{{ic|sleep 0.2; scrot -s}} 回避できます。}}<br />
<br />
==== escrotum ====<br />
<br />
{{AUR|escrotum-git}} scrot からインスピレーションを得た、PyGTK を使用した画面キャプチャ<br />
<br />
ウィンドウを更新して選択モードを使用すると scrot に不具合が生じるため作成されました。<br />
<br />
コマンドラインインターフェイスは scrot とほぼ同じなので、代替として使用できます。<br />
<br />
==== maim ====<br />
<br />
{{Pkg|maim}} は、改善された scrot であることを目指しています。<br />
<br />
全画面をファイルに保存します。<br />
<br />
$ maim ''filename''<br />
<br />
選択を求めてからファイルに保存します。<br />
<br />
$ maim --select ''filename''<br />
<br />
{{Pkg|xdotool}} がインストールされていると仮定して、アクティブなウィンドウをファイルに保存します。<br />
<br />
$ maim --window $(xdotool getactivewindow) ''filename''<br />
<br />
{{Pkg|xclip}} がインストールされていると仮定して、選択を求め、カーソルを使用せずに保存し、クリップボードに保存します。<br />
<br />
$ maim -s | xclip -selection clipboard -t image/png -i<br />
<br />
=== デスクトップ環境による方法 ===<br />
<br />
==== Spectacle ====<br />
<br />
[[KDE]] を使っている場合、{{ic|Spectacle}} を使用すると良いでしょう。{{ic|Prnt Scr}} で使うことができます。<br />
<br />
Spectacle は {{Pkg|spectacle}} に入っています。<br />
<br />
==== Xfce Screenshooter ====<br />
<br />
[[Xfce]] を使っている場合 {{Pkg|xfce4-screenshooter}} をインストールしてキーボードバインディングを追加することができます:<br />
<br />
''Xfce Menu > Settings > Keyboard > Application Shortcuts''<br />
<br />
Screenshot プロンプトをスキップしたい場合は、オプションのターミナルに {{ic|$ xfce4-screenshooter -h}} と入力してください。<br />
<br />
==== GNOME ====<br />
<br />
[[GNOME]] ユーザーは {{ic|Prnt Scr}} を押すか ''Apps > Accessories > Take Screenshot'' でスクリーンショットが取れます。{{Pkg|gnome-screenshot}} をインストールする必要があります。<br />
<br />
==== Cinnamon ====<br />
<br />
[[Cinnamon]] はデフォルトでスクリーンショットユーティリティがインストールされません。{{Pkg|gnome-screenshot}} をインストールするとスクリーンショットが有効になり、''Menu > Accessories > Screenshot'' または {{ic|Prnt Scr}} を押すことで撮影できるようになります。<br />
<br />
==== 他のデスクトップ環境やウィンドウマネージャ ====<br />
<br />
[[LXDE]] などのデスクトップ環境や [[Openbox]] や [[Compiz]] などのウィンドウマネージャの場合、上述のコマンドをホットキーに追加してスクリーンショットを撮影することができます。例えば:<br />
$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png<br />
上のコマンドを {{ic|Prnt Scr}} キーに追加すれば Compiz でスクリーンショットを取得して Pictures フォルダに日付を付けて保存できます。Openbox の {{ic|rc.xml}} ファイルではコンマを使えないので、Openbox でこのコマンドを {{ic|Prnt Scr}} キーに指定するには、{{ic|rc.xml}} ファイルのキーボードセクションに以下を追加する必要があります:<br />
<br />
{{hc|rc.xml|<nowiki><br />
<!-- Screenshot --><br />
<keybind key="Print"><br />
<action name="Execute"><br />
<command>sh -c "import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png"</command><br />
</action><br />
</keybind><br />
</nowiki>}}<br />
<br />
上記の {{ic|Print}} が動作しない場合、[[特別なキーボードキー]]をみて、別の''キーシム''や''キーコード''を使って下さい。<br />
[[LXDE]] などのデスクトップ環境や [[Openbox]] や [[Compiz]] などのウィンドウマネージャの場合、上述のコマンドをホットキーに追加してスクリーンショットを撮影することができます。例えば:<br />
$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png<br />
上のコマンドを {{ic|Prnt Scr}} キーに追加すれば Compiz でスクリーンショットを取得して Pictures フォルダに日付を付けて保存できます。Openbox の {{ic|rc.xml}} ファイルではコンマを使えないので、Openbox でこのコマンドを {{ic|Prnt Scr}} キーに指定するには、{{ic|rc.xml}} ファイルのキーボードセクションに以下を追加する必要があります:<br />
<br />
{{hc|rc.xml|<nowiki><br />
<!-- Screenshot --><br />
<keybind key="Print"><br />
<action name="Execute"><br />
<command>sh -c "import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png"</command><br />
</action><br />
</keybind><br />
</nowiki>}}<br />
<br />
上記の {{ic|Print}} が動作しない場合、[[特別なキーボードキー]]をみて、別の''キーシム''や''キーコード''を使って下さい。<br />
<br />
=== スクリーンショットユーティリティが含まれているパッケージ ===<br />
<br />
==== ImageMagick/GraphicsMagick ====<br />
<br />
See [[ImageMagick#Screenshot taking]].<br />
<br />
==== GIMP ====<br />
<br />
GIMP を使ってスクリーンショットを取得することもできます (''File > Create > Screenshot''...)。<br />
<br />
==== imlib2 ====<br />
<br />
{{Pkg|imlib2}} にはスクリーンショットを取得するためのバイナリ {{ic|imlib2_grab}} が含まれています。フルスクリーンのスクリーンショットを取得するには、次を入力:<br />
<br />
$ imlib2_grab screenshot.png<br />
<br />
==== FFmpeg ====<br />
<br />
[[FFmpeg#スクリーンキャプチャ]]を参照。<br />
<br />
== 一般的な方法 ==<br />
<br />
=== ImageMagick/GraphicsMagick ===<br />
<br />
{{ic|import}} コマンドを使うことで現在のシステムのスクリーンショットを簡単に取得できます:<br />
$ import -window root screenshot.jpg<br />
<br />
{{ic|import}} は {{Pkg|imagemagick}} パッケージに入っています。<br />
<br />
{{ic|-window}} オプションを付けずに {{ic|import}} を実行するとウィンドウや任意の領域をインタラクティブに選択することが可能です。<br />
<br />
{{Note|'''graphicsmagick''' を使いたい場合は、"gm" を前に付けて下さい、例: {{ic|$ gm import -window root screenshot.jpg}}。}}<br />
<br />
==== 複数の X 画面のスクリーンショット ====<br />
<br />
twinview または dualhead で使っている場合、2回スクリーンショットを取得して {{Ic|imagemagick}} を使って貼り付けます:<br />
{{bc|<br />
import -window root -display :0.0 -screen /tmp/0.png<br />
import -window root -display :0.1 -screen /tmp/1.png<br />
convert +append /tmp/0.png /tmp/1.png screenshot.png<br />
rm /tmp/{0,1}.png<br />
}}<br />
<br />
==== Xinerama ヘッドのスクリーンショット ====<br />
<br />
Xinerama による multi-head セットアップでは仮想スクリーンが一つしかありません。物理的なスクリーンの高さに違いがあると、スクリーンショットにデッドスペースが出来てしまいます。こういう場合、それぞれの物理的なスクリーンごとにスクリーンショットを取得すると良いでしょう。Xinerama の情報が X サーバーから取り出せていれば、以下のスクリプトが動作します:<br />
{{bc|<nowiki><br />
#!/bin/sh<br />
xdpyinfo -ext XINERAMA | sed '/^ head #/!d;s///' |<br />
while IFS=' :x@,' read i w h x y; do<br />
import -window root -crop ${w}x$h+$x+$y head_$i.png<br />
done<br />
</nowiki>}}<br />
<br />
==== アクティブなウィンドウ/フォーカスしたウィンドウのスクリーンショット ====<br />
<br />
以下のスクリプトは現在フォーカスされているウィンドウのスクリーンショットを取得します。EWMH/NetWM 準拠の X ウィンドウマネージャで動作します。スクリーンショットを上書きしないように、ファイル名に取得時刻を使っています。<br />
{{bc|<nowiki><br />
#!/bin/sh<br />
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")<br />
activeWinId=${activeWinLine:40}<br />
import -window "$activeWinId" /tmp/$(date +%F_%H%M%S_%N).png<br />
</nowiki>}}<br />
<br />
もしくは、次のコマンドは EWMH をサポートしているかどうかに関わらず動作します:<br />
$ import -window "$(xdotool getwindowfocus -f)" /tmp/$(date +%F_%H%M%S_%N).png<br />
<br />
{{Note|(dwb や zathura) プログラムのスクリーンショットが空になる場合は、{{ic|xdotool}} コマンドに {{ic|-frame}} を付けたり {{ic|-f}} を削除してみてください。}}<br />
<br />
=== xwd ===<br />
<br />
ルートウィンドウのスクリーンショットを取得:<br />
$ xwd -root -out screenshot.xwd<br />
<br />
{{Note|{{ic|import}} でアクティブウィンドウのスクリーンショットを取得する方法でも {{ic|xwd}} を使うことができます。}}<br />
<br />
=== scrot ===<br />
<br />
{{Pkg|scrot}} を使えば CLI からスクリーンショットを撮ることができ、シャッターを押すまでの待機時間をユーザーが定義できるなどの機能があります。特に指定がなければ、カレントディレクトリにファイルが保存されます。<br />
$ scrot -t 20 -d 5<br />
<br />
上記のコマンドは日付が入った {{ic|.png}} ファイルが作成され、ウェブ投稿用にサムネイルも作られます (元の画像の 20%)。上の例ではキャプチャするまで5秒間待ちます。<br />
<br />
ファイルに保存するときに標準的な日付のフォーマットを使うこともできます、例えば:<br />
$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png<br />
<br />
このコマンドではホームディレクトリの "screenshots" という名前のフォルダに、現在の年・月・日・時間・分・秒がファイル名のスクリーンショットが保存されます。<br />
<br />
詳しくは {{man|1|scrot}} を見て下さい。[https://github.com/kaihendry/Kai-s--HOME/tree/master/bin] のようにファイルのアップロードを自動化することもできます。<br />
<br />
{{Note|一部のウィンドウマネージャでは ([[dwm]] や [[xmonad]] など)、{{ic|scrot -s}} がウィンドウマネージャのキーボードショートカットで正しく動作しないことがあります。scrot を実行する前に短いポーズを挟むことで問題を解決できます: {{ic|sleep 0.2; scrot -s}}。}}<br />
<br />
=== escrotum ===<br />
<br />
{{AUR|escrotum-git}} は pygtk を使って画面をキャプチャします。scrot にインスパイアされています。<br />
<br />
選択モードを使った時に scrot ではウィンドウのリフレッシュでバグが発生するので開発されました。<br />
<br />
コマンドラインインターフェースは scrot とほぼ同じなので、そのまま同じように使うことができます。<br />
<br />
=== maim ===<br />
<br />
{{Pkg|maim}} は scrot の向上版を目指しています。<br />
<br />
scrot の欠点を補っており [https://github.com/naelstrof/slop slop] で領域のスクリーンショットを取得します。<br />
<br />
=== FFmpeg ===<br />
<br />
[[FFmpeg]] は X11 のスクリーンをキャプチャできる x11grab デバイスを提供しています。<br />
<br />
ディスプレイの''横幅''x''高さ''を指定してスクリーンショットを取得:<br />
<br />
$ ffmpeg -f x11grab -video_size ''width''x''height'' -i $DISPLAY -vframes 1 screen.png<br />
<br />
上記のコマンドでは PNG コーデック (ロスレスでスクリーンショットに向いている) を使っていますが、他の画像コーデックも使うことができます。<br />
<br />
同じデバイスを使ってスクリーンキャストも可能です (ディスプレイのリフレッシュレートを ''rate'' HZ で指定):<br />
<br />
$ ffmpeg -f x11grab -video_size ''width''x''height'' -framerate ''rate'' -i $DISPLAY -c:v libx264 -preset ultrafast cast.mkv<br />
<br />
上記のコマンドでは、エンコード速度が一番高速な x264 コーデックを使っていますが、他のコーデックも使えます。ただし (ディスクのパフォーマンスが足りなかったりエンコードが遅かったりして) フレームの書き込みが遅すぎると、フレームが抜け落ちて出力された動画は飛び飛びになります。<br />
<br />
=== Weston ===<br />
<br />
Wayland のコンポジットマネージャである [[Weston]] では、{{ic|Super+s}} を押すことでスクリーンショットを撮影することができ、Weston の現在の作業ディレクトリに保存されます。スクリーンキャストもサポートされています。録画の開始と停止は {{ic|Super+r}} を押すことで行われ、Weston の現在の作業ディレクトリに {{ic|capture.wcap}} という名前のファイルが作成されます。{{ic|wcap-decode --yuv4mpeg2 capture.wcap}} を実行することでキャプチャを YUV フォーマットにデコードできます。このコマンドの出力をファイルに書き込んだり、FFmpeg にパイプして更に処理を加えることもできます。<br />
<br />
== スクリーンキャスト ソフトウェア ==<br />
<br />
[[FFmpeg#スクリーンキャプチャ]] と [[Wikipedia:Comparison of screencasting software]] も参照してください。<br />
<br />
スクリーンキャストユーティリティは、デスクトップや個々のウィンドウのビデオを作成することができます。<br />
<br />
* {{App|Byzanz|GIF アニメーションを作成するシンプルなスクリーンキャストツール。|https://gitlab.gnome.org/Archive/byzanz|{{Pkg|byzanz}}}}<br />
* {{App|Deepin Screen Recorder|Deepin デスクトップ用のスクリーンレコーダーアプリケーション。|https://www.deepin.org/en/original/deepin-screen-recorder/|{{Pkg|deepin-screen-recorder}}}}<br />
* {{App|FFcast|Bash で書かれた FFmpeg ベースのスクリーンキャストツール。|https://github.com/lolilolicon/FFcast|{{AUR|ffcast}}}}<br />
* {{App|Gpu Screen Recorder|Nvidia ShadowPlay に匹敵する、パフォーマンスを大幅に向上させるためだけに GPU でビデオをキャプチャするスクリーンレコーダー。ライブストリーミングとリプレイバッファもサポートします。現在は NVIDIA に限定されています。|https://git.dec05eba.com/gpu-screen-recorder-gtk/about/|{{AUR|gpu-screen-recorder-gtk-git}}}}<br />
* {{App|Green Recorder|Linux システム用のシンプルかつ機能的なデスクトップレコーダー。|https://github.com/dvershinin/green-recorder|{{AUR|green-recorder}}}}<br />
* {{App|Kazam|デザインを念頭に置いたスクリーンキャストプログラム。マルチスクリーン設定を処理します。|https://launchpad.net/kazam|{{AUR|kazam}}}}<br />
* {{App|Kooha|最小限の GTK インターフェースを備えたシンプルなスクリーンレコーダー。|https://github.com/SeaDve/Kooha|{{Pkg|kooha}}}}<br />
* {{App|menyoki|コマンドラインでスクリーンショット {ショット、キャスト} を実行し、ImageOpsを実行します。|https://github.com/orhun/menyoki|{{Pkg|menyoki}}}}<br />
* {{App|[[Open Broadcaster Software]]|ビデオ録画およびライブストリーミングアプリケーション。|https://obsproject.com/|{{Pkg|obs-studio}}}}<br />
:* {{AUR|obs-gnome-screencast}} – GNOME スクリーンキャスト機能用のプラグイン、Wayland をサポート<br />
* {{App|[[Wikipedia:Peek_(software)|Peek]]|GIF、APNG、WebM、または MP4 アニメーションを生成するシンプルなスクリーンキャストツール。|https://github.com/phw/peek|{{Pkg|peek}}}}<br />
* {{App|RecApp|GTK で書かれたユーザーフレンドリーなスクリーンキャスター。無料の GStreamer モジュールを使用し、FFmpeg に依存しません。|https://github.com/amikha1lov/RecApp|{{AUR|recapp-git}}}} <br />
* {{App|RecordItNow|KDE 4 用のプラグインベースのデスクトップレコーダー。|http://recorditnow.sourceforge.net/|{{AUR|recorditnow}}}}<br />
* {{App|[[RecordMyDesktop]]|CLI、GTK、または Qt インターフェイスを使用してデスクトップを ogg 形式に記録する使いやすいユーティリティです。(開発はアクティブではありません)|http://recordmydesktop.sourceforge.net/|CLI: {{Pkg|recordmydesktop}}, GTK: {{AUR|gtk-recordmydesktop}}, Qt: {{AUR|qt-recordmydesktop}}}}<br />
* {{App|screencast|FFmpeg を使用して X11 デスクトップを記録するためのコマンドラインインターフェイス。オフライン記録とライブストリーミングをサポートします。|https://github.com/dbermond/screencast/|{{AUR|screencast}}}}<br />
* {{App|Screencast|基本的な OS 向けに設計されたシンプルなスクリーンキャストレコーダー。|https://github.com/artemanufrij/screencast|{{AUR|pantheon-screencast}}}}<br />
* {{App|[[Wikipedia:SimpleScreenRecorder|SimpleScreenRecorder]]|X11 および OpenGL をサポートする C++/Qt5 で書かれた機能豊富なスクリーンレコーダー。|https://www.maartenbaert.be/simplescreenrecorder/|{{AUR|simplescreenrecorder}}}}<br />
* {{App|Spectacle|スクリーン {ショット,キャスト} 用の [[KDE]] アプリケーション。Wayland 上のデスクトップ全体、単一の画面、または単一のウィンドウのビデオ (音声なし) をキャプチャできます。{{Grp|kde-graphics}} の一部。|https://invent.kde.org/graphics/spectacle|{{Pkg|spectacle}}}}<br />
* {{App|VokoScreen|GStreamer を使用したシンプルなスクリーンキャスト GUI ツール。|https://linuxecke.volkoh.de/vokoscreen/vokoscreen.html|{{Pkg|vokoscreen}}}}<br />
* {{App|Wayfarer|GNOME / Wayland / Pipewire 用の GTK4 スクリーンレコーダー。|https://github.com/stronnag/wayfarer|{{AUR|wayfarer}}}}<br />
* {{App|[[Wikipedia:XVidCap|XVidCap]]|X Window System の画面出力を音声ナレーション付きでスクリーンキャストまたはデジタル録音するためのアプリケーション。|http://xvidcap.sourceforge.net/|{{AUR|xvidcap}}}}<br />
<br />
== Wayland ==<br />
<br />
Wlroots ベースのコンポジタでは、{{Pkg|grim}} や {{AUR|grimshot}} ({{Pkg|sway}} パッケージも {{ic|/usr/share/sway/scripts/}} 内に ''grimshot'' を提供しています) でスクリーンショットを撮ることができます。動画は、{{Pkg|wf-recorder}} (または {{AUR|wf-recorder-git}}) で撮ることができます。さらに、{{AUR|wlrobs-hg}} は、wlroot ベースのコンポジタでのスクリーンキャプチャーを可能にする {{Pkg|obs-studio}}プラグインです。また任意で、{{Pkg|slurp}} をキャプチャする画面領域を選択するために使用できます。GPU が [[VA-API]] エンコードをサポートしている場合、{{Pkg|wf-recorder}} の代わりに {{AUR|wl-screenrec-git}} を使えば、より高速に動作するかもしれません。<br />
<br />
画面全体のスクリーンショットを撮る:<br />
<br />
$ grim screenshot.png<br />
<br />
Sway で現在のウィンドウのスクリーンショットを撮る:<br />
<br />
$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - screenshot.png<br />
<br />
[[Hyprland]] で現在のウィンドウのスクリーンショットを撮る:<br />
<br />
$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.png<br />
<br />
画面の一部のスクリーンショットを撮る:<br />
<br />
$ slurp | grim -g - screenshot.png<br />
<br />
画面の一部のスクリーンショットを攝り、{{Pkg|wl-clipboard}} を使ってクリップボートに貼り付ける:<br />
<br />
$ slurp | grim -g - - | wl-copy<br />
<br />
画面全体の動画を撮る:<br />
<br />
$ wf-recorder -f recording.mp4<br />
<br />
画面の一部の動画を撮る:<br />
<br />
$ wf-recorder -g "$(slurp)"<br />
<br />
{{Tip|<br />
* [https://github.com/de-arl/slurpshot slurpshot] は、{{Pkg|bemenu}} を使用するインタラクティブなスクリーンショットスクリプトです。<br />
* {{Pkg|swappy}} などの、スクリーンショット後に画像の編集・描画ツールを使うには: {{ic|grim -g "$(slurp)" - {{!}} swappy -f -}}<br />
}}<br />
<br />
また、上記の一部のプログラムは Wayland でのみ動作します (例: {{Pkg|ksnip}}、{{AUR|green-recorder}})。<br />
<br />
=== スクリーンキャスト ===<br />
<br />
==== GNOME screencast を使う ====<br />
<br />
{{AUR|green-recorder}}、{{AUR|obs-gnome-screencast}}、及び {{Pkg|obs-studio}} は、GNOME screencast 機能を使用した Wayland での画面録画をサポートしています。<br />
<br />
==== Hyprland を使う ====<br />
<br />
[[Hyprland]] ウィンドウマネージャでは、{{Pkg|xdg-desktop-portal-hyprland}} を使用している場合、[[OBS]] でスクリーンキャストと録画を行うことができます (個々のウィンドウやワークスペースの選択も可)。[https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/]<br />
<br />
==== 仮想 Web カメラのビデオフィードを使う ====<br />
<br />
[[v4l2loopback#wf-recorder を使って Wayland をキャストする]] を参照してください。<br />
<br />
{{Tip|<br />
* この方法は、{{AUR|zoom}} デスクトップクライアントを {{Pkg|xorg-xwayland}} で動作させたケースと、[https://bigbluebutton.org/ BigBlueButton] を {{Pkg|chromium}} 内で動作させたケース ({{Pkg|firefox}} では解像度が低い) でテストされました。{{AUR|skypeforlinux-stable-bin}} は、仮想ビデオデバイス {{ic|VirtualVideoDevice}} を検出しますが、空の画面しか出力しません。<br />
* この例では {{ic|wf-recorder}} を使用していますが、その他のソフトウェアも使用できます。単に出力を仮想デバイスに流すだけです。<br />
}}<br />
<br />
{{Pkg|wf-recorder}} (または {{AUR|wf-recorder-git}}) および {{Pkg|v4l2loopback-dkms}} をインストールしてください。そして、以下のパラメータを指定して {{ic|v4l2loopback}} カーネルモジュールをロードしてください:<br />
<br />
# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice<br />
<br />
新しい仮想ビデオデバイス {{ic|VirtualVideoDevice}} が作成されたことを確認してください:<br />
<br />
{{hc|$ v4l2-ctl --list-devices|<br />
...<br />
VirtualVideoDevice (platform:v4l2loopback-000):<br />
/dev/video2<br />
... <br />
}}<br />
<br />
{{ic|wf-recorder}} で画面の録画を開始し、{{ic|v4l2loopback}} によって作成された新しい仮想ビデオデバイス {{ic|VirtualVideoDevice}} に出力を送ってください:<br />
<br />
$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p<br />
<br />
ここで {{ic|yuv420p}} 色空間を使用しているのは、映像出力に Zoom との互換性を持たせるためです。[https://github.com/ammen99/wf-recorder/pull/43]<br />
<br />
{{Tip|{{ic|Unknown V4L2 pixel format equivalent for rgb0}} というエラーが発生する場合は、{{ic|--force-yuv}} または {{ic|-t}} を付けて {{ic|wf-recorder}} を実行して、データを GPU に送る前に強制的に yuv フォーマットに変換してください。[https://github.com/ammen99/wf-recorder/issues/164]}}<br />
<br />
これで、先の仮想ビデオデバイスをビデオ通話/ビデオ会議アプリケーションで "ウェブカメラ" として選択できるようになりました (デバイスは {{ic|VirtualVideoDevice}} という名前です)。仮想ビデオデバイスがきちんとスクリーン共有を出力していることは、{{ic|ffplay}} ({{Pkg|ffmpeg}} の一部) や {{Pkg|mpv}}、{{ic|gst-launch}} ({{Pkg|gstreamer}} の一部) を使用して確認できます:<br />
<br />
$ ffplay /dev/video2<br />
<br />
$ mpv av://v4l2:/dev/video2<br />
<br />
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink<br />
<br />
Firefox がビデオストリームを読み取ることができず、"AbortError: Starting video failed" のようなメッセージを出力する場合、{{ic|v4l2compat.so}} をプリロードしてみてください:<br />
<br />
$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox<br />
<br />
===== 個々のアプリケーションの共有 =====<br />
<br />
{{Warning|この方法では、ウィンドウがリサイズされても共有される領域は変わらないため、個々のウィンドウの共有の適切な実装とは言えません。}}<br />
<br />
先に説明した通り、{{ic|wf-recorder}} は、{{Pkg|slurp}} で事前に選択した画面領域のみを録画することができます。この機能を使って、特定の領域/アプリケーションウィンドウを共有して仮想ビデオデバイスに出力を流すには、以下のコマンドで画面の録画を開始してください:<br />
<br />
$ wf-recorder '''-g "$(slurp)"''' --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p<br />
<br />
画面の領域を選択したら、先に説明したように仮想ビデオデバイス {{ic|/dev/video2}} 経由でビデオフィードにアクセスできるようになります。<br />
<br />
==== WebRTC プロトコルを使う ====<br />
<br />
{{Note|この方法では出力全体しか共有できず、個々のアプリケーションを共有することはできません。[https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows]}}<br />
<br />
[[PipeWire#WebRTC 画面共有]] を参照してください。<br />
<br />
Chromium と Firefox は画面共有にアクセスできるはずです。[https://mozilla.github.io/webrtc-landing/gum_test.html Mozilla の getUserMedia / getDisplayMedia テストページ]でテストできます。<br />
<br />
=== X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする ===<br />
<br />
ネイティブな Wayland ウィンドウ (あるいはスクリーン/ワークスペース全体) は X11 アプリケーションに共有することができます。そのためには {{Pkg|xwaylandvideobridge}} アプリケーションを使う必要があります。詳細は [http://blog.davidedmundson.co.uk/blog/xwaylandvideobridge/ Fixing Wayland: Xwayland screen casting] を見てください。<br />
<br />
== ターミナル ==<br />
<br />
=== ansi コードで出力 ===<br />
<br />
{{Pkg|util-linux}} パッケージに含まれている、{{ic|script}} コマンドを使うことができます。{{ic|$ script}} と入力すればその瞬間から、全ての出力は (ansi コードを含めて) {{ic|typescript}} ファイルに保存されるようになります。<br />
<br />
終わったら、{{ic|exit}} と入力するだけで {{ic|typescript}} が作成されます。作成されたファイルは [[AUR]] の {{AUR|ansi2html}} パッケージを使って html に変換できます。<br />
<br />
{{ic|typescript}} ファイルを {{ic|typescript.html}} に変換するには、次を実行:<br />
<br />
$ ansi2html --bg=dark < typescript > typescript.html<br />
<br />
また、コマンドによっては直接 ansi2html にパイプで渡すこともできます:<br />
<br />
$ ls --color|ansi2html --bg=dark >output.html<br />
<br />
どんなコマンドでも使えるというわけではないので、その場合は、{{ic|script}} を使う必要があります。<br />
<br />
=== フレームバッファ ===<br />
<br />
[[フレームバッファ]]をインストールして、{{Pkg|fbgrab}} か {{Pkg|fbdump}} を使用して、スクリーンショットを撮ります。<br />
<br />
=== 仮想コンソール ===<br />
<br />
[[Uvesafb]] をインストールして {{Pkg|fbgrab}} または {{Pkg|fbdump}} を使ってスクリーンショットを取得してください。<br />
<br />
単にコンソールの文章を取得したいだけで画像は要らない場合、{{Pkg|util-linux}} パッケージに含まれている {{ic|setterm}} を使うことができます。以下のコマンドは仮想コンソール 1 のテキストをカレントディレクトリの screen.dump ファイルに保存します:<br />
# setterm -dump 1 -file screen.dump<br />
<br />
{{ic|/dev/vcs1}} の中身を読まないといけないので root 権限が必要です。</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2&diff=36675
USB インストールメディア
2024-03-28T05:22:45Z
<p>AshMyzk: /* Rufus を使う */ 訳を修正</p>
<hr />
<div>[[Category:Arch の入手とインストール]]<br />
[[de:Installation von einem USB-Stick]]<br />
[[en:USB flash installation medium]]<br />
[[es:USB flash installation medium]]<br />
[[fr:USB flash installation medium]]<br />
[[pt:USB flash installation medium]]<br />
[[ru:USB flash installation medium]]<br />
[[tr:USB flash installation medium]]<br />
[[zh-hans:USB flash installation medium]]<br />
{{Related articles start}}<br />
{{Related|光学ディスクドライブ}}<br />
{{Related|Archiso}}<br />
{{Related|マルチブート USB ドライブ}}<br />
{{Related articles end}}<br />
このページでは Arch Linux のインストーラーを USB ドライブ (別名: ''"フラッシュドライブ", "USB スティック", "USB キー"'' など) に書き込む様々な方法を記述します。[[Wikipedia:ja:Live USB|Live USB]] ([[Wikipedia:ja:Live CD|Live CD]] ライクな)システムは Arch Linux のインストールやシステムメンテナンス、システムの回復に使用できます。{{ic|/}} に [[Overlayfs]] を使うので、コンピュータを一度シャットダウンすると、すべての変更は破棄されます。<br />
<br />
USB ドライブからの Arch Linux のフルインストールをしたい場合 (すなわち永続的な設定もする場合) は、[[リムーバブルメディアに Arch Linux をインストール]] を参照してください。ブータブル Arch Linux USB スティックをレスキュー USB として使いたい場合は、[[chroot]] を参照してください。<br />
<br />
以下の手順に進む前に、https://archlinux.org/download/ から ISO をダウンロードし、[[インストールガイド#署名の検証|ファイルの整合性を検証]]してください。<br />
<br />
== ISO をそのまま使う (BIOS と UEFI) ==<br />
<br />
{{Warning|以下は USB フラッシュドライブ上の全データを不可逆的に削除するため、以下のことを行う前にフラッシュドライブ上に重要なファイルが残っていないことを確認してください。}}<br />
<br />
{{Note|ISO を USB フラッシュドライブや SD カードではなく、ハードディスクドライブやソリッドステートドライブに書き込みたい場合、ドライブの論理セクタサイズが 2048 バイト ([[Wikipedia:ja:ISO 9660|ISO 9660]] のセクタサイズ) 以下であり、かつそのサイズにアライメントされていることを確認してください。これはつまり、この ISO はこの方法を使って 4Kn [[Advanced Format]] ドライブに書き込むことはできないことを意味します。}}<br />
<br />
=== GNU/Linux で ===<br />
<br />
==== 基本的なコマンドラインユーティリティを使う ====<br />
<br />
以下のツールは {{Pkg|coreutils}} ({{Pkg|base}} [[メタパッケージ]]によってインストールされます) であるため、この方法はシンプルで汎用性があり、おすすめできます。<br />
<br />
{{ic|ls -l /dev/disk/by-id/usb-*}} を実行して USB ドライブの名前を調べ、{{ic|lsblk}} を実行してそのドライブがマウント'''されていない'''ことを確認してください。<br />
<br />
以下のコマンドを実行する際、{{ic|/dev/disk/by-id/usb-''My_flash_drive''}} の部分はあなたのドライブに合わせて変更してください (例: {{ic|/dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0}})。(パーティション番号を'''付けないでください'''。つまり、{{ic|/dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0'''-part1'''}} や {{ic|/dev/sdb'''1'''}} のようにしては'''いけません'''):<br />
<br />
* {{man|1|cat}} を使う: {{bc|# cat ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* {{man|1|cp}} を使う: {{bc|# cp ''path/to/''archlinux-''version''-x86_64.iso /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* [[dd]] を使う: {{bc|1=# dd bs=4M if=''path/to/''archlinux-''version''-x86_64.iso of=/dev/disk/by-id/usb-''My_flash_drive'' conv=fsync oflag=direct status=progress}}<br />
* [[tee]] を使う: {{bc|# tee < ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* {{Pkg|pv}} を使う: {{bc|# pv ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
<br />
これらのツールの比較と観点、そしてなぜ ''dd'' があまり使われないのかについては、[https://unix.stackexchange.com/questions/224277/is-it-better-to-use-cat-dd-pv-or-another-procedure-to-copy-a-cd-dvd/224314#224314] と [https://www.vidarholen.net/contents/blog/?p=479] を見てください。<br />
<br />
{{Tip|<br />
* コマンドを実行した後に {{ic|sync}} を root 権限で実行することで、ドライブを抜く前にバッファが完全に書き込まれることを保証できます。<br />
* USB の Arch ISO の UEFI バージョンがハングする場合やロードできない場合、メディアの作成手順を同じ USB ドライブで複数回繰り返してみてください。これでうまく行かない場合、マザーボードのファームウェアをアップデートしてみると良いかもしれません。}}<br />
<br />
{{Note|Arch ISO イメージを書き込んだ USB ドライブを空の使用可能なストレージデバイスに戻すには、その USB ドライブを[[パーティショニング|再パーティショニング]]したり[[フォーマット|再フォーマット]]したりする前に、{{ic|wipefs --all /dev/disk/by-id/usb-''My_flash_drive''}} を root として実行して、ISO 9660 ファイルシステムシグネチャを削除する必要があります。}}<br />
<br />
==== GNOME Disk Utility を使う ====<br />
<br />
GNOME を使っている Linux ディストリビューションなら {{Pkg|nautilus}} と {{Pkg|gnome-disk-utility}} を使うことで簡単にライブ CD が作成できます。{{ic|.iso}} ファイルを右クリックして、 "Open With Disk Image Writer" を選択してください。GNOME Disk Utility が開いたら、"Destination" ドロップダウンメニューからフラッシュドライブを選択して "Start Restoring" をクリックしてください。<br />
<br />
==== MultiWriter を使う ====<br />
<br />
{{pkg|gnome-multi-writer}} は、ISO ファイルを複数の USB デバイスに一度に書き込める、シンプルな [[GTK]]3 ベースのグラフィカルツールです。<br />
<br />
==== Kindd を使う ====<br />
<br />
[https://github.com/LinArcX/Kindd Kindd] は、dd の Qt ベースグラフィカルフロントエンドです。{{AUR|kindd}} で利用できます。<br />
<br />
==== Popsicle を使う ====<br />
<br />
[https://github.com/pop-os/popsicle Popsicle] は、ISO ファイルを複数の USB デバイスに並列で書き込むためのツールで、PopOS 開発チームにより作成されました。Rust で記述されており、GTK を使用します。{{AUR|popsicle}} で利用可能です。<br />
<br />
==== SUSE Studio ImageWriter を使う ====<br />
<br />
[https://github.com/openSUSE/imagewriter SUSE Studio ImageWriter] は、OpenSUSE 開発チームにより作成された、Qt ベースのツールです。{{AUR|imagewriter}} で利用可能です。<br />
<br />
==== xorriso-dd-target を使う ====<br />
<br />
({{Pkg|libisoburn}} の) [https://dev.lovelyhq.com/libburnia/libisoburn/raw/master/xorriso-dd-target/xorriso-dd-target xorriso-dd-target] は、間違ったストレージデバイスへの上書きリスクの軽減を試みるシェルスクリプトです。最も安全なモードは {{ic|-plug_test}} という名前です。例えば、[[sudo]] を使って root に昇格できる通常ユーザとしてこのツールを使うには:<br />
<br />
$ xorriso-dd-target -with_sudo -plug_test -DO_WRITE -image_file archlinux-''version''-x86_64.iso<br />
<br />
詳細は {{man|1|xorriso-dd-target}} を見てください。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。{{AUR|usbimager}} で利用できます。<br />
<br />
=== Windows で ===<br />
<br />
==== win32diskimager を使う ====<br />
<br />
[https://sourceforge.net/projects/win32diskimager/ win32diskimager] は、Windows からイメージを USB スティックや SD/CF カードに書き込むためのグラフィカルツールです。ISO イメージを選択して、書き込み先の USB ドライブ文字を選択し (先にフォーマットする必要があります)、''Write'' をクリックしてください。<br />
<br />
==== USBwriter を使う ====<br />
<br />
Linux の {{ic|dd}} と同じように簡単に使うことができます。Arch Linux の ISO をダウンロードして、管理者権限で [https://sourceforge.net/p/usbwriter/wiki/Documentation/ USBwriter] ユーティリティを使って USB フラッシュメモリに書き込むだけです。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。<br />
<br />
==== Rufus を使う ====<br />
<br />
[https://rufus.akeo.ie/ Rufus] は多目的の USB ISO 書き込みツールです。このツールはグラフィカルな UI を提供し、ドライブが正しくフォーマットされていなくても書き込むことができます。<br />
<br />
単に Arch Linux の ISO と、ブータブルな Arch Linux を作成したい USB ドライブを選択し、''START'' をクリックするだけです。<br />
<br />
{{Note|デフォルトの ISO イメージモードを使って作成した USB ドライブが正しく起動しない場合、'''DD イメージモード'''を代わりに使用する必要があります。モードを切り替えるには、''パーティション構成'' ドロップダウンメニューから ''GPT'' を選択してください。''START'' をクリックしたあとに、モード選択のダイアログが表示されるので、''DD イメージモード''を選択してください。}}<br />
<br />
{{Tip|[https://github.com/pbatard/rufus/issues/691 永続的なデータ保存のための追加パーティション]を追加するには、保存領域のサイズを選択するためのスライダーを使ってください。永続的なパーティションの機能を使う際は、''パーティション構成''ドロップダウンメニューで ''MBR'' を選択して、''ターゲットシステム''で ''BIOS または UEFI'' を選択してください。さもないと、ドライブは BIOS と UEFI の両方で使用できなくなります。}}<br />
<br />
==== Cygwin を使う ====<br />
<br />
[https://www.cygwin.com/ Cygwin] をインストールするときに {{ic|dd}} パッケージを選択してください。<br />
<br />
イメージファイルをホームディレクトリに置いてください:<br />
<br />
C:\cygwin\home\''User''\<br />
<br />
管理者として cygwin を実行します (cygwin からのハードウェアへのアクセスが必要です)。次のコマンドで USB ドライブに書き込みます:<br />
<br />
dd if=archlinux-''version''-x86_64.iso of=\\.\''x'': bs=4M<br />
<br />
{{ic|archlinux-''version''-x86_64.iso}} の部分は {{ic|cygwin}} ディレクトリ内にある iso イメージファイルへのパスです。{{ic|\\.\''x'':}} の部分は USB フラッシュドライブで、{{ic|''x''}} は windows が決めた文字になります、例: {{ic|\\.\d:}}。<br />
<br />
cygwin 6.0 では正しいパーティションを見つけてください:<br />
<br />
cat /proc/partitions<br />
<br />
そして出力を見て ISO イメージを焼きこみます。例:<br />
<br />
dd if=archlinux-''version''-x86_64.iso of=/dev/sdb bs=4M<br />
<br />
==== dd for Windows を使う ====<br />
<br />
Windows に対応した GPL ライセンスの dd が http://www.chrysocome.net/dd から利用できます。Cygwin と比べてダウンロード容量は少なくてすみます。使用方法は、上の Cygwin の方法に従って下さい。<br />
<br />
初めに dd for Windows の最新バージョンをダウンロードしてください。ダウンロードが完了したら、圧縮ファイルを {{ic|Downloads}} ディレクトリかどこかに展開してください。<br />
<br />
そして、管理者として ''Command Prompt'' を立ち上げてください。次に、{{ic|Downloads}} ディレクトリにディレクトリを変更 ({{ic|cd}}) してください。<br />
<br />
Arch Linux の ISO は ''dd'' の実行可能ファイルがある場所と同じフォルダに置いた方が便利です、どこか他のところに ISO を置いた場合はフルパスを記述する必要があります。<br />
<br />
使用するコマンドは以下のようになります:<br />
<br />
# dd if=archlinux-''version''-x86_64.iso od=\\.\''x'': bs=4M<br />
<br />
{{Note|Windows のドライブ文字はパーティションに紐付けられています。ディスク全体を選択できるようにするため、''dd for Windows'' には {{ic|od}} パラメータが存在し、上記のコマンドで使用しています。このパラメータが使えるのは ''dd for Windows'' だけであり、他の ''dd'' 実装では存在しないので注意してください。}}<br />
<br />
==== flashnul を使う ====<br />
<br />
[https://github.com/amarao/flashnul/blob/master/README.md flashnul] はフラッシュメモリ(USB-Flash, IDE-Flash, SecureDigital, MMC, MemoryStick, SmartMedia, XD, CompactFlash など)の機能を検証したりメンテナンスしたりするユーティリティです。<br />
<br />
コマンドプロンプトから flashnul を {{ic|-p}} 付きで実行してください。そして、どのデバイスインデックスが、対象の USB ドライブであるかを判断してください。例:<br />
<br />
{{hc|C:\>flashnul -p|<br />
Avaible physical drives:<br />
Avaible logical disks:<br />
C:\<br />
D:\<br />
E:\<br />
}}<br />
<br />
正しいデバイスを見つけたら、デバイスにイメージを書き込むことができます。{{ic|-L}} とデバイスインデックス、イメージへのパスを付けて flashnul を実行してください。例:<br />
<br />
C:\>flashnul '''E:''' -L ''path\to\''archlinux-''version''-x86_64.iso<br />
<br />
データを書き込んでいいと確信しているのであれば yes と入力してください。そして、書き込みが終わるまで少し待ってください。アクセス拒否のエラーが発生した場合、開いているエクスプローラーのウインドウをすべて閉じてください。<br />
<br />
{{Note|コマンドプロンプトは管理者として開いてください。さもないと、flashnul はフラッシュメモリをブロックデバイスとして開くことができず、Windows が提供するドライブハンドルを通してしか書き込むことができません。}}<br />
<br />
=== macOS で ===<br />
<br />
==== macOS dd を使う ====<br />
<br />
まず USB ドライブを確認する必要があります。{{ic|/Applications/Utilities/Terminal}} を開いて以下のコマンドでストレージデバイスを全て確認できます:<br />
<br />
$ diskutil list<br />
<br />
USB デバイスは {{ic|/dev/disk2 (external, physical)}} のように表示されます。名前や容量から消去したいデバイスであることを確認できたら、識別子を使って下のコマンドを実行してください ({{ic|/dev/disk''X''}} を確認できた識別子に置き換えてください)。<br />
<br />
通常 masOS では USB デバイスは自動的にマウントされるため、{{ic|dd}} を使ってブロック単位で書き込む前にアンマウントする必要があります (エジェクトではありません)。ターミナルで、以下を実行:<br />
<br />
$ diskutil unmountDisk /dev/disk''X''<br />
<br />
それから ISO イメージファイルをデバイスにコピーしてください:<br />
<br />
{{Note|<br />
* BSD から継承した {{ic|dd}} (macOS のデフォルトの {{ic|dd}} も含む) は、小文字の {{ic|m}} サフィックスを使います。これは、この記事の他の部分で使用されている GNU {{ic|dd}} とは異なります。<br />
* {{ic|disk}} の前に {{ic|r}} を付けると raw モードになり、転送をより速くすることができます。<br />
* 新しいバージョンの macOS では、dd コマンドは {{ic|1=status=progress}} をサポートしており、進捗状況を表示させることができます。以下のように手動で進捗状況を表示させることも可能です。<br />
}}<br />
<br />
# dd if=''path/to''/archlinux-''version''-x86_64.iso of=/dev/'''r'''disk''X'' bs=1m<br />
<br />
このコマンドは何も出力せずに動きます。進捗を表示させるには、{{ic|Ctrl+t}} を押して SIGINFO を送信してください。{{ic|disk''X''}} には {{ic|s1}} サフィックスを含めるべきではないことに注意してください。さもないと、その USB デバイスは UEFI モードでしか起動できず、レガシーモードでは起動できません。完了すると macOS が ''セットしたディスクは、このコンピュータで読み取れないディスクでした。'' とエラーを吐くことがあります。''無視'' を選択してください。これで USB デバイスはブータブルになります。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。<br />
<br />
=== Android で ===<br />
<br />
==== EtchDroid を使う ====<br />
<br />
[https://etchdroid.depau.eu/ EtchDroid] は、Android のための OS イメージ書き込みツールです。Android 5 以降、root 権限が無くとも動作します。問題が生じた場合は、上流の [https://github.com/EtchDroid/EtchDroid/issues/ GitHub] を確認してください。<br />
<br />
Arch Linux インストーラーを作成するには、ISO イメージを Android デバイス上にダウンロードしてください。(必要であれば USB-OTG アダプタを使って) USB ドライブを Android デバイスに挿入してください。EtchDroid を開き、''Flash raw image'' を選択し、Arch ISO を選択し、USB ドライブを選択してください。USB API の使用許可を付与し、確認してください。<br />
<br />
イメージの書き込み中は携帯を机の上に置いておいてください: 多くの USB-OTG アダプタは少しぐらつくので、間違えて抜けてしまうかもしれません。<br />
<br />
== 手動フォーマットを使う ==<br />
<br />
=== BIOS と UEFI ===<br />
<br />
==== GNU/Linux で ====<br />
<br />
この方法は {{ic|dd}} でイメージを直接書き込むより少し複雑ですが、ドライブをデータストレージとして使える状態のままにすることができます (既存の[[パーティショニング|パーティション分割されたデバイス]]の中のパーティションに ISO をインストールします)。<br />
<br />
{{Note|ここでは、対象のパーティションを {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}} と表記します。{{ic|''My_flash_drive''}} と {{ic|''n''}} の部分はあなたのシステムに合わせて置き換えてください。}}<br />
<br />
* {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} 上に[[パーティショニング#パーティションテーブル|パーティションテーブル]]を作成してください (まだ作成していないのであれば)。<br />
* デバイス上にパーティションを作成してください(まだ作成していないのであれば)。パーティション {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}} は [[FAT32]] にフォーマットされていなければなりません。<br />
* USB フラッシュデバイスにあるその FAT32 ファイルシステムをマウントしてください。そして、ISO イメージの内容をそこへ[[アーカイブと圧縮|展開]]してください。例えば:<br />
<br />
# mount /dev/disk/by-id/usb-''My_flash_drive''-part''n'' /mnt<br />
# bsdtar -x -f archlinux-''version''-x86_64.iso -C /mnt<br />
<br />
BIOS ブートを行うには、ファイルが存在しているボリュームを指定する必要があります。デフォルトでは、UUID {{ic|''YYYY-mm-dd-HH-MM-SS''-00}} (適切な UTC のリリース日と時間) が使用されます。{{ic|/mnt/boot/syslinux/archiso_sys-linux.cfg}} 内の {{ic|1=archisodevice=}} パラメータはデバイスの[[永続的なブロックデバイスの命名|永続的なデバイス識別子]]に置き換えてください。例えば: {{ic|1=archisodevice=UUID=''YOUR-UUID''}}。<br />
<br />
{{Note|{{ic|archisolabel}} や {{ic|archisodevice}} を間違えると、作成したメディアから起動できなくなります。}}<br />
<br />
BIOS システム用の [[Syslinux]] のファイルはすでに {{ic|/mnt/boot/syslinux}} へコピーされています。<br />
FAT ファイルシステムを[[ファイルシステム#ファイルシステムのアンマウント|アンマウント]]し、{{Pkg|syslinux}} と {{Pkg|mtools}} を[[インストール]]して、パーティションを起動可能にするために以下のコマンドを実行してください:<br />
<br />
# umount /mnt<br />
# syslinux --directory boot/syslinux --install /dev/disk/by-id/usb-''My_flash_drive''-part''n''<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/disk/by-id/usb-''My_flash_drive''<br />
<br />
{{Note|<br />
* {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} に [[GPT|GUID パーティションテーブル]]が存在する場合、{{ic|mbr.bin}} は {{ic|gptmbr.bin}} に置き換えてください。詳細は [[Syslinux#手動インストール]] を見てください。<br />
* [[MBR]] パーティションテーブルの場合は、"boot" フラグを設定する必要があります。詳細は [[Syslinux#MBR パーティションテーブル]] を見てください。<br />
}}<br />
<br />
==== Windows で ====<br />
<br />
{{Note|<br />
* UEFI ブータブル USB を作成するのに '''Bootable USB Creator ユーティリティ'''を使ってはいけません。手動フォーマットの場合、USB ドライブに ISO を dd するのに ''dd for Windows'' を使わないで下さい。<br />
* 下のコマンド内の '''X:''' は Windows での USB フラッシュドライブを意味しています。<br />
* Windows はパスを分けるのにバックスラッシュ {{ic|\}} を使っているので、下のコマンドでもバックスラッシュを使っています。<br />
* 全てのコマンドは Windows のコマンドプロンプトで'''管理者として'''実行する必要があります。<br />
* {{ic|>}} は Windows のコマンドプロンプトを示しています。<br />
}}<br />
<br />
* [https://rufus.ie/ Rufus USB partitioner] を使って USB ドライブをパーティショニングし、フォーマットしてください。パーティション構成オプションは '''MBR for BIOS and UEFI''' を、ファイルシステムは '''FAT32''' を選んで下さい。"Create a bootable disk using ISO image" と "Create extended label and icon files" オプションのチェックを外して下さい。<br />
* '''Volume Label''' は好きに設定してください。このステップは公式 ISO ([[Archiso]]) に必要です。このステップは、前の "パーティショニングとフォーマット" のステップで Rufus を使用することでも可能です。<br />
* ISO を (ZIP アーカイブの解凍と同じように) USB フラッシュドライブに [https://www.7-zip.org/ 7-Zip] を使って展開してください。<br />
* {{ic|''X'':\boot\syslinux\archiso_sys-linux.cfg}} を編集して、{{ic|1=archisodevice=UUID=''YYYY-mm-dd-HH-MM-SS''-00}} の部分を全て {{ic|1=archisodevice=LABEl=''YOUR_LABEL''}} に置き換えてください。{{ic|''YOUR_LABEL''}} の部分は、先ほど設定したボリュームラベルです。<br />
* https://www.kernel.org/pub/linux/utils/boot/syslinux/ から最新の公式 syslinux 6.xx バイナリ (zip ファイル) をダウンロードして展開してください。Syslinux のバージョンは ISO イメージで使われているバージョンと合わせてください。<br />
* 以下のコマンドを実行してください (管理者として実行した Windows のコマンドプロンプトで実行):<br />
<br />
> cd bios\<br />
> for /r %Y in (*.c32) do copy "%Y" "''X'':\boot\syslinux\" /y<br />
> copy mbr\*.bin ''X'':\boot\syslinux\ /y<br />
<br />
* 以下を実行して Syslinux を USB にインストールしてください (64ビット版 Windows では {{ic|win64\syslinux64.exe}} を使ってください):<br />
<br />
> cd bios\<br />
> win32\syslinux.exe -d /boot/syslinux -i -a -m ''X'':<br />
<br />
{{Note|<br />
* ただファイルをコピーしただけでは起動可能なデバイスにはなりません。最後のコマンドは、Syslinux のファイルを USB のパーティションの VBR にインストールし、そのパーティションを MBR パーティションテーブル上で "active/boot" に設定し、MBR ブートコードを USB デバイスに書き込みます。<br />
* {{ic|-d}} スイッチには Unix 環境と同じようにスラッシュで区切るパスを使います。<br />
}}<br />
<br />
=== BIOS のみ ===<br />
<br />
==== GNU/Linux で ====<br />
<br />
===== USB-ZIP ドライブの作成 =====<br />
<br />
一部の古い BIOS 環境では、USB-ZIP ドライブからの起動しかサポートされていないことがあります。この方法では USB ハードドライブからの起動を可能とします。<br />
<br />
* {{Pkg|syslinux}} と {{Pkg|mtools}} を[[インストール]]してください。<br />
* {{ic|ls /dev/disk/by-id/usb-*}} で USB ドライブを確認します。<br />
* {{ic|mkdiskimage -4 /dev/disk/by-id/usb-''My_flash_drive'' 0 64 32}} を実行してください。しばらく時間がかかります。<br />
<br />
ここからは手動フォーマットの手順に従ってください。ZIP ドライブのためパーティションは {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part4}} になります。<br />
<br />
{{Note|ドライブを FAT32 でフォーマットしてはいけません。FAT16 のままにしてください。}}<br />
<br />
=== UEFI のみ ===<br />
<br />
UEFI のみでブートさせる場合、FAT でフォーマットされた USB フラッシュドライブへ ISO のコンテンツを展開するだけで十分です。<br />
<br />
ドライブ上に EFI システムパーティションを作成する必要はありません。すべての UEFI (実装) は、USB フラッシュドライブ上の任意の FAT ボリュームから起動できるからです。最も互換性の高いセットアップは、{{ic|0c}} "W95 FAT32 (LBA)" タイプの単一のアクティブ (ブータブル) プライマリパーティションを持つ MBR パーティションテーブルを使用することです。[https://lists.gnu.org/archive/html/grub-devel/2019-05/msg00063.html]<br />
<br />
{{Tip|セキュアブートがカスタムの鍵で設定されている場合、[[セキュアブート#公式の ISO をカスタムの鍵で署名する]] を参照して、どのファイルを署名する必要があるかを確認してください。}}<br />
<br />
==== GNU/Linux で ====<br />
<br />
この方法では、ファイルを ISO イメージから USB フラッシュドライブへ展開します。<br />
<br />
* もしまだなら、[[パーティショニング#パーティションテーブル|パーティションテーブル]]を {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} に作成し、[[パーティション]] をデバイス上の ({{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}}) に作成してください。<br />
* もしまだなら、そのパーティションを [[FAT32]] にフォーマットしてください: {{bc|# mkfs.fat -F 32 /dev/disk/by-id/usb-''My_flash_drive''-part''n''}}<br />
* そのファイルシステムを[[マウント]]してください: {{bc|# mount /dev/disk/by-id/usb-''My_flash_drive''-part''n'' /mnt}}<br />
* そのマウントしたファイルシステムに ISO イメージを展開してください: {{bc|1=# bsdtar -x -f archlinux-''version''-x86_64.iso -C /mnt}}<br />
# ファイルシステムを[[アンマウント]]してください。<br />
<br />
==== Windows で ====<br />
<br />
この方法では、ファイルを ISO イメージから USB フラッシュドライブへコピーします。<br />
<br />
# USB フラッシュドライブをパーティショニングし、FAT32 にフォーマットしてください。<br />
# {{ic|archlinux-''version''-x86_64.iso}} を右クリックし、''マウント''を選択してください。<br />
# 新しく作成した DVD ドライブに移動し、すべてのファイルとフォルダを USB フラッシュドライブにコピーしてください。<br />
# コピーが終わったら、DVD ドライブを右クリックして、''取り出し''を選択してください。<br />
# USB フラッシュドライブを取り出してください。<br />
<br />
==== macOS で ====<br />
<br />
''DiskImageMounter'' と ''Disk Utility'' のどちらも isohybrid ISO をマウントすることはできません。しかし、macOS には ''libarchive'' が同梱されているため、''bsdtar'' を使って ISO をフラッシュドライブに展開することができます。<br />
<br />
# まだ行っていないならば、''Disk Utility'' を使って USB フラッシュドライブをパーティショニングし、そのパーティションを FAT32 でフォーマットしてください。<br />
# そのボリュームをマウントしてください。<br />
# ''Terminal'' アプリケーションを開き、''bsdtar'' を使って ISO イメージを先のマウント済みのファイルシステムに展開してください: {{bc|$ bsdtar -x -f archlinux-''version''-x86_64.iso -C /Volumes/''your-flash-drive''}}<br />
# 終わったら、USB フラッシュドライブをアンマウントし、取り出してください。<br />
<br />
== マルチブート USB ドライブを使う ==<br />
<br />
この方法では archiso を含む複数の ISO をひとつの USB デバイスから起動できるようにします。他の方法よりも既存の USB ドライブを新しい ISO にアップデートするのが簡単です。[[マルチブート USB ドライブ]]を参照してください。<br />
<br />
=== ventoy を使う ===<br />
<br />
[[Ventoy]] は、ISO/WIM/IMG/VHD(x)/EFI ファイルの起動可能な USB ドライブを作成するためのオープンソースなツールです。ventoy では、ディスクを何回もフォーマットする必要はありません。ただ ISO/WIM/IMG/VHD(x)EFI ファイルを USB ドライブにコピーするだけで、それらを直接起動できます。一度に多くのファイルをコピーでき、ventoy は起動するファイルを選択するブートメニューを提供します。{{AUR|ventoy-bin}} で利用可能です。<br />
<br />
=== Windows で ===<br />
<br />
==== RAM からインストールメディアをロードする ====<br />
<br />
[[Syslinux]] と [[RAM ディスク]] ([https://wiki.syslinux.org/wiki/index.php/MEMDISK MEMDISK]) を使って RAM から ISO イメージをロードする方法です。システムメモリ上で全てを実行するので、それに見合った RAM が積まれていなければなりません。MEMDISK を使って Arch Linux をインストールするために必要な RAM の最低量は 500 MB から 1 GB です。<br />
<br />
Arch Linux と MEMDISK のシステム要件については[[インストールガイド]]と [http://www.etherboot.org/wiki/bootingmemdisk#preliminaries こちら] に詳しく載っています。[https://bbs.archlinux.org/viewtopic.php?id=135266 フォーラムスレッド] も参照してください。<br />
<br />
{{Tip|一度ロードが完了しグラフィカルメニューが表示されたら、USB スティックを抜いてもオーケーです。そのままスティックを他のマシンで使ってもかまいません。また、起動に使った USB スティックに Arch をインストールすることもできます。}}<br />
<br />
===== USB フラッシュドライブの準備 =====<br />
<br />
USB スティックを FAT32 でフォーマットし、新しくフォーマットしたドライブに以下のフォルダを作ります:<br />
* {{ic|Boot}}<br />
** {{ic|Boot/ISOs}}<br />
** {{ic|Boot/Settings}}<br />
<br />
===== 必要なファイルを USB フラッシュドライブにコピー =====<br />
<br />
ブートしたい ISO を {{ic|Boot/ISOs}} フォルダにコピーしてください。その後、[https://www.kernel.org/pub/linux/utils/boot/syslinux/ ここ] から {{pkg|syslinux}} の最新版を取ってきて以下のファイルをコピーしてください。<br />
* {{ic|./win32/syslinux.exe}} をデスクトップかダウンロードフォルダに置いて下さい。<br />
* {{ic|./memdisk/memdisk}} を USB フラッシュドライブ上の {{ic|Settings}} フォルダに置きます。<br />
<br />
===== 設定ファイルの作成 =====<br />
<br />
必要なファイルをコピーしたら、{{ic|/boot/Settings}} フォルダの中に {{ic|syslinux.cfg}} ファイルを作ります:<br />
{{Warning|{{ic|INITRD}} 行には、{{ic|ISOs}} フォルダにコピーした ISO ファイルの名前を使って下さい。}}<br />
{{hc|/Boot/Settings/syslinux.cfg|2=<br />
DEFAULT arch_iso<br />
<br />
LABEL arch_iso<br />
MENU LABEL Arch Setup<br />
LINUX memdisk<br />
INITRD /Boot/ISOs/archlinux-2017.04.01-x86_64.iso<br />
APPEND iso}}<br />
Syslinux について詳しくは [[Syslinux]] を参照してください。<br />
<br />
===== 最後の手順 =====<br />
<br />
最後に {{ic|syslinux.exe}} と同じところに {{ic|*.bat}} を作り、実行します (Vista や Windows 7 を使っているときは"管理者として実行"します):<br />
<br />
{{hc|C:\Documents and Settings\username\Desktop\install.bat|<br />
@echo off<br />
syslinux.exe -m -a -d /Boot/Settings X:<br />
}}<br />
<br />
== 推奨されない方法 ==<br />
<br />
{{Warning|以下の方法は推奨されません。}}<br />
<br />
=== etcher を使う ===<br />
<br />
etcher にはアナリティクスとファーストパーティの広告があります。[https://github.com/balena-io/etcher/issues/2057]、[https://github.com/balena-io/etcher/blob/37769efbeda0abe7993d95e2b2aea2f461edd307/lib/gui/app/pages/main/MainPage.tsx#L151]、[https://github.com/balena-io/etcher/blob/37769efbeda0abe7993d95e2b2aea2f461edd307/docs/MAINTAINERS.md#publishing] を見てください。<br />
<br />
=== Universal USB Installer を使う ===<br />
<br />
* ダウンロードページには偽の ''Download'' ボタンがあり、マルウェアが含まれているかもしれません。<br />
* Universal USB Installer は ISO をそのまま書き込みません。そのため、syslinux バージョンの不一致により BIOS ブートが壊れます。[https://bbs.archlinux.org/viewtopic.php?pid=1344629] を見てください。<br />
* Arch Linux のインストールイメージのブートローダは {{ic|ARCH_''YYYYXX''}} というラベルのボリュームに ISO の内容が存在することを期待します。Universal USB Installer はファイルシステムのラベルをアップデートせず、ブートローダの設定も修正しません。<br />
<br />
=== UNetbootin を使う ===<br />
<br />
* UNetbootin は ISO をそのまま書き込みません。そのため、syslinux バージョンの不一致により BIOS ブートが壊れます。<br />
* Arch Linux のインストールイメージのブートローダは {{ic|ARCH_''YYYYXX''}} というラベルのボリュームに ISO の内容が存在することを期待します。UNetbootin はファイルシステムのラベルをアップデートせず、ブートローダの設定も修正しません。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== デバイスが表示されない ===<br />
<br />
{{ic|/dev/disk/by-label/ARCH_XXXXXX}} がマウントされず "device did not show up after 30 seconds" エラーが表示される場合は、USB メディアの名前を {{ic|ARCH_XXXXXX}} に変えてみて下さい (例: {{ic|archlinux-2021.02.01-x86_64.iso}} の場合は {{ic|ARCH_202102}})。<br />
<br />
=== ループバックデバイスのセットアップに失敗する: No such file or directory ===<br />
<br />
{{ic|losetup: /run/archiso/bootmnt/arch/x86_64/airootfs.sfs: failed to set up loop devices: No such file or directory}} というエラーが発生する場合、USB 2.0 のポートを使ってみてください。例えば、一部の USB 3.0 ポートは USB ハブを介して動作しません。<br />
<br />
=== 他のエラー ===<br />
<br />
その他のエラーが発生する場合、他の USB デバイスを使用してみてください。そうすることですべての問題が解決したという事例が複数あります。<br />
<br />
== 参照 ==<br />
<br />
* [[Gentoo:LiveUSB/Guide]]<br />
* [[Fedora:How to create and use Live USB]]<br />
* [https://en.opensuse.org/SDB:Live_USB_stick openSUSE wiki - SDB:ライブ USB メモリ]<br />
<br />
{{TranslationStatus|USB flash installation medium|2023-09-24|788125}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Intel_graphics&diff=36662
Intel graphics
2024-03-28T01:01:26Z
<p>AshMyzk: /* Chromium や Firefox が壊れる/応答しない */ セクション名を修正</p>
<hr />
<div>[[Category:グラフィック]]<br />
[[Category:X サーバー]]<br />
[[de:Intel]]<br />
[[en:Intel graphics]]<br />
[[es:Intel graphics]]<br />
[[ru:Intel graphics]]<br />
[[zh-hans:Intel graphics]]<br />
{{Related articles start}}<br />
{{Related|Intel GMA 3600}}<br />
{{Related|Xorg}}<br />
{{Related|カーネルモード設定}}<br />
{{Related|Xrandr}}<br />
{{Related|ハイブリッドグラフィック}}<br />
{{Related|Vulkan}}<br />
{{Related|GPGPU}}<br />
{{Related articles end}}<br />
<br />
Intel はオープンソースドライバの提供とサポートを行なっているので、Intel graphics は基本的にプラグアンドプレイです。<br />
<br />
Intel GPU のモデルや関連するチップセットと CPU の包括的なリストは、[[Wikipedia:Intel Graphics Technology]] と [[Gentoo:Intel#Feature support]] を見てください。<br />
<br />
{{Note|<br />
* PowerVR ベースのグラフィックカード ([[Intel GMA 3600|GMA 3600]] シリーズ) はオープンソースドライバではサポートされていません。<br />
* Intel 第 ''N'' 世代 (Gen ''N'') ハードウェアという記述は、CPU の世代を指すものではなく、[[Wikipedia:List of Intel graphics processing units|GPU の世代]]を指しています。これは CPU の世代とは異なります。<br />
* あなたのカードを特定する方法については [[Xorg#ドライバーのインストール]] を参照してください。<br />
}}<br />
<br />
== インストール ==<br />
<br />
* 以下のパッケージのうち1つを[[インストール]]してください。これらは、3D アクセラレーションのための [[wikipedia:ja:ダイレクト・レンダリング・インフラストラクチャ|DRI]] ドライバを提供します。<br />
** {{Pkg|mesa}} は、第3世代ハードウェアおよびそれ以降用のモダンな Gallium3D ドライバを含む最新の [[Mesa]] パッケージです。これを使うことが推奨されます。<br />
** {{Pkg|mesa-amber}} は、第2世代から第11世代までのハードウェア用のクラシックドライバ (Gallium3d でない) です。このドライバは、第7世代及びそれ以前のハードウェアにおいて高いパフォーマンスや安定性をもたらすかもしれませんが、メンテナンスされていません。<br />
* 32ビットアプリケーションのサポートは、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} か {{Pkg|lib32-mesa-amber}} パッケージもインストールしてください。<br />
* [[Xorg]] で 2D アクセラレーションを提供する [[wikipedia:X.Org_Server#DDX|DDX]] ドライバに関しては、以下のうち1つを使ってください:<br />
** {{Pkg|xorg-server}} パッケージに含まれる ''modesetting'' ドライバは、第4世代及びそれ以降のハードウェアにおいて推奨されます。これは、''glamor'' モジュール経由で DRI ドライバを使用してアクセラレーションを提供します。<br />
** {{Pkg|xf86-video-intel}} パッケージは、第2世代から第9世代までのハードウェアにおいてレガシーな Intel DDX ドライバを提供します。一般に、このパッケージを使用することは推奨されません。下記のノートを参照してください。<br />
* [[Vulkan]] サポート (Haswell 及びそれ以降; それより古いチップにおけるサポートは[https://gitlab.freedesktop.org/mesa/mesa/-/issues/8249#note_1758622 不完全であるか存在しません]) については、{{Pkg|vulkan-intel}} パッケージをインストールしてください。32 ビット [[Vulkan]] サポートについては、{{Pkg|lib32-vulkan-intel}} パッケージをインストールしてください。<br />
<br />
[[ハードウェアビデオアクセラレーション]]も見てください。<br />
<br />
{{Note|1=<nowiki/><br />
* 一部のディストリビューション ([https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Debian-Abandon-Intel-DDX Debian & Ubuntu]、[https://www.phoronix.com/scan.php?page=news_item&px=Fedora-Xorg-Intel-DDX-Switch Fedora]、[https://community.kde.org/Plasma/5.9_Errata#Intel_GPUs KDE]) では、{{Pkg|xf86-video-intel}} ドライバのインストールが推奨されておらず、代わりに modesetting ドライバにフォールバックさせることが推奨されています。[https://web.archive.org/web/20160714232204/https://www.reddit.com/r/archlinux/comments/4cojj9/it_is_probably_time_to_ditch_xf86videointel/]、[https://www.phoronix.com/scan.php?page=article&item=intel-modesetting-2017&num=1]、[[Xorg#インストール]]、{{man|4|modesetting}} を参照してください。しかし、modesetting ドライバは次のような問題を引き起こす可能性があります: [https://gitlab.freedesktop.org/xorg/xserver/-/issues/1364 XFCE での画面のチラツキやマウスのジッタリング]、[https://bugs.chromium.org/p/chromium/issues/detail?id=370022 仮想デスクトップの切り替えを行ったときに Chromium でアーティファクトが発生する]、[https://gitlab.freedesktop.org/xorg/xserver/-/issues/928 vsync のジッタリング、mpv での動画のスタッタリング]。<br />
* {{Pkg|xf86-video-intel}} ドライバには、第11世代及びそれ以降のハードウェアに対する適切なサポートがありません。それによって、アクセラレーションが提供されなかったり、レンダリングの問題が発生したりし、その結果として Plasma Desktop がほぼ利用不能な状態になります。[https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/commit/7181c5a41c3f00eaf996caa156523c708a18081e] を参照してください。<br />
* {{Pkg|xf86-video-intel}} がインストールされている場合、グラフィックススタック全体がハードフリーズし、({{ic|Ctrl+Alt+F''n''}} を押して) 他の仮想コンソールに切り替えることすらできなくなり、[[SysRq]] でユーザプロセスを kill することしかできなくなるという問題が2件報告されています [https://bbs.archlinux.org/viewtopic.php?id=263323] [https://github.com/qutebrowser/qutebrowser/issues/4641]。<br />
}}<br />
<br />
== ローディング ==<br />
<br />
Intel カーネルモジュールは、システムの起動時に自動的に正常にロードされるはずです。<br />
<br />
正常にロードされない場合は:<br />
<br />
* Intel は カーネルモード設定を必要とするので、[[カーネルパラメータ]] に {{ic|nomodeset}} を指定して '''いない''' ことを確認してください。<br />
* また、{{ic|/etc/modprobe.d/}} や {{ic|/usr/lib/modprobe.d/}} で modprobe ブラックリストを使って Intel を無効にしていないか確認してください。<br />
<br />
=== 早い段階で KMS を有効にする ===<br />
<br />
[[カーネルモード設定]] (KMS) は、i915 DRM ドライバーを使用するインテルチップセットでサポートされています。KMS は必須であり、デフォルトで有効になっています。<br />
<br />
[[mkinitcpio]] v32 からは、{{ic|kms}} フックがデフォルトで含まれているため、典型的な環境において Early KMS がすでに有効化されているはずです。他の環境については、起動プロセスにおいてできるだけ早く KMS を有効にする方法に関する [[カーネルモード設定#KMS の早期開始]] を参照してください。<br />
<br />
=== GuC/HuC ファームウェアのロードを有効にする ===<br />
<br />
{{Accuracy|Intel のドキュメントに反し、Tiger Lake と Rocket Lake の GPU は実際 {{ic|1=enable_guc=3}} をサポートし、{{ic|1=enable_guc=1}} がデフォルトとなっている場合があります。}}<br />
<br />
第9世代から (Skylake およびそれ以降)、Intel GPU には以下の機能を提供する ''Graphics micro (μ) Controller'' (GuC) が搭載されています [https://01.org/linuxgraphics/downloads/firmware]{{Dead link|2023|04|23|status=403}}:<br />
* 一部のメディアデコード機能を CPU から ''HEVC/H.265 micro (µ) Controller'' (HuC) にオフロードする。[[ハードウェアビデオアクセラレーション]]に {{Pkg|intel-media-driver}} を使用する場合にのみ、適用可能です。第9世代から導入されました。<br />
* GuC をスケジューリング、コンテキスト送信、電源管理に使用する。第12世代、Alder Lake-P (Mobile) で導入されました。<br />
<br />
この機能を使うには、GuC ファームウェアがロードされていなければなりません。HuC のサポートに関して、一部のビデオ機能 (例: SKL 低電力符号化モードにおける CBR レート制御) は HuC ファームウェアもロードされている必要があります [https://github.com/intel/media-driver#known-issues-and-limitations]。GuC と HuC ファームウェアのファイルは両方 {{Pkg|linux-firmware}} によって提供されています。<br />
<br />
GuC の機能は {{ic|1=i915.enable_guc}} [[カーネルパラメータ]] によって制御されます。このパラメータの使用法は次のとおりです。:<br />
<br />
{| class="wikitable"<br />
! enable_guc の値 !! GuC 送信 !! HuC ファームウェアのロード !! デフォルトとなっているプラットフォーム !! サポートされているプラットフォーム<br />
|-<br />
|0 || {{No}} || {{No}} || Tiger Lake、Rocket Lake、Gen12 以前 [https://github.com/torvalds/linux/blob/b3454ce0b2c8a56e760e6baa88ed10278585072b/drivers/gpu/drm/i915/gt/uc/intel_uc.c#L26-L36] || すべて<br />
|-<br />
|1 || {{Yes}} || {{No}} || {{-}} || Alder Lake-P (Mobile) およびそれ以降<br />
|-<br />
|2 || {{No}} || {{Yes}} || Alder Lake-S (Desktop) [https://github.com/torvalds/linux/blob/b3454ce0b2c8a56e760e6baa88ed10278585072b/drivers/gpu/drm/i915/gt/uc/intel_uc.c#L38-L42] [https://lore.kernel.org/all/87ee6wit2r.fsf@intel.com/T/] || Gen9 およびそれ以降<br />
|-<br />
|3 || {{Yes}} || {{Yes}} || Alder Lake-P (Mobile) 及びそれ以降 || Gen 9.5 及びそれ以降 (一部個体ではこちらがより良い)<br />
|}<br />
<br />
GuC 送信や HuC ファームウェアのロードがあなたの GPU ではデフォルトで有効になっていない場合、手動で有効化できます。<br />
<br />
{{Warning|1=GuC / HuC ファームウェアのロードを手動で有効化すると、[https://bugs.freedesktop.org/show_bug.cgi?id=111918 たとえその機能がサポートされていない場合でも]、カーネルに汚染マークが付きます。さらに、GuC/HuC ファームウェアのロードを有効化すると、一部のシステムで問題が発生する可能性があります。(ハイバネートから復帰したあとなどに) フリーズが発生する場合は、無効化してください。}}<br />
<br />
まず、{{Pkg|linux-firmware}} が[[インストール]] されていることを確認してください。<br />
<br />
{{ic|1=i915.enable_guc}} [[カーネルパラメータ]] を設定してください。例えば:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 enable_guc=2<br />
}}<br />
<br />
[[Initramfs を再生成する|Initramfs を再生成]] してください。次回の起動時に [[dmesg]] を使うことで GuC と HuC が両方有効化されていることを確認できます:<br />
<br />
{{hc|# dmesg|2=<br />
[30130.586970] i915 0000:00:02.0: [drm] GuC firmware i915/icl_guc_33.0.0.bin version 33.0 submission:disabled<br />
[30130.586973] i915 0000:00:02.0: [drm] HuC firmware i915/icl_huc_9.0.0.bin version 9.0 authenticated:yes<br />
}}<br />
<br />
あなたのグラフィックアダプタで GuC と HuC がサポートされていない場合、以下が出力されます<br />
<br />
{{hc|# dmesg|2=<br />
[ 0.571339] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - GuC is not supported!<br />
[ 0.571340] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - HuC is not supported!<br />
}}<br />
<br />
あるいは、以下で確認できます:<br />
<br />
# cat /sys/kernel/debug/dri/0/gt/uc/guc_info<br />
# cat /sys/kernel/debug/dri/0/gt/uc/huc_info<br />
<br />
{{Note|1=GuC/HuC が有効化されている場合に {{ic|1=enable_gvt=1}} を設定して [[Intel GVT-g|GVT-g graphics virtualization]] を使用することは、linux 4.20.11 現在ではサポートされていません。システムのジャーナルに出力される通り、i915 モジュールの初期化に失敗します。<br />
<br />
{{hc|# journalctl|<br />
... kernel: [drm:intel_gvt_init [i915]] *ERROR* i915 GVT-g loading failed due to Graphics virtualization is not yet supported with GuC submission<br />
... kernel: i915 0000:00:02.0: [drm:i915_driver_load [i915]] Device initialization failed (-5)<br />
... kernel: i915: probe of 0000:00:02.0 failed with error -5<br />
... kernel: snd_hda_intel 0000:00:1f.3: failed to add i915 component master (-19)<br />
}}<br />
<br />
[https://github.com/intel/gvt-linux/issues/77#issuecomment-707541069] で説明されているように、関連する警告は深刻なものではないことに注意してください:<br />
<br />
{{hc|# journalctl -b |<br />
... kernel: i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x5916_rid_0x02.golden_hw_state failed with error -2<br />
}}<br />
}}<br />
<br />
== Xorg の設定 ==<br />
<br />
たいてい、[[Xorg]] を実行するために設定は特に必要ありません。<br />
<br />
しかし、ドライバのオプションを活用したい場合や、[[Xorg]] が起動しない場合などは、Xorg の設定ファイルを作成することができます。<br />
<br />
=== modesetting ドライバを使う ===<br />
<br />
{{Pkg|xf86-video-intel}} をインストールしたが、DDX ドライバを優先させずに modesetting ドライバを明示的にロードさせたい場合 (DDX ドライバと modesetting ドライバを比較したい場合など) は、以下のような設定ファイルを使用できます:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "modesetting"<br />
EndSection<br />
}}<br />
<br />
=== Intel ドライバを使う ===<br />
<br />
{{Note|以下は {{Pkg|xf86-video-intel}} が必要です。}}<br />
<br />
以下のような Xorg 設定ファイルを作成してください:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "intel"<br />
EndSection<br />
}}<br />
<br />
その他のオプションは {{ic|Driver}} の下の新しい行にユーザが追加します。<br />
オプションの完全なリストは {{man|4|intel}} の man ページを参照してください。<br />
<br />
{{Note|上に挙げたものよりも多くの device セクションを追加する必要があるかもしれません。これは必要なところに表示されます。}}<br />
<br />
==== AccelMethod ====<br />
<br />
設定ファイルを作成する際に、{{ic|Option "AccelMethod"}} を指定する必要がある場合があります。古典的なオプションは、{{ic|UXA}}、{{ic|SNA}} (デフォルト)、{{ic|BLT}} です。<br />
<br />
デフォルトの {{ic|SNA}} で問題が発生した場合。(例: ピクセル化したグラフィック、壊れたテキストなど)、代わりに {{ic|UXA}} を使ってみてください、これは [[#Xorg の設定|Xorg 設定ファイル]] に次の行を追加することで可能です:<br />
<br />
Option "AccelMethod" "uxa"<br />
<br />
{{man|4|intel|CONFIGURATION DETAILS}} の "AccelMethod" オプションをご覧ください。<br />
<br />
==== 最近の GPU で Intel DDX ドライバを使用する ====<br />
<br />
第8世代 (Broadwell) からの Intel GPU では、Iris Mesa ドライバが必要です:<br />
<br />
Option "DRI" "iris"<br />
<br />
==== TearFree、TripleBuffer、SwapbuffersWait を無効化する ====<br />
<br />
コンポジタを使用している場合 (GNOME、KDE Plasma、Xfce などの最近のデスクトップ環境ではデフォルトです)、通常、TearFree、TripleBuffer、SwapbuffersWait を無効化することでパフォーマンスを向上させ、電力消費量を削減することができます。<br />
<br />
Option "TearFree" "false"<br />
Option "TripleBuffer" "false"<br />
Option "SwapbuffersWait" "false"<br />
<br />
== モジュールベースのオプション ==<br />
<br />
{{ic|i915}} カーネルモジュールにより、[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]] を介して設定できます。一部のモジュールオプションは、省電力に影響を与えます。<br />
<br />
次のコマンドを使用して、すべてのオプションのリストと簡単な説明およびデフォルト値を生成できます:<br />
<br />
$ modinfo -p i915<br />
<br />
現在有効になっているオプションを確認するには、<br />
<br />
# systool -m i915 -av<br />
<br />
多くのオプションのデフォルトは-1であるため、チップごとの省電力のデフォルトになります。ただし、[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]] を使用して、より積極的な省電力を構成することも可能です。<br />
<br />
{{Note|1=Linux 3.18 以降、これらのデフォルトから逸脱すると、カーネルが [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=fc9740cebc3ab7c65f3c5f6ce0caf3e4969013ca tainted] (汚染された) としてマークされます。これは基本的に、チップごとのデフォルト以外のオプションの使用は実験的なものと見なされ、開発者によってサポートされていないことを意味します。}}<br />
<br />
=== フレームバッファー圧縮 (enable_fbc) ===<br />
<br />
フレームバッファ圧縮 (FBC) は、スクリーンのリフレッシュ中の電力消費量とメモリの帯域幅の使用量を削減できる機能です。<br />
<br />
この機能は、ハードウェアによってサポートされている場合、自動的に有効化されます。以下のコマンドを実行することで、この機能が有効化されているかどうか確認できます:<br />
<br />
{{hc|$ modinfo i915 {{!}} grep enable_fbc|<br />
parm: enable_fbc:Enable frame buffer compression for power savings (default: -1 (use per-chip default)) (int)<br />
}}<br />
<br />
parm が {{ic|-1}} に設定されている場合、何もする必要はありません。{{ic|-1}} でない場合、{{ic|1=i915.enable_fbc=1}} を[[カーネルパラメータ]]に追加するか、以下の内容で {{ic|/etc/modprobe.d/i915.conf}} を作成することで、FBC を強制的に有効化できます:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 enable_fbc=1<br />
}}<br />
<br />
{{Note|フレームバッファー圧縮は、Sandy Bridge(第6世代)より前の Intel GPU 世代では信頼できないか、使用できない場合があります。これにより、次のようなメッセージがシステムジャーナルに記録されます:<br />
<br />
kernel: drm: not enough stolen space for compressed buffer, disabling.<br />
<br />
Sandy Bridge 以前の CPU でフレームバッファー圧縮を有効にすると、次のようなエラーメッセージが表示されます。<br />
<br />
{{hc|# dmesg|<br />
[ 2360.475430] [drm] not enough stolen space for compressed buffer (need 4325376 bytes), disabling<br />
[ 2360.475437] [drm] hint: you may be able to increase stolen memory size in the BIOS to avoid this<br />
}}<br />
<br />
解決策は、フレームバッファー圧縮を無効にすることです。これにより、消費電力がいつの間にか増加します(約0.06W)。無効にするには、カーネルラインパラメータに {{ic|1=i915.enable_fbc=0}} を追加します。無効化された圧縮の結果の詳細については、[https://web.archive.org/web/20200228230053/https://kernel.ubuntu.com/~cking/power-benchmarking/background-colour-and-framebuffer-compression/ こちら] を参照してください。}}<br />
<br />
=== Fastboot ===<br />
<br />
{{Note|1=Skylake およびそれ以降[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3d6535cbed4a4b029602ff83efb2adec7cb8d28b]、さらに Bay- と Cherry-Trail (VLV/CHV)[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7360c9f6b857e22a48e545f4e99c79630994e932] では、Linux 5.1 からこのパラメータがデフォルトで有効化されています。[https://kernelnewbies.org/Linux_5.1#Graphics]}}<br />
<br />
Intel Fastboot の目標は、BIOS または [[ブートローダー]] によってセットアップされたフレームバッファーを保持して、 [[Xorg]] が開始されるまでちらつきを回避することです。[https://lists.freedesktop.org/archives/intel-gfx/2012-May/017653.html][https://www.phoronix.com/scan.php?page=news_item&px=MTEwNzc]<br />
<br />
fastboot がデフォルトでないプラットフォーム上で fastboot を有効にするには、{{ic|1=i915.fastboot=1}} を [[カーネルパラメータ]] として設定するか、{{ic|/etc/modprobe.d/i915.conf}} に以下を設定します:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 fastboot=1<br />
}}<br />
<br />
=== Intel GVT-g グラフィック仮想化のサポート===<br />
<br />
詳細については [[Intel GVT-g]] を参照してください。<br />
<br />
=== パフォーマンスサポートを有効化する ===<br />
<br />
第6世代から (Sandy Bridge およびそれ以降) Intel GPU は、内部のパフォーマンスデータをドライバに公開するために使用されるパフォーマンスカウンタを提供しています。ドライバとハードウェアレジスタではこのインフラを ''Observation Architecture'' (内部的には "OA") と呼んでいますが [https://www.phoronix.com/scan.php?page=news_item&px=Intel-HSW-Observation-Arch]、Intel のドキュメントではこの機能をより一般的に ''Observability Performance Counters'' を提供するものとしています [https://01.org/sites/default/files/documentation/observability_performance_counters_haswell.pdf] [https://01.org/sites/default/files/documentation/intel-gfx-prm-osrc-skl-vol14-observability.pdf]。<br />
<br />
デフォルトでは、[https://lwn.net/Articles/486306/ CAP_SYS_ADMIN] (root と等価です) や [https://lwn.net/Articles/812719/ CAP_PERFMON] [[ケイパビリティ]]で実行されているプログラムのみが observation architecture を利用できます [https://github.com/torvalds/linux/blob/b14ffae378aa1db993e62b01392e70d1e585fb23/drivers/gpu/drm/i915/i915_perf.c#L267] [https://github.com/torvalds/linux/blob/b14ffae378aa1db993e62b01392e70d1e585fb23/drivers/gpu/drm/i915/i915_perf.c#L3481-L3484]。ほとんどのアプリケーションはこれらのケイパビリティを持たずに実行されるため、以下の警告が出力されます:<br />
<br />
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0<br />
<br />
これらのケイパビリティ (または root) を使わずにパフォーマンスサポートを有効化するには、[[sysctl]] で説明されているように、(上記の警告で示されている) カーネルパラメータを設定してください。<br />
<br />
{{Warning|アプリケーションにパフォーマンスデータへのアクセスを許してしまうなどのリスクが存在するため、{{ic|perf_event_paranoid}} ファミリのオプションには制限的なデフォルトが存在します [https://docs.kernel.org/admin-guide/perf-security.html]。とはいえ、{{ic|dev.i915.perf_stream_paranoid}} は GPU パフォーマンスカウンタへのアクセスにしか影響せず、CPU アーキテクチャ実行コンテキストレジスタなどと比べれば低リスクです。}}<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== スケーリングモードを設定する ===<br />
<br />
フルスクリーンを使うアプリケーションで有用かもしれません:<br />
<br />
$ xrandr --output LVDS1 --set PANEL_FITTING ''param''<br />
<br />
選べる {{ic|''param''}} は:<br />
<br />
* {{ic|center}}: 解像度は定義した通りに固定され、スケーリングは無効になります<br />
* {{ic|full}}: 画面いっぱいまで解像度がスケールします<br />
* {{ic|full_aspect}}: アスペクト比を維持したまま解像度を可能な限り最大までスケールします<br />
<br />
うまく行かない場合は、以下を試してみてください:<br />
<br />
$ xrandr --output LVDS1 --set "scaling mode" ''param''<br />
<br />
{{ic|''param''}} は {{ic|"Full"}}、{{ic|"Center"}}、{{ic|"Full aspect"}} のいずれかです。<br />
<br />
{{Note|1=上記のオプションは外部ディスプレイは現在のところ機能しません (例: VGA, DVI, HDMI, DP) [https://bugs.freedesktop.org/show_bug.cgi?id=90989]。}}<br />
<br />
=== GMA 4500 での H.264 デコードのハードウェアアクセラレーション ===<br />
<br />
{{Pkg|libva-intel-driver}} パッケージは、一部の GMA 4500 シリーズ GPU での MPEG-2 デコードのハードウェアアクセラレーションのみを提供します (H.264 デコードは提供しません)。あなたの GPU も関係しているどうかを確かめるには、そのドライバと {{Pkg|libva-utils}} パッケージの両方をインストールしてください。そして、{{ic|vainfo}} ツールの出力を見て、{{ic|VAProfileH264}} で始まるエントリがどれだけあるかを見てください。<br />
<br />
H.264 デコードのサポートは、枝分かれた g45-h264 ブランチでメンテナンスされており、{{AUR|libva-intel-driver-g45-h264}} パッケージをインストールすることで使用できます。しかし、このサポートは実験的で、開発は放棄されていることに注意してください。GMA 4500 シリーズの GPU 上でこのドライバと共にVA-API を使うことで CPU の負荷を減らすことができますが、動画の再生がアクセラレートされていない状態ほどスムーズに再生できないかもしれません。mplayer を使ったテストでは H.264 でエンコードされた 1080p のビデオを vaapi を使って再生したところ (XV オーバーレイに比べて) CPU の負担は下がりましたが、途切れ途切れの再生になりました。一方 720p はうまく動きました [https://bbs.archlinux.org/viewtopic.php?id=150550]。他の報告も同じようなものでした [https://web.archive.org/web/20160325142959/http://www.emmolution.org/?p=192&cpage=1#comment-12292]。BIOS で割当済みビデオ RAM のサイズを高く設定すると、より質の高いハードウェアデコード再生が可能です。これを行うと、1080p h264 でもうまく行きます [https://lists.libreplanet.org/archive/html/guix-patches/2019-11/msg00652.html]。スムーズな再生 (1080p/720p) は、{{AUR|mpv-git}}、{{AUR|ffmpeg-git}}、{{AUR|libva-intel-driver-g45-h264}} を組み合わせて使うことでもうまく行きます。MPV と Firefox のプラグイン "Send to MPV player"[https://addons.mozilla.org/firefox/addon/send-to-mpv-player/] を用いることで、ハードウェアによりアクセラレートされた YouTube ビデオの再生が可能です。<br />
<br />
=== 報告される OpenGL のバージョンを上書き ===<br />
<br />
{{ic|MESA_GL_VERSION_OVERRIDE}} [[環境変数]]を使うことで、アプリケーションに報告される OpenGL のバージョンを上書きできます。例えば、{{ic|1=MESA_GL_VERSION_OVERRIDE=4.5}} と設定することで OpenGL 4.5 と報告されるようになります。<br />
<br />
{{Note|上記の変数を使って既知の OpenGL バージョンなら、たとえ GPU によってサポートされていないバージョンでも使うこともできます。設定することで、アプリケーションによってクラッシュがなおったり、あるいはクラッシュが増えたりする可能性があります。全てのアプリケーションで同じ変数を使わない方が良いでしょう。}}<br />
<br />
=== モニタリング ===<br />
<br />
* {{App|intel_gpu_top|Intel GPU のための top ライクなタスクモニタ (root 権限が必要)|https://gitlab.freedesktop.org/drm/igt-gpu-tools|{{Pkg|intel-gpu-tools}}}}<br />
* {{App|nvtop|AMD、Intel、NVIDIA のための GPU プロセスモニタリング (現在、Intel GPU に対しては非常に基本的なサポートしかありません)。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}<br />
<br />
=== 明るさとガンマ値の設定 ===<br />
<br />
[[バックライト]] を見てください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== ティアリング ===<br />
<br />
==== Intel ドライバを使う ====<br />
<br />
SNA アクセラレーションメソッドを取っている場合、一部のマシン上でティアリングが発生します。これを修正するには、以下の行を[[#Xorg の設定|設定ファイル]]に追加して {{Pkg|xf86-video-intel}} ドライバの {{ic|TearFree}} オプションを有効化してください:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "intel"<br />
Option "TearFree" "true"<br />
EndSection}}<br />
<br />
詳細は[https://bugs.freedesktop.org/show_bug.cgi?id=37686 元のバグレポート]を見てください。<br />
<br />
{{Note|1=<nowiki/><br />
* このオプションは、{{ic|SwapbuffersWait}} が {{ic|false}} のときに動作しない場合があります。<br />
* このオプションはメモリアロケーションを増加させ、パフォーマンスが低下する場合があります。[https://bugs.freedesktop.org/show_bug.cgi?id=37686#c123]<br />
* このオプションは、vsync のタイミングに厳しいアプリケーション (例えば、[[Wikipedia:Super Meat Boy|Super Meat Boy]]) において問題が発生する場合があります。<br />
* このオプションはUXA アクセラレーションメソッドでは動作しません。SNA でしか使えません。<br />
* Intel UHD 620 または 430 では、{{ic|TearFree}} を動作させるために {{ic|Option "TripleBuffer" "true"}} を追加する必要があります。<br />
}}<br />
<br />
==== modesetting ドライバを使う ====<br />
<br />
最近、TearFree サポートが modesetting ドライバに[https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1006 追加されました] [https://www.phoronix.com/news/xf86-video-modesetting-TearFree][https://www.phoronix.com/news/Modesetting-TearFree-Merged]。2023年11月の時点では、このパッチはまだ安定化されていません。なので、安定化されるまで {{AUR|xorg-server-git}} を使用する必要があります。<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "modesetting"<br />
Option "TearFree" "true"<br />
EndSection}}<br />
<br />
=== 垂直同期 (VSYNC) を無効化する ===<br />
<br />
以下のような場合に便利です:<br />
<br />
* Chromium/Chrome が、GPU のせいでラグくパフォーマンスが悪く、--disable-gpu スイッチを使うとスムーズに動作する場合。<br />
* glxgears テストが期待するほどのパフォーマンスを発揮してくれない場合。<br />
<br />
intel ドライバは垂直同期に [https://www.intel.com/support/graphics/sb/CS-004527.htm Triple Buffering] を使用します。これは、完全なパフォーマンスとティアリングの回避を可能にします。垂直同期をオフにするには (例えば、ベンチマークのために)、以下の {{ic|.drirc}} をホームディレクトリ内に追加してください:<br />
<br />
{{hc|~/.drirc|2=<br />
<device screen="0" driver="dri2"><br />
<application name="Default"><br />
<option name="vblank_mode" value="0"/><br />
</application><br />
</device><br />
}}<br />
<br />
{{Note|このファイルを作成するために {{AUR|driconf}} を使用しないでください。このツールにはバグがあり、間違ったドライバを設定してしまいます。}}<br />
<br />
=== DRI3 の問題 ===<br />
<br />
{{Pkg|xf86-video-intel}} では DIR バージョンのデフォルトは ''DRI3'' です。一部の環境では DRI3 によって問題が発生することがあります [https://bugs.chromium.org/p/chromium/issues/detail?id=370022]。''DRI2'' を使うには[[#Xorg の設定|設定ファイル]]に以下の行を追加してください:<br />
<br />
Option "DRI" "2"<br />
<br />
{{ic|modesetting}} ドライバーでは上記の方法で DRI3 を無効化することはできません。代わりに {{ic|1=LIBGL_DRI3_DISABLE=1}} 環境変数を設定してください。<br />
<br />
=== GTK アプリケーションでフォントや画面の表示がおかしい (サスペンド・復帰後に文字が表示されない) ===<br />
<br />
GTK アプリケーションでフォントの文字が表示されなくなってしまう場合、以下の方法で直る可能性があります。{{ic|/etc/environment}} を[[編集]]して以下の行を追加してください: <br />
<br />
{{hc|/etc/environment|output=<br />
COGL_ATLAS_DEFAULT_BLIT_MODE=framebuffer<br />
}}<br />
<br />
[https://bugs.freedesktop.org/show_bug.cgi?id=88584 FreeDesktop bug 88584] も参照。<br />
<br />
=== 起動中 "Loading modules" するときに画面がブラックアウトする ===<br />
<br />
"late start" KMS を使っているとき "Loading modules" で画面がブラックアウトする場合、initramfs に i915 と intel_agp を加えると解決するかもしれません。[[カーネルモード設定#KMS の早期開始]]を見てください。<br />
<br />
または、次の[[カーネルパラメータ]]を加えるとうまく動くかもしれません: <br />
<br />
video=SVIDEO-1:d<br />
<br />
VGA に出力する必要があるときは次を使ってみて下さい: <br />
<br />
video=VGA-1:1280x800<br />
<br />
=== Intel ドライバで X がフリーズ/クラッシュする ===<br />
<br />
X のクラッシュを伴う問題、GPU のハングアップ、X のフリーズに関する問題は、{{ic|NoAccel}} オプションを使って GPU の使用を無効化することで修復できる場合があります。以下の行を[[#Xorg の設定|設定ファイル]]に追加してください:<br />
<br />
Option "NoAccel" "True"<br />
<br />
あるいは、{{ic|DRI}} オプションを使って 3D アクセラレーションだけを無効化してみてください:<br />
<br />
Option "DRI" "False"<br />
<br />
=== 認識されない解像度を追加する ===<br />
<br />
この問題は、[[Xrandr#検出されない解像度を追加する|Xrandr のページ]] で扱っています。<br />
<br />
=== バックライトを調整できない ===<br />
<br />
サスペンドから復帰したあとにホットキーを使用してスクリーンの輝度を変更できない場合、[[バックライト]]の記事を見てあなたの設定ファイルをチェックしてみてください。<br />
<br />
問題が解消されない場合は、以下の[[カーネルパラメータ]]のうち1つを試してください:<br />
<br />
acpi_osi=Linux<br />
acpi_osi="!Windows 2012"<br />
acpi_osi=<br />
<br />
また、fastboot モード ({{ic|i915.fastboot}} カーネルパラメータ) を使用していないことを確認してください。これは、バックライト制御を破壊することが[https://www.phoronix.com/forums/forum/software/mobile-linux/1066447-arch-linux-users-with-intel-graphics-can-begin-enjoying-a-flicker-free-boot 知られています]。<br />
<br />
=== Chromium や Firefox の表示がおかしい/応答しない ===<br />
<br />
Chromium や Firefox で表示の乱れ、応答なし、ラグ、低パフォーマンスが発生する場合、以下のような解決策があります。<br />
<br />
* [[#AccelMethod|AccelMethod を "uxa" に設定する]]<br />
* [[#垂直同期 (VSYNC) を無効化する|VSYNC を無効化する]]<br />
* [[#ティアリング|TearFree オプションを有効化する]]<br />
* "DRI" とアクセラレーションのメソッドを無効にする (Intel Iris 第10世代でテスト済み): {{bc|<nowiki><br />
Option "NoAccel" "True"<br />
Option "DRI" "False"<br />
</nowiki>}}<br />
<br />
=== Broadwell/Core-M チップでカーネル 4.0 以上を使っている場合にクラッシュする ===<br />
<br />
X/Wayland がロードされた数秒後、マシンがフリーズして、[[journalctl]] に以下のような Intel Graphics に関連するカーネルのクラッシュログが残ることがあります: <br />
<br />
Jun 16 17:54:03 hostname kernel: BUG: unable to handle kernel NULL pointer dereference at (null)<br />
Jun 16 17:54:03 hostname kernel: IP: [< (null)>] (null)<br />
...<br />
Jun 16 17:54:03 hostname kernel: CPU: 0 PID: 733 Comm: gnome-shell Tainted: G U O 4.0.5-1-ARCH #1<br />
...<br />
Jun 16 17:54:03 hostname kernel: Call Trace:<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa055cc27>] ? i915_gem_object_sync+0xe7/0x190 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0579634>] intel_execlists_submission+0x294/0x4c0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa05539fc>] i915_gem_do_execbuffer.isra.12+0xabc/0x1230 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa055d349>] ? i915_gem_object_set_to_cpu_domain+0xa9/0x1f0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ba2ae>] ? __kmalloc+0x2e/0x2a0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0555471>] i915_gem_execbuffer2+0x141/0x2b0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa042fcab>] drm_ioctl+0x1db/0x640 [drm]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0555330>] ? i915_gem_execbuffer+0x450/0x450 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff8122339b>] ? eventfd_ctx_read+0x16b/0x200<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ebc36>] do_vfs_ioctl+0x2c6/0x4d0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811f6452>] ? __fget+0x72/0xb0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ebec1>] SyS_ioctl+0x81/0xa0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff8157a589>] system_call_fastpath+0x12/0x17<br />
Jun 16 17:54:03 hostname kernel: Code: Bad RIP value.<br />
Jun 16 17:54:03 hostname kernel: RIP [< (null)>] (null)<br />
<br />
この問題は execlist のサポート (カーネル 4.0 からデフォルトに変更されました) を無効化することで解決します。以下の[[カーネルパラメータ]]を追加してください: <br />
<br />
i915.enable_execlists=0<br />
<br />
これは、カーネル 4.0.5 以上で壊れていることが知られています。<br />
<br />
=== Windows をゲストとした場合にラグが発生する ===<br />
<br />
VirtualBox でホスト側から(マウスカーソルを動かすなどして)画面を更新しないと Windows ゲストのビデオ出力が止まってしまうことがあります。{{ic|1=enable_fbc=1}} オプションを削除すれば問題は解決します。<br />
<br />
=== 画面がちらつく ===<br />
<br />
Intel iGPU で使用される省電力機能 Panel Self Refresh (PSR) は、一部の例でちらつきを発生させることが知られています {{Bug|49628}} {{Bug|49371}} {{Bug|50605}}。一時的な解決策は、[[カーネルパラメータ]] {{ic|1=i915.enable_psr=0}} を使ってこの機能を無効化することです。<br />
<br />
=== i915 ドライバで OpenGL 2.1 ===<br />
<br />
{{Pkg|mesa-amber}} パッケージに含まれる第3世代 GPU 用の 古い mesa ドライバは、デフォルトでは OpenGL 2.0 が利用可能であると報告します。これは、対象のハードウェアが OpenGL 2.1 とは完全に互換性がないことが原因です。[https://www.phoronix.com/scan.php?page=news_item&px=Mesa-i915-OpenGL-2-Drop] OpenGL 2.1 のサポートは、{{ic|/etc/drirc}} または {{ic|~/.drirc}} で以下のようなオプションを設定することにより、手動で有効化することができます:<br />
<br />
{{hc|/etc/drirc|output=<br />
<driconf><br />
...<br />
<device driver="i915"><br />
<application name="Default"><br />
<option name="'''stub_occlusion_query'''" value="'''true'''" /><br />
<option name="'''fragment_shader'''" value="'''true'''" /><br />
</application><br />
</device><br />
...<br />
</driconf><br />
}}<br />
<br />
{{Note|<br />
* OpenGL のバージョンが戻ってしまう理由は、Chromium と他のアプリケーションでエクスペリエンスが悪化するためでした。必要であれば、drirc ファイルを編集して特定のアプリケーションに対して OpenGL 2.1 を {{ic|chromium}} 実行ファイルなどで無効化することもできます ([https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ 参照])。<br />
* {{Pkg|mesa}} パッケージに含まれる新しい Gallium ベースの i915 ドライバは、常に OpenGL 2.1 が利用可能であると報告します。なので、このドライバに対しては上記の設定は不要です。<br />
}}<br />
<br />
=== KMS の問題: コンソールが小さい領域に制限される ===<br />
<br />
低解像度のビデオポートの1つが起動時に有効になっていて、そのせいでターミナルがスクリーンの小さい領域を使っているのかもしれません。修正するには、ブートローダーでカーネルコマンドラインパラメータの {{ic|1=video=SVIDEO-1:d}} を使って i915 モジュールの設定でそのポートを明示的に無効化してください。詳細は [[カーネルパラメータ]] を見てください。<br />
<br />
これでうまく行かない場合、SVIDEO-1 ではなく TV1 か VGA1 を無効化してみてください。ビデオポートの名前は [[xrandr]] でリストアップできます。<br />
<br />
=== Haswell CPU で HDMI 経由で音声が出ない ===<br />
<br />
[https://bugzilla.kernel.org/show_bug.cgi?id=60769 Linux カーネルの issue] によると、{{ic|1=intel_iommu=on}} を設定している場合には HDMI から音声が出力されないそうです。この問題を修正するには、以下の[[カーネルパラメータ]]を設定してください:<br />
<br />
intel_iommu=on,igfx_off<br />
<br />
あるいは、IOMMU を無効化してください:<br />
<br />
intel_iommu=off<br />
<br />
=== 低消費電力 Intel CPU でクラッシュ/フリーズ ===<br />
<br />
低消費電力 Intel プロセッサやノート PC プロセッサは、低消費電力 Intel チップで使用されている電源管理機能に関する問題によりランダムにハングアップ/クラッシュする傾向にあります。そのようなクラッシュが発生する場合、この問題を報告するログは見られないでしょう。以下の[[カーネルパラメータ]]を追加することで、この問題を解決できるかもしれません。<br />
<br />
{{Note|以下のカーネルパラメータを3つすべて一緒に使用することは推奨されません。}}<br />
<br />
intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1<br />
<br />
{{ic|1=ahci.mobile_lpm_policy=1}} は、いくつかの Lenovo ノート PC や一部の Acer ノートブックにおける、SATA コントローラーの問題のある電源管理に起因するハングアップを修正します。この回避策は Intel Graphics と厳密には関連していませんが、関連する問題を解決します。このカーネルパラメータを追加すると、''l''ink ''p''ower ''m''anagement をファームウェアのデフォルトから最大パフォーマンスに変更し、特定の Lenovo マシンでディスプレイ輝度を変更した際にハングする問題を解決しますが、modern ultrabook でアイドル時の電力消費量が 1~1.5W 増加します。詳細 (特に他の状態に関するもの) については、[https://lore.kernel.org/lkml/20171211165216.5604-1-hdegoede@redhat.com/ Linux カーネルメーリングリスト]や [https://access.redhat.com/documentation/en-en/red_hat_enterprise_linux/6/html/power_management_guide/alpm Red Hat ドキュメント]を見てください。<br />
<br />
{{ic|1=i915.enable_dc=0}} は、GPU の電源管理を無効化します。これは、特定の Intel システム (特に、Goldmount と Kaby Lake Refresh チップ) におけるランダムなハングを解決します。このパラメータを使用すると、電力消費量が増え、ノート PC/notebook のバッテリー寿命が短くなります。<br />
<br />
{{ic|1=intel_idle.max_cstate=1}} は、プロセッサのスリープ状態を制限し、プロセッサがディープスリープ状態に移行するのを防ぎます。これは絶対に理想的ではなく、電力消費量の増加とバッテリーの短命化を招きます。しかし、多くの Intel システムでランダムなハングを解決します。Intel Baytrail や Kaby Lake Refresh チップを使用している場合は、このパラメータを使用してください。Intel "Baytrail" チップは、このカーネルパラメータを使用しないと、[https://bugzilla.kernel.org/show_bug.cgi?id=109051#c752 ファームウェアの欠陥]によりランダムにハングしてしまうことが知られていましたが、理論的には [https://cgit.freedesktop.org/drm-intel/commit/?id=a75d035fedbdecf83f86767aa2e4d05c8c4ffd95 2019-04-26] に修正されました。<br />
max_cstate パラメータに関する詳細は[https://docs.kernel.org/admin-guide/pm/intel_idle.html#kernel-command-line-options-and-module-parameters カーネルドキュメント]で、cstate に関する一般的な情報は [https://gist.github.com/wmealing/2dd2b543c4d3cff6cab7 GitHub 上の記事]で見られます。<br />
<br />
頻繁にハングする問題を解決するために {{ic|1=intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1}} を追加して問題が解決した場合は、その後パラメータを一つずつ取り除いて、どのパラメータが実際に問題の解決になっているかを確かめるべきです。実際の問題が SATA の電源管理に関係していて、問題を実際に解決するパラメータが {{ic|1=ahci.mobile_lpm_policy=1}} である場合、cstate やディスプレイの電源管理が無効化されている状態でマシンを走らせることは推奨されていません。<br />
<br />
詳細は [https://linuxreviews.org/Intel_graphics#Kernel_Parameters Linux Reviews] を見てください。<br />
<br />
=== 165Hz モニタのサポートを追加する ===<br />
<br />
一部の 165Hz モニタで、''xrandr'' が 165Hz のオプションを表示しない場合があり、さらに [[#認識されない解像度を追加する]] の方法ではこれを解決できません。この場合、[https://unix.stackexchange.com/questions/680356/i915-driver-stuck-at-40hz-on-165hz-screen i915-driver-stuck-at-40hz-on-165hz-screen] を見てください。<br />
<br />
{{Note|{{ic|/etc/initramfs-tools/hooks/edid}} を作成する以外にも、[[mkinitcpio]] フックを作成する必要があります:<br />
<br />
{{hc|/etc/initcpio/install/edid|<br />
#!/bin/bash<br />
<br />
build() {<br />
add_file /lib/firmware/edid/edid.bin<br />
}<br />
<br />
help() {<br />
cat <<HELPEOF<br />
This hook add support for 165Hz<br />
HELPEOF<br />
}<br />
}}<br />
<br />
そして、{{ic|/etc/mkinitcpio.conf}} の HOOKS 配列に ''edid'' を末尾に追加してください。以下のように:<br />
<br />
{{hc|/etc/mkinitcpio.conf|2=<br />
HOOKS=(... fsck edid)<br />
}}<br />
<br />
そして、[[Initramfs を再生成する|initramfs を再生成]]してください。<br />
}}<br />
<br />
=== Alder Lake-P 上でスリープ/サスペンドから復帰するとフリーズする ===<br />
<br />
{{Out of date|[https://patchwork.freedesktop.org/patch/543021/ このコミット]の段階で、以下のパッチはもはや適用されません。([[:en:Talk:Intel graphics#Freeze after wake from sleep/suspend with Alder Lake-P]])}}<br />
<br />
{{Note|2022年9月25日現在、これは [[fwupd]] からの最近のファームウェアアップデートで修正されました。BIOS の修正がない場合は、[https://gitlab.freedesktop.org/drm/intel/-/issues/7402 今後のカーネルの修正]があるかもしれません。<br />
}}<br />
<br />
Alder Lake-P 第12世代モバイルプロセッサの様々なベンダーのノート PC で、サスペンドから復帰した後にフリーズしたり黒画面になったりします。これは、多くのラップトップのベンダーが不正な VBT (Video BIOS Table) を同梱しており、iGPU に接続されている実際のポートが間違って記述されているからです。多くのベンダーが、正しく動作している Windows OS が搭載されているノート PC のための BIOS アップデートをリリースしないことを鑑みると、Linux ユーザたちはこの問題をカーネル側から対処するしかありません。一時的な緩和策としてカーネルにパッチを当てて再ビルドすることで、この問題を緩和できます:<br />
<br />
{{hc|drivers/gpu/drm/i915/display/intel_display.c.patch|<nowiki><br />
--- a/drivers/gpu/drm/i915/display/intel_display.c<br />
+++ b/drivers/gpu/drm/i915/display/intel_display.c<br />
@@ -8835,7 +8835,7 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)<br />
intel_ddi_init(dev_priv, PORT_TC1);<br />
} else if (IS_ALDERLAKE_P(dev_priv)) {<br />
intel_ddi_init(dev_priv, PORT_A);<br />
- intel_ddi_init(dev_priv, PORT_B);<br />
+ // intel_ddi_init(dev_priv, PORT_B);<br />
intel_ddi_init(dev_priv, PORT_TC1);<br />
intel_ddi_init(dev_priv, PORT_TC2);<br />
intel_ddi_init(dev_priv, PORT_TC3);<br />
<br />
</nowiki>}}<br />
<br />
これは、freedesktop の issue [https://gitlab.freedesktop.org/drm/intel/-/issues/5531 5531] [https://gitlab.freedesktop.org/drm/intel/-/issues/6401 6401] で説明されており、何ヶ月も解決されていません。<br />
<br />
=== Arc GPU のハードウェアビデオアクセラレーション ===<br />
<br />
ハードウェアビデオアクセラレーションは、バージョン 6.2 未満のカーネルでは利用できません。必要な HuC/GuC ファームウェアブロブの読み込みと初期化に失敗してしまいます。<br />
<br />
{{hc|# dmesg|2=<br />
[drm] Incompatible option enable_guc=3 - HuC is not supported!<br />
}}<br />
<br />
{{Accuracy|{{ic|CONFIG_DRM_I915_CAPTURE_ERROR}} を無効化する必要性に関する説明も参照も与えられていない。このフラグは 2022-12-05 の時点で {{Pkg|linux}} 内で [https://github.com/archlinux/svntogit-packages/blob/227caf8f1a66e00e3a4ecf9bc8e7a98d4d257c11/trunk/config#L6579 有効に設定されている]。}}<br />
<br />
[[ハードウェアビデオアクセラレーション]]を行うには、{{Pkg|intel-media-driver}} をインストールし、{{ic|CONFIG_DRM_I915_CAPTURE_ERROR}} を無効化したカーネルを使用しなければなりません。<br />
<br />
== 参照 ==<br />
<br />
* https://01.org/linuxgraphics/documentation (サポートされているハードウェア一覧など)<br />
<br />
{{TranslationStatus|Intel graphics|2024-03-22|802891}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Firefox&diff=36661
Firefox
2024-03-28T00:43:12Z
<p>AshMyzk: /* ハードウェアビデオアクセラレーション */ テンプレートを修正</p>
<hr />
<div>[[Category:ウェブブラウザ]]<br />
[[Category:Mozilla]]<br />
[[de:Firefox]]<br />
[[en:Firefox]]<br />
[[es:Firefox]]<br />
[[ru:Firefox]]<br />
[[zh-hans:Firefox]]<br />
[[zh-hant:Firefox]]<br />
{{Related articles start}}<br />
{{Related|Firefox/設定}}<br />
{{Related|Firefox/プロファイルを RAM に置く}}<br />
{{Related|Firefox/プライバシー}}<br />
{{Related|ブラウザ拡張機能}}<br />
{{Related|Chromium}}<br />
{{Related articles end}}<br />
[https://www.mozilla.org/firefox Firefox] は [https://www.mozilla.org Mozilla] によって開発されているオープンソースの人気グラフィカルウェブブラウザです。<br />
<br />
{{Note|古いバージョンでは、メニューに "設定" ではなく "環境設定" という項目が存在している場合があります。必要に応じて、この記事内の "設定" は "環境設定" に置き換えることができます。}}<br />
<br />
== インストール ==<br />
<br />
Firefox は {{Pkg|firefox}} パッケージで[[インストール]]できます。<br />
<br />
その他にも、以下のような選択肢があります:<br />
<br />
* {{App|Firefox Developer Edition|開発者向けのバージョン|https://www.mozilla.org/firefox/developer/|{{Pkg|firefox-developer-edition}}}}<br />
* {{App|Firefox Extended Support Release|長期サポート版|https://www.mozilla.org/firefox/organizations/|{{AUR|firefox-esr}}}}<br />
* {{App|Firefox Beta|ベータ版|https://www.mozilla.org/firefox/channel/desktop/#beta|{{AUR|firefox-beta-bin}}}}<br />
* {{App|Firefox Nightly|テスト用のナイトリービルド ([https://developer.mozilla.org/Firefox/Experimental_features 実験的な機能])|https://www.mozilla.org/firefox/channel/desktop/#nightly|{{AUR|firefox-nightly}}}} <br />
* {{App|Firefox KDE|OpenSUSE パッチが適用された Firefox。シンプルな Firefox プラグインで [[#KDE との統合|KDE との統合]]を実現しています。|https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox|{{AUR|firefox-kde-opensuse}}、{{AUR|firefox-developer-edition-kde}}}}<br />
* 異なる Mozilla ビルドチャンネルの上に、多かれ少なかれ特別な機能を持ったフォークが多数存在します。[[アプリケーション一覧/インターネット#Gecko ベース]] を参照。<br />
<br />
Firefox では、標準の英語以外に、多くの言語パックが利用可能です。言語パックは通常 {{ic|firefox-i18n-''言語コード''}} という名前です(ここで {{ic|''言語コード''}} には '''de''', '''ja''', '''fr''' など、任意の言語コードになりえます)。利用可能な言語パックの一覧については、{{Pkg|firefox}} は [https://archlinux.org/packages/extra/any/firefox-i18n/ firefox-i18n] を、{{Pkg|firefox-developer-edition}} は [https://archlinux.org/packages/extra/any/firefox-developer-edition-i18n/ firefox-developer-edition-i18n] を、{{AUR|firefox-nightly}} は [https://aur.archlinux.org/packages/?K=firefox-nightly- firefox-nightly-] を参照してください。<br />
<br />
{{Note|1=言語パックは ''-nightly'' と ''-developer-edition'' では、頻繁に文字列が変更されクラッシュする可能性があるため無効化されています。UI 言語を強制的に変更するには、{{ic|about:config}} で {{ic|intl.locale.requested}} を設定する必要があるかもしれません。[https://www.reddit.com/r/firefox/comments/lx3dp9/how_to_change_interface_language/gpovlsp/?context=8&depth=9]}}<br />
<br />
== アドオン ==<br />
<br />
Firefox は大量のアドオンのライブラリがあることで知られており、Firefox に機能を追加したり、もともとある機能の挙動を変更したりすることができます。Firefox の "アドオンマネージャ" から新しいアドオンを見つけたりインストールしたアドオンを管理できます。<br />
<br />
アドオンのインストール方法やアドオンの一覧は、[[ブラウザ拡張機能]] を見て下さい。<br />
<br />
=== 検索エンジンの追加 ===<br />
<br />
検索エンジンはブックマークを作成することにより Firefox に追加することができます:<br />
<br />
* アドレスバーの星マークをクリックするか、{{ic|Ctrl+d}} を押してください。<br />
* 作成したブックマークを右クリックし、''ブックマークを編集...'' を押してください。<br />
* ''URL'' 欄に検索 URL を入力してください。クエリ部分は {{ic|%s}} としてください。''キーワード'' 欄にユーザ定義文字を入力してください。例えば:<br />
<br />
URL:<br />
https://duckduckgo.com/html/?q=%s<br />
Keyword:<br />
d<br />
<br />
{{Note|古いバージョンでは "URL" でなく "Location" となっています。}}<br />
<br />
検索は、指定した検索エンジンのキーワードを検索語の前に置くことで行われます: {{ic|d archwiki}} は検索語 {{ic|archwiki}} を使って DuckDuckGo を検索します。<br />
<br />
アドオン拡張機能でも検索エンジンを Firefox に追加できます。利用可能な検索ツールとエンジンのリストは[https://addons.mozilla.org/firefox/search-tools/ このページ]を見てください。<br />
<br />
検索エンジンの非常に広範なリストは [https://mycroftproject.com/ Mycroft Project] で見つけることができます。<br />
<br />
==== firefox-extension-arch-search ====<br />
<br />
{{AUR|firefox-extension-arch-search}} パッケージを[[インストール]]することで、Firefox 検索ツールバーで Arch に関わる検索 (AUR, wiki, フォーラムなど) が追加できます。<br />
<br />
== プラグイン ==<br />
<br />
Firefox 85 で Flash Player を含むすべてのプラグインのサポートが削除されました。[https://support.mozilla.org/kb/npapi-plugins][https://support.mozilla.org/kb/end-support-adobe-flash]<br />
<br />
== 設定 ==<br />
<br />
Firefox では、多くの設定項目が公開されています。それらを調べるには、Firefox のアドレスバーに以下を入力します:<br />
<br />
about:config<br />
<br />
一度設定すると、これらはユーザーの現在のプロファイルに影響を与え、[https://www.mozilla.org/firefox/sync/ Firefox Sync] を介してすべてのデバイス間で同期させることができます。この方法で同期されるのは {{ic|about:config}} エントリのサブセットのみで、正確なサブセットは {{ic|about:config}} で {{ic|services.sync.prefs}} を検索して見つけることができることに注意してください。追加の設定やサードパーティの設定は、設定値の前に [https://support.mozilla.org/en-US/kb/sync-custom-preferences services.sync.prefs.sync] を付けて新しいブール値のエントリを作成することで同期させることができます。拡張機能のホワイトリストを同期するには、[https://addons.mozilla.org/firefox/addon/noscript/ NoScript] を使用します:<br />
<br />
services.sync.prefs.sync.capability.policy.maonoscript.sites<br />
<br />
NoScript の残りの設定を Firefox Sync 経由で同期するには、ブール変数 {{ic|noscript.sync.enabled}} を {{ic|true}} に設定する必要があります。<br />
<br />
=== 設定の保存 ===<br />
<br />
Firefox はプロファイルの設定を {{ic|prefs.js}} としてプロファイルフォルダ (通常は {{ic|~/.mozilla/firefox/''xxxxxxxx''.default/}}) に格納します。<br />
<br />
Firefox では、{{ic|user.js}} ファイルを使用してプロファイルを設定することもできます: [http://kb.mozillazine.org/User.js_file user.js] もプロファイルフォルダに保存されます。{{ic|user.js}} の設定は {{ic|prefs.js}} よりも優先されます。{{ic|user.js}} の設定はプロファイルの開始時にしかパースされません。ゆえに、{{ic|about:config}} で変更をテストして、その結果を見つつ {{ic|user.js}} を実行時に修正することができます。有用な出発点として、プライバシーやセキュリティに敏感なユーザーを対象とした [https://github.com/pyllyukko/user.js custom user.js] などを参照してください。<br />
<br />
上記のアプローチの欠点は、システム全体に適用されないことです。さらに、ブラウザの初回起動後にプロファイルディレクトリが作成されるため、「事前設定」としては役に立ちません。ただし、''firefox'' に新しいプロファイルを作成させ、再び閉じた後に、既に作成されているプロファイルフォルダの内容を [https://support.mozilla.org/en-US/kb/back-and-restore-information-firefox-profiles#w_restoring-a-profile-backup コピー] することは可能です。<br />
<br />
カスタマイズされた Firefox を広く展開する際に役立つ機能として、特定の設定をロックすることが望まれる場合があります。システム全体の設定を作成するには、[https://support.mozilla.org/ja/kb/customizing-firefox-using-autoconfig 環境設定のロック] で説明されている手順を実行します:<br />
<br />
1. {{ic|/usr/lib/firefox/defaults/pref/autoconfig.js}} を作成する:<br />
<br />
pref("general.config.filename", "firefox.cfg");<br />
pref("general.config.obscure_value", 0);<br />
<br />
2. {{ic|/usr/lib/firefox/firefox.cfg}} を作成する (これには実際の設定が保存されています):<br />
<br />
//<br />
//...設定...<br />
// 例: Pocket を無効化するには、以下の行をアンコメントしてください。<br />
// lockPref("extensions.pocket.enabled", false);<br />
// lockPref("browser.newtabpage.activity-stream.feeds.section.topstories", false);<br />
<br />
最初の行には正確に {{ic|//}} が無ければならないことに注意してください。ファイルの構文は {{ic|user.js}} のものと似ています。<br />
<br />
=== マルチメディアの再生 ===<br />
<br />
Firefox は HTML5 の {{ic|<audio>}} や {{ic|<video>}} 要素内のマルチメディアを再生するために [[FFmpeg]] を使用しています。どのフォーマットが実際にサポートされているかを確認したい場合は、動画をテストするには https://cconcolato.github.io/media-mime-support/ を、音声をテストするには https://hpr.dogphilosophy.net/test/ を使ってください。<br />
<br />
Firefox は、音声の再生と取り込みに [[PulseAudio]] を使用します。PulseAudio がインストールされていない場合、Firefox は代わりに [[ALSA]] を使用します。デフォルトでは Firefox は音声付きのメディアをすべて自動再生しないことに注意してください。[https://support.mozilla.org/en-US/kb/block-autoplay]<br />
<br />
{{Tip|オーディオが設定されていない場合、Firefox は動画を再生しないかもしれません。[[PipeWire]] と [[WirePlumber]] を使用する場合は、それらが正しく動作していることを確認し、必須の互換レイヤである {{Pkg|pipewire-pulse}} をインストールしてください。}}<br />
<br />
==== HTML5 DRM/Widevine ====<br />
<br />
Widevine は、Netflix や Amazon Prime Video などがビデオコンテンツを保護するために使用しているデジタル著作権管理ツールです。''設定 > 一般 > デジタル著作権管理(DRM)コンテンツ'' で有効にすることができます。この設定が無効になっているときに Widevine が有効なページにアクセスすると、Firefox はアドレスバーの下に DRM をインストールする許可を求めるプロンプトを表示します。これを承認し、''ダウンロード中'' バーが消えるのを待つと、Widevine で保護されたサイトのビデオを見ることができるようになります。<br />
<br />
Firefox では、[https://bugzilla.mozilla.org/show_bug.cgi?id=1700815 ハードウェア DRM 再生] を使用していないため、Widevine では 720p の動画 (またはそれ以下) しか再生できません。また、ウィンドウと設定で、プライベート モードのブラウジングを無効にする必要があります。<br />
<br />
==== "Open With" 拡張機能 ====<br />
<br />
# [https://addons.mozilla.org/firefox/addon/open-with/ Open With] アドオンをインストールします。<br />
# ''アドオン > Open With > Preferences'' に移動します。<br />
# ファイルをシステムにインストールし、インストールをテストするための指示に従います。<br />
# ''ブラウザの追加'' をクリックします.<br />
# ダイアログにこのメニューエントリの名前と, 動画ストリーミングプレイヤーを起動するコマンド (例: {{ic|/usr/bin/mpv}}) を記述してください.<br />
## 任意で、必要な引数をプレイヤーに追加する (例えば [[mpv]] には {{ic|--force-window --ytdl}} が必要でしょう)。<br />
# リンクを右クリックするか、動画を含むページを訪問してください。Open With のメニューから新しく作成したエントリを選択すると、そのサイトがサポートされていれば、期待通りにプレーヤーが開くでしょう。<br />
<br />
同じ手順で、''youtube-dl'' のようなビデオダウンローダーを関連付けることができます。<br />
<br />
==== ハードウェアビデオアクセラレーション ====<br />
<br />
VA-API による[[ハードウェアビデオアクセラレーション]] は [[Wayland]] [https://mastransky.wordpress.com/2020/06/03/firefox-on-fedora-finally-gets-va-api-on-wayland/] と [[Xorg]] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619523] [https://www.phoronix.com/scan.php?page=news_item&px=Firefox-80-VA-API-X11] で利用可能です。<br />
<br />
Firefox で VA-API を有効化するには:<br />
<br />
# あなたのビデオカードが、[[ハードウェアビデオアクセラレーション]]で説明されているように VA-API 用に正しく設定されていることを確認してください。<br />
# {{ic|about:support}} を開き ''Compositing'' (訳注: 日本語では ''画像処理'') を見てその値が "WebRender" になっていることを確認してください。GNOME や他のデスクトップ環境では、デフォルトで有効になっています。[https://mastransky.wordpress.com/2021/01/10/firefox-were-finally-getting-hw-acceleration-on-linux/]<br />
#* 2021年8月現在、"Software WebRender" は動作しないため、"Software WebRender" を実行していないことを確認してください。[https://bugzilla.mozilla.org/show_bug.cgi?id=1723540#c1]<br />
#* 必要であれば、{{ic|about:config}} ページで {{ic|gfx.webrender.all}} を {{ic|true}} に設定することにより、Hardware WebRender を強制的に有効化できます。<br />
# Firefox 115 及びそれ以降のバージョンを使用している場合、[[Intel]] GPU では VA-API がデフォルトで有効化されます。他の GPU においては、{{ic|about:config}} で {{ic|media.ffmpeg.vaapi.enabled}} を {{ic|true}} に設定してください。<br />
# [[Wayland]] を使用している場合、[[#Wayland|Wayland モード]] を有効にして Firefox を実行してください。<br />
# 任意で、マルチ GPU なシステム (例: IGP を搭載している Ryzen 7000 シリーズと GPU) で消費電力を削減したい場合や、IGP/GPU によってサポートされているより多くの動画コーデックを使用したい場合: MOZ_DRM_DEVICE 環境変数を好ましいレンダリングデバイスに設定して、Firefox を実行してください。(利用可能なデバイスは {{ic|stat /dev/dri/*}} でリストアップできます。)<br />
<br />
{{Note|1=<nowiki/><br />
* {{ic|about:support}} でエラーコード {{ic|FEATURE_HARDWARE_VIDEO_DECODING_DISABLE}} によりハードウェアビデオアクセラレーションがブロックされる場合、{{ic|1=media.hardware-video-decoding.force-enabled=true}} を設定することで、ハードウェアデコードを強制的に有効化することができます。詳細は [https://bbs.archlinux.org/viewtopic.php?id=281398] を参照してください。または、{{AUR|firefox-vaapi}} をインストールすることもできます。<br />
* NVIDIA のプロプライエタリドライバは VA-API をサポートしていませんが、新しいバージョンでは DMA-BUF をサポートしています。{{Pkg|libva-nvidia-driver}} を使うことで、[[CUDA]] を使用して NVIDIA でハードウェアビデオデコードを利用できます。必須の環境変数や about:config の変更に関するドキュメントは、[https://github.com/elFarto/nvidia-vaapi-driver/#firefox GitHub プロジェクト] を見てください。<br />
* 現在 [[VDPAU]] と {{Pkg|libva-vdpau-driver}} には DMA-BUF のサポートがないので、このパッケージは Firefox でのハードウェアビデオアクセラレーションを有効化しません。実際、Firefox 102 では、このパッケージをインストールして {{ic|media.ffmpeg.vaapi.enabled}} を設定すると、Firefox が起動時にクラッシュします。<br />
* 現在、Firefox の VA-API 実装は H.264/AVC、VP8 & VP9、AV1 でエンコードされた動画をデコードできます。AV1 のサポートには Firefox 98+ が必要です。[https://bugzilla.mozilla.org/show_bug.cgi?id=1745225]<br />
* この[https://bugzilla.mozilla.org/show_bug.cgi?id=1588904#c36 解決済みの問題]によれば、マルチ GPU のシステムは VA-API に適した GPU を自動的に選択するはずです。<br />
* {{Pkg|linux-hardened}} で [[AMDGPU]] を使用しているユーザは、{{Pkg|mesa}} [https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/mesa/mesa-9999.ebuild が kcmp システムコールを必要とする]ため、''linux-hardened'' を {{ic|1=CONFIG_CHECKPOINT_RESTORE=y}} で再ビルドする必要があるかもしれません。この[https://bugzilla.mozilla.org/show_bug.cgi?id=1624743 バグが解決された] ため、これはもはや必要ないかもしれません。<br />
* 時々、Wayland はハードウェアビデオデコードの機能に干渉することがあります。フルスクリーンにした時に動画が一瞬ちらつく場合、{{ic|about:config}} で {{ic|1=widget.wayland.opaque-region.enabled=false}} を設定する必要があるかもしれません。<br />
}}<br />
<br />
Firefox の VA-API ログを確認することで、VA-API の使用状況を確認することができます。環境変数 {{ic|1=MOZ_LOG="FFmpegVideo:5"}} を指定して Firefox を起動し、例えば動画再生時に VA-API が有効で使用されていることをログ出力で確認します ("VA-API" の文字列を検索してください) これらのログは、前述した2つのコンポジタ (WebRender または OpenGL) のうち1つだけが、あなたの特定のセットアップで VA-API と共に動作することを示すかもしれませんので、注意してください。<br />
<br />
{{Tip|YouTube でハードウェア デコードを許可するには、使用するビデオ コーデックがハードウェアによってサポートされている必要があります。GPU がサポートするプロファイルは [[ハードウェアビデオアクセラレーション#VA-API の確認]] で確認でき、使用する YouTube コーデックは [https://addons.mozilla.org/firefox/addon/h264ify/ h264ify] または [https://addons.mozilla.org/firefox/addon/enhanced-h264ify/ enhanced-h264ify] 拡張機能で制御できます (YouTube が提供していれば!)。}}<br />
<br />
=== スペルチェック ===<br />
<br />
Firefox は、システム全体にインストールされている [[:en:Hunspell|Hunspell]] 辞書と、独自の拡張システムを通じてインストールされた辞書を使用することができます。<br />
<br />
特定の言語のスペルチェックを有効にするには、任意のテキストフィールドを右クリックし、''Check Spelling'' ボックスをチェックします。スペルチェックの言語を選択するには、もう一度右クリックし、''言語'' サブメニューから言語を選択します。<br />
<br />
デフォルトの言語選択が定着しない場合は、[[#Firefox がデフォルトのスペルチェック辞書を記憶しない]] を参照してください。<br />
<br />
==== システム全体の Hunspell 辞書 ====<br />
<br />
[[:en:Hunspell|Hunspell]] と必要な言語の辞書をインストールします。<br />
<br />
==== 拡張機能としての辞書 ====<br />
<br />
より多くの言語を取得するには、任意のテキストフィールドを右クリックして、''辞書を追加...'' をクリックし、[https://addons.mozilla.org/firefox/language-tools/ 辞書と言語パックのリスト] からインストールしたい辞書を選択するだけです。<br />
<br />
{{Tip|ロシア語の場合、拡張機能は {{Pkg|firefox-spell-ru}} としてパッケージ化されています。}}<br />
<br />
=== XDG Desktop Portal との統合 ===<br />
<br />
バージョン 64 から、Firefox は任意で [[XDG デスクトップ ポータル]]を使用して、様々なデスクトップの機能 (ファイル選択ダイアログや [[デフォルトアプリケーション|MIME タイプ]]) を扱うことができます。例えば、デスクトップポータルによって、ウェブページにアップロードするためにファイルを選択する時や、''名前を付けて保存...'' でダウンロード先を指定する時に表示するダイアログプログラムを設定することができます。利用可能なバックエンドのリストは [[XDG デスクトップ ポータル#バックエンドとインターフェースのリスト]] を見てください。<br />
<br />
Firefox には、各機能をデスクトップポータルのリクエストで処理するかどうかや、デフォルトの GTK 機能を使用するかどうかを指定するための多くの独立した設定項目が存在します。<br />
<br />
各設定には以下の値を設定できます:<br />
<br />
* {{ic|0}} – しない<br />
* {{ic|1}} – 常に<br />
* {{ic|2}} – 自動 (大抵、Firefox が [[Flatpak]] 内から実行されているかや、{{ic|1=GDK_DEBUG=portals}} 環境変数が設定されているかどうかに依存します。)<br />
<br />
設定項目は以下のとおりです:<br />
<br />
* {{ic|widget.use-xdg-desktop-portal.file-picker}} – ファイル選択ダイアログに XDG ポータルを使用するか<br />
* {{ic|widget.use-xdg-desktop-portal.mime-handler}} – MIME ハンドラに XDG ポータルを使用するか<br />
* {{ic|widget.use-xdg-desktop-portal.settings}} – 設定やルックアンドフィールの情報に XDG ポータルの使用を試みるか<br />
* {{ic|widget.use-xdg-desktop-portal.location}} – 位置情報に XDG ポータルを使用するか<br />
* {{ic|widget.use-xdg-desktop-portal.open-uri}} – ファイルを開くために XDG ポータルを使用するか<br />
<br />
=== KDE との統合 ===<br />
<br />
* GTK アプリ (Firefox を含む) に [[KDE]] の外観を導入するには、{{Pkg|breeze-gtk}} と {{Pkg|kde-gtk-config}} をインストールしてください。その後、システム設定から ''外観 > アプリケーションスタイル > GNOME/GTK アプリケーションスタイルの設定...''で 'Breeze' を選択してください。<br />
* Firefox 64 以降で KDE のファイル選択・印刷ダイアログを使うには、{{Pkg|xdg-desktop-portal}} と {{Pkg|xdg-desktop-portal-kde}} をインストールし、{{ic|about:config}} で {{ic|widget.use-xdg-desktop-portal.mime-handler}} を {{ic|1}} に設定してください。また、{{ic|widget.use-xdg-desktop-portal.file-picker}} も {{ic|2}} から {{ic|1}} に設定する必要があります。<br />
* [[KDE]] の MIME タイプシステム、プロキシ、ファイルダイアログとの統合のために、OpenSUSE のパッチを適用した AUR の {{AUR|firefox-kde-opensuse}} を使うことができます。または、Firefox で使われている非推奨の {{ic|~/.local/share/applications/mimeapps.list}} から MIME データベース {{ic|~/.config/mimeapps.list}} へのシンボリックリンクを作成することで MIME タイプと統合することができます。[[XDG MIME Applications#mimeapps.list]] を参照してください。<br />
* 拡張機能/アドオンは、以下のような追加的な統合を提供することがあります:<br />
** [[Plasma]] におけるブラウザの統合: {{Pkg|plasma-browser-integration}} と [https://addons.mozilla.org/firefox/addon/plasma-integration/ Plasma Integration アドオン] が必要です。<br />
::{{Tip|Media Player ウィジェットやトレイ アイコンのエントリが重複しないようにするには、{{ic|media.hardwaremediakeys.enabled}} を {{ic|false}} にセットしてください。これは Firefox からのメディアエントリを無効化し、Plasma 統合アドオンからのものだけを使用します}}<br />
<br />
=== GNOME との統合 ===<br />
<br />
GNOME のファイル選択ダイアログを使用するには、{{Pkg|xdg-desktop-portal-gnome}} をインストールし、{{ic|about:config}} で {{ic|widget.use-xdg-desktop-portal.file-picker}} を {{ic|2}} から {{ic|1}} に変更する必要があります。<br />
<br />
=== 聴く (テキストの読み上げ) ===<br />
<br />
Firefox は、ウェブページを合成音声で読み上げることができます。<br />
<br />
==== セットアップ ====<br />
<br />
リーダービューに ''聴く'' アイコンを表示させるには、テキストの読み上げをセットアップする必要があります。Firefox は [[Speech dispatcher]] を使用します。これは、音声合成エンジンを必要とします。現在推奨されている音声合成エンジンは [[Festival]] です。<br />
<br />
==== 使用法 ====<br />
<br />
Mozilla のウェブサイトで[https://support.mozilla.org/ja/kb/firefox-reader-view-clutter-free-web-pages イラスト付きの手順]を見てください。<br />
<br />
''聴く'' アイコン (ヘッドフォンのアイコン) は、上記の設定をすべて行い、かつ Speech Dispatcher が動作していて、かつ Festival サーバを起動した後 (前ではいけません) に Firefox を起動したときにのみ、現れます。<br />
<br />
さらに、Festival サーバのプロセスは kill したあとも残っていることがありますが、Firefox を終了するとそのプロセスも終了します。<br />
<br />
一般的な問題については、[[#Web Speech API で音が出ない]] と [[#ナレータ/聴くのアイコンがリーダーモードで表示されない]] を見てください。<br />
<br />
==== festival-us の音声を使用する ====<br />
<br />
{{Pkg|festival-us}} パッケージの音声は {{Pkg|festival-english}} のものより良質な音を提供しますが、Firefox では動作しません。Firefox の利用可能な音声のリストに現れず、リーダービューを開いたときに Festival サーバのターミナル出力に以下のようなエラーメッセージが表示されます:<br />
<br />
{{bc| SIOD: unknown voice cmu_us_awb_cg }}<br />
<br />
これを修正するには、以下の行を[[編集]]する必要があります:<br />
<br />
* {{ic|/usr/share/festival/voices/us/cmu_us_awb_cg/festvox/cmu_us_awb_cg.scm}}<br />
* {{ic|/usr/share/festival/voices/us/cmu_us_rms_cg/festvox/cmu_us_rms_cg.scm}}<br />
* {{ic|/usr/share/festival/voices/us/cmu_us_slt_cg/festvox/cmu_us_slt_cg.scm}}<br />
<br />
これらのファイルそれぞれに対して、ファイルのコードの最後から2行目にコードを追加する必要があります。例えば、{{ic|cmu_us_awb_cg.scm}} に対しては以下の行の前にコードを追加します:<br />
{{bc|(provide 'cmu_us_awb_cg)}}<br />
<br />
{{ic|cmu_us_awb_cg.scm}} に追加する必要のあるコードは以下のとおりです。他の2ファイルに対しても、音声の名前、性別、方言、説明文を適切に変更して追加してください。<br />
{{bc|<br />
(proclaim_voice<br />
'cmu_us_awb_cg<br />
'((language english)<br />
(gender male)<br />
(dialect scottish)<br />
(description "This voice is Scottish")))<br />
}}<br />
<br />
{{Note|{{Pkg|festival-us}} がアップグレードされるたびに、これらの変更をいちいちやり直さないようにするには、[[pacman#アップグレードさせないファイルを設定]] を見てください。}}<br />
<br />
== ヒントとテクニック ==<br />
<br />
一般的な設定事項は [[Firefox 設定]]を、プライバシー関連の設定は [[Firefox プライバシー]]を参照してください。<br />
<br />
=== ダークテーマ ===<br />
<br />
Firefox は GTK のテーマ設定と OS 全体のダークモード外観設定 (GNOME 設定や KDE システム設定の Appearance セクションなど) に従うはずです。後者がうまく行かない場合、適切な {{Pkg|xdg-desktop-portal}} パッケージがインストールされていることを確認してください。<br />
<br />
Firefox 68 から、システムの GTK テーマや Firefox テーマに関わらず、全ての Firefox インターフェイスとウェブサイトにダークテーマを適用することができます。そうしたい場合、{{ic|about:config}} で {{ic|ui.systemUsesDarkTheme}} を {{ic|1}} に設定してください [https://bugzilla.mozilla.org/show_bug.cgi?id=1488384#c23]。<br />
<br />
Firefox 100 現在、{{ic|layout.css.prefers-color-scheme.content-override}} を使うことで、オプトインしている (CSS メディアクエリ [https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme prefers-color-scheme] を使用している) ウェブページや Firefox 独自のコンテンツ内ページのダークテーマを更に制御することができます。それを {{ic|3}} に設定することでブラウザテーマに、{{ic|2}} を設定することでシステム全体のダークモード設定に従うようになります (上記の {{ic|ui.systemUsesDarkTheme}} は、ユーザがダークモードの設定を変更していない場合、またはシステムがシステム全体のダークモード設定をサポートしていない場合、デフォルトで {{ic|0}} になります)。{{ic|1}} や {{ic|0}} に設定すると、それぞれライトモードとダークモードを常に強制するようになります。この設定は Firefox のユーザ設定の ''一般'' > ''言語と外観'' > ''ウェブサイトの外観'' からもアクセスできます。<br />
<br />
=== フレームレート ===<br />
<br />
Firefox が正しい値を自動的に検出できない場合は、デフォルトで 60 fps に設定されます。これを手動で修正するには、{{ic|layout.frame_rate}} をモニタのリフレッシュレート (例:144 Hzの場合は 144) に設定します。<br />
<br />
=== メモリ制限 ===<br />
<br />
ページがメモリを大量に消費してしまう (そして、[[Wikipedia:Out_of_memory|OOM (メモリ不足)]] になってしまう) のを防ぐために、[[Firejail]] を {{ic|rlimit-as}} オプションで使用することができます。<br />
<br />
=== 新しいタブの位置 ===<br />
<br />
新しいタブを表示する場所を (相対的または絶対的に) 制御するには、 {{ic|browser.tabs.insertAfterCurrent}} および {{ic|browser.tabs.insertRelatedAfterCurrent}} を使用します。詳細については、 [https://support.mozilla.org/en/questions/1229062] を参照してください。<br />
<br />
=== ウェブページのスクリーンショット ===<br />
<br />
ハンバーガーメニュー (「≡」) の 'その他のツール'' > ''ツールバーをカスタマイズ'' で追加できるスクリーンショットボタンを使うか、{{ic|Ctrl+Shift+s}} を押すか、ウェブページを右クリックすることで、''スクリーンショットを撮影'' することができます。詳細は [https://support.mozilla.org/ja/kb/take-screenshots-firefox] を見てください。<br />
<br />
または、開発者ツールのスクリーンショットボタンを使うこともできます。開発者ツールの ''設定'' メニューの ''利用可能なツールボックスボタン'' セクションから追加できます。開発者ツールの設定は、開発者ツールペインの右上にある、横に並んだ3つの点のボタンからアクセスできます。<br />
<br />
=== Wayland ===<br />
<br />
バージョン 121 から、Firefox はデフォルトで Xwayland ではなく [[Wayland]] モードを使用するため、設定は必要はありません。古いバージョンの Firefox では、[[環境変数]]によって [[Wayland]] モードへオプトインすることができます:<br />
<br />
$ MOZ_ENABLE_WAYLAND=1 firefox<br />
<br />
これを永続的なものにするには、 [[環境変数#グラフィック環境]] を参照してください。そして、通常通り Firefox をデスクトップランチャーから起動してください。<br />
<br />
動作していることを確認するには、{{ic|about:support}} 内の ''ウィンドウプロトコル'' を見てください。{{ic|wayland}} と表示されているはずです。{{ic|x11}} と表示されている場合、Firefox を [[Xorg]] ディスプレイサーバ下で実行していることを意味します。{{ic|xwayland}} と表示されている場合、システムは Wayland を実行しているが Firefox をレガシーな X11 として実行していることを意味します。<br />
<br />
Wayland と X.org を頻繁に切り替える必要がある場合、シェルのログイン[[コマンドラインシェル#設定ファイル|スタートアップスクリプト]]に条件分岐を追加すると便利かもしれません。例えば、[[Bash]] の {{ic|~/.bash_profile}} に:<br />
<br />
{{bc|1=<br />
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then<br />
export MOZ_ENABLE_WAYLAND=1<br />
fi<br />
}}<br />
<br />
=== ウィンドウマネージャのルール ===<br />
<br />
Firefox ウィンドウに異なる設定を適用するには、 Firefox の {{ic|--class}} オプションを使用して WM_CLASS 文字列を変更します。<br />
<br />
=== プロファイル ===<br />
<br />
新しい Firefox インスタンスを起動するには、複数のプロファイルが必要です。新しいプロファイルを作成するには、次の手順に従います:<br />
<br />
$ firefox [--new-instance] -P<br />
<br />
クラスは、使用されていないプロファイルで Firefox を起動するときに指定できます:<br />
<br />
$ firefox [--new-instance] -P ''プロファイル名'' --class=''クラス名''<br />
<br />
[https://ffprofile.com/ Firefox Profilemaker] を使うことで好きなデフォルトを持つ Firefox プロファイルを作成できます。<br />
<br />
=== タッチスクリーンジェスチャとトラックパッドのスクロール ===<br />
<br />
タッチジェスチャ (スクロールやピンチズームなど) や 1対1 のトラックパッドスクロール (Nautilus などの GTK 3 アプリケーションで確認できる) を有効にするには、 Firefox を起動する前に {{ic|1=MOZ_USE_XINPUT2=1}} [[環境変数]] を設定します。Wayland では、{{ic|1=MOZ_ENABLE_WAYLAND=1}} だけを設定すれば大丈夫です。<br />
<br />
https://bugzilla.mozilla.org/show_bug.cgi?id=1568722 により、Wayland ではキネティックスクロールがゆるく感じます。{{ic|about:config}} で {{ic|apz.gtk.kinetic_scroll.enabled}} をオフにすることで、キネティックスクロールをオフにできます。しかし、そうすると長いページで最初から最後までスクロールするのが大変になります。<br />
<br />
=== 複数のホームページ ===<br />
<br />
Firefox の起動時に複数のタブを開くには、新しいウィンドウを開いてから、必要なサイトを "ホームタブ" として開きます。<br />
<br />
''設定 > ホーム'' に移動し、''ホームページと新しいウィンドウ'' の下にある ''Firefox ホーム (既定)'' ボタンをクリックします。<br />
<br />
または、''設定 > ホーム'' に直接移動し、''ホームページと新しいウィンドウ'' の下の最初のフィールドを ''カスタムURL..'' に設定し、新しいホームページとして使用するページを次の形式で入力します:<br />
<br />
<nowiki>https://url1.com|https://url2.com|https://url3.com</nowiki><br />
<br />
=== PDF ビューアで2つのページを並べて表示する ===<br />
<br />
統合 PDF ビューアで2つのページを同時に表示するには、{{ic|about:config}} で {{ic|pdfjs.spreadModeOnLoad}} を {{ic|1}} に設定してください。<br />
<br />
=== キオスクモード ===<br />
<br />
Firefox は、chrome ブラウザ、コンテキストメニュー、その他典型的なデスクトップブラウジングで便利な機能を使用せずにページを全画面で表示するキオスクモードをサポートしています。これらは、ユーザがシステムのその他の部分を操作することを意図していない ATM や情報パネルで使用されています。<br />
<br />
キオスクモードを使うには、Firefox を以下のように起動してください:<br />
<br />
$ firefox --kiosk ''url''<br />
<br />
スタートアップページは、設定やコマンドラインパラメータで設定できます。<br />
<br />
印刷する必要がある場合、以下の用にすることで用紙サイズの設定ダイアログを表示させないようにすることができます:<br />
<br />
$ firefox --kiosk --kiosk-printing ''url''<br />
<br />
=== コンパクトモード ===<br />
<br />
Firefox 89 より、コンパクトモードの UI 密度オプションがカスタマイズパネルから削除されました [https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox]。しかし、依然としてコンパクトモードを使用することができます。使用するには、{{ic|about:config}} で {{ic|browser.uidensity}} を {{ic|1}} に設定してください。<br />
<br />
UI のスケールを小さくすることもできます。[[Firefox/設定#DPI の値を設定する]] 章を参照してください。ただし、0 から 1 の間の値を使用してください。<br />
<br />
=== GNOME 検索プロバイダ ===<br />
<br />
Firefox には GNOME シェル用の検索プロバイダが含まれています。これは、Firefox の実行中に Firefox のブックマークと履歴を GNOME シェル検索に公開します。しかし、このプロバイダはデフォルトで無効化されています。このプロバイダを有効化するには、{{ic|about:config}} で {{ic|browser.gnome-search-provider.enabled}} を {{ic|true}} に設定してください。<br />
<br />
=== ライブラリーウィンドウでカスタムの日付と時間の形式を使う ===<br />
<br />
''ライブラリー''ウィンドウ (ブックマーク、履歴、ダウンロードを表示するウィンドウ、{{ic|Ctrl+Shift+o}} と {{ic|Ctrl+Shift+h}} でアクセス可能) で使われる日付と時間の形式は、{{ic|user.js}} または {{ic|about:config}} で {{ic|intl.date_time.pattern_override.date_short}}、{{ic|intl.date_time.pattern_override.time_short}}、{{ic|intl.date_time.pattern_override.connector_short}} を設定することにより、カスタマイズできます。例えば、[[RFC:3339]] ("2022-12-31 22:49") に似た形式を使うには、これら3つのパラメータをそれぞれ {{ic|yyyy-MM-dd}}、{{ic|HH:mm}}、{{ic|{1} {0} }} に設定してください。<br />
<br />
{{ic|LC_TIME}} 環境変数を {{ic|en_DK.UTF-8}} に設定する方法は、古い Firefox バージョン (おそらく、57以前) でしか機能しません。Mozilla の[https://bugzilla.mozilla.org/show_bug.cgi?id=1426907 バグレポート 1426907] にさらなる情報があります。<br />
<br />
=== Firefox をシャットダウンする Ctrl+q キーバインドを無効化する ===<br />
<br />
{{ic|about:config}} で {{ic|browser.quitShortcut.disabled}} オプションを作成し、{{ic|true}} に設定してください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== トラブルシューティングモード ===<br />
<br />
コマンドラインスイッチ {{ic|-safe-mode}} は、Firefox を[https://support.mozilla.org/ja/kb/diagnose-firefox-issues-using-troubleshoot-mode トラブルシューティングモード]で起動し、そのセッションの間、拡張機能、テーマ、ハードウェアアクセラレーション、JIT、その他のいくつかの機能を無効にします。<br />
<br />
このモードは、Firefox が開いている間にハンバーガーメニューを押し、''ヘルプ'' の ''トラブルシューティングモード'' を選択し、モーダルダイアログで許可することでも有効化できます。これはブラウザの再起動を要求することに注意してください。<br />
<br />
このモードは Firefox 88 までセーフモードと呼ばれていました。<br />
<br />
=== Firefox のリフレッシュ ===<br />
<br />
Firefox の問題はプロファイルの問題 (プロファイルの破損など) によるものかもしれません。<br />
<br />
他の原因の可能性を潰したのであれば、テスト用の新しい Firefox プロファイルを作成して問題が解決するか調べてみるとよいかもしれません。新しいプロファイルを作成しプロファイルを切り替える方法に関する詳細は [https://support.mozilla.org/ja/kb/profile-manager-create-and-remove-firefox-profiles Firefox のサポートページ]で見られます。<br />
<br />
これで問題が解決したならば、元のプロファイルに戻し、Firefox をリフレッシュすることを検討するべきです。<br />
<br />
プロファイルのリフレッシュは、すべてのブラウジング履歴、ダウンロード履歴、ブックマーク、ウェブフォーム自動入力データ、個人の辞書、パスワードは保持され、拡張機能、テーマ、拡張機能のデータと設定などが含まれていない新しいプロファイルに転送されます。古いプロファイルのバックアップも保持されます。<br />
<br />
プロファイルをリフレッシュするには、{{ic|about:support}} に移動し、''Firefox をリフレッシュ'' を押し、表示されるモーダルダイアログで許可してください。{{ic|about:support}} は、ハンバーガーメニューの ''ヘルプ'' を押し、''他のトラブルシューティング情報'' をクリックすることでもアクセスできます。<br />
<br />
Firefox のリフレッシュに関する詳細 (新しいプロファイルに転送されるものに関する詳細など) は、[https://support.mozilla.org/ja/kb/refresh-firefox-reset-add-ons-and-settings Firefox のサポートページ]で見られます。<br />
<br />
=== ハードウェアビデオアクセラレーションの問題 ===<br />
<br />
Firefox におけるハードウェアビデオアクセラレーションの問題 (例: フリーズやグラフィックの破損) が発生する場合、Firefox を[[#トラブルシューティングモード|トラブルシューティングモード]]で起動して、ハードウェアビデオアクセラレーションが原因であることを確認してください。トラブルシューティングモードで問題が解決する場合、{{ic|about:config}} で {{ic|media.ffmpeg.vaapi.enabled}} を {{ic|false}} に設定し Firefox を再起動することでハードウェアビデオアクセラレーションを無効にできます。<br />
<br />
=== 拡張機能 X が一部の Mozilla 所有のドメインで動作しない ===<br />
<br />
デフォルトでは、拡張機能は {{ic|extensions.webextensions.restrictedDomains}} で指定されたページには影響を与えません。これを望まない場合、このフィールドをクリアすることができます ({{ic|about:*}} などの特殊ページには影響しません)。そして、{{ic|privacy.resistFingerprinting.block_mozAddonManager}} を作成し true に設定してください。<br />
<br />
=== Firefox の起動に非常に時間がかかる ===<br />
<br />
Firefox の起動に他のブラウザより時間がかかる場合、{{ic|/etc/hosts}} の localhost の設定が不足している可能性があります。設定方法については [[ネットワーク設定#ローカルネットワークのホストネーム解決]] を参照してください。<br />
<br />
Firefox 拡張機能が不具合を起こしていたり、拡張機能が多すぎたりしても、起動が遅くなる原因となる場合があります。再起動時に拡張機能を無効化する[[#トラブルシューティングモード|トラブルシューティングモード]]を使うことで確認できます。<br />
<br />
起動が遅くなる他の原因として、プロファイルの問題 (プロファイルの破損など) もあります。Firefox プロファイル関連のトラブルシューティング手順については、[[#Firefox のリフレッシュ]] を参照してください。<br />
<br />
=== フォントのトラブルシューティング ===<br />
<br />
[[フォント設定]]を参照してください。<br />
<br />
Firefox には Fontconfig で使用できるフォント置換の数を決める設定があります。全ての置換ルールを使用するには、{{ic|gfx.font_rendering.fontconfig.max_generic_substitutions}} を (最大値の) {{ic|127}} に変更してください。<br />
<br />
Firefox には ''Twemoji Mozilla'' フォントが同梱されています。システムの絵文字フォントを使用するには、{{ic|about:config}} で {{ic|font.name-list.emoji}} を {{ic|emoji}} に設定してください。さらに、Mozilla のフォントがシステムの絵文字フォントと干渉しないようにするには、{{ic|gfx.font_rendering.opentype_svg.enabled}} を {{ic|false}} に設定するか、{{ic|/usr/lib/firefox/fonts/TwemojiMozilla.ttf}} を削除してください ([[pacman#インストールさせないファイルを設定]] も参照)。<br />
<br />
=== メールクライアントの設定 ===<br />
<br />
ブラウザ内部では、{{ic|mailto}} リンクが Gmail や Yahoo Mail などのウェブアプリケーションによってデフォルトで開かれます。外部の email プログラムを設定するには、''設定 > 一般 > プログラム'' を開き、 {{ic|mailto}} content type の ''取り扱い方法'' を変更してください。ファイルパスを設定する必要があります (例: Kmail の場合は {{ic|/usr/bin/kmail}})。<br />
<br />
ブラウザ外部では、{{ic|mailto}} リンクは {{ic|x-scheme-handler/mailto}} mime タイプによって扱われます。これは [[xdg-mime]] で簡単に設定できます。詳細や代替については [[デフォルトアプリケーション]] を参照してください。<br />
<br />
=== ファイルの関連付け ===<br />
<br />
[[デフォルトアプリケーション]] を参照してください。<br />
<br />
=== Firefox が不必要に ~/Desktop を作成し続けてしまう ===<br />
<br />
Firefox はファイルをダウンロード・アップロードするためのデフォルトの場所として {{ic|~/Desktop}} を使っています。他のフォルダに変更するには、[[XDG ユーザーディレクトリ]] で説明されているように {{ic|XDG_DESKTOP_DIR}} オプションを設定してください。<br />
<br />
=== ダウンロードディレクトリに保存した覚えのないファイルが出現する ===<br />
<br />
Firefox バージョン 98 では、外部プログラムでファイルを開く動作が静かに変更されました。ファイルを {{ic|/tmp}} にダウンロードしてそのファイルの場所を子プロセスに与える代わりに、Firefox はユーザーがファイルを保存することを選択したかのようにファイルをダウンロードし、ダウンロードディレクトリ内のファイルの場所を子プロセスに与えるようになりました。その結果、ダウンロードには、閲覧するためだけに開くつもりだったファイルが散在することになります。これは、ダイアログでファイルを開くために使用するプログラムを選択した場合と、特定のプログラムで自動的に開くように設定したファイルの種類の場合の両方で発生します。特に、これは Firefox で内部的に開かれる一部のファイルタイプ (ブラウザ内の '''pdfJS''' ビューアが有効になっている場合の PDF ドキュメントなど) でも発生します。<br />
<br />
ファイルをどうするか尋ねるダイアログでは、実際には常にファイルを保存しようとしているにもかかわらず、古い選択肢 (開く ''か'' 保存する) が表示されています。この動作は、ファイルがディスクに保存されないことを期待している特定のユーザーにとって、現実的にセキュリティやプライバシーのリスクをもたらす可能性があるため、新しい動作を無効にすることをお勧めします。<br />
<br />
これを行うには、{{ic|about:config}} で {{ic|browser.download.start_downloads_in_tmp_dir}} を作成し、{{ic|true}} に設定します。<br />
<br />
{{Note|このオプションの名前は、ファイルのダウンロード中にファイルを /tmp にキャッシュするだけで、その後別の場所に移動するように聞こえるかもしれませんが、Mozilla はこれが実際に以前の動作を復元することを [https://www.mozilla.org/en-US/firefox/102.0a1/releasenotes/ 確認] しています。:<br />
: エンタープライズポリシー ({{ic|StartDownloadsInTempDirectory}}) と {{ic|about:config}} 設定に ({{ic|browser.download.start_downloads_in_tmp_dir}}) が追加され、Firefox で設定されたダウンロードフォルダではなく、OS の一時フォルダ (のサブフォルダ) にダウンロードファイルを置くようになりました。Firefox はダイアログから開いたファイルや、ヘルパーアプリケーションで自動的に開くように設定されたファイルは、このフォルダに残ります。保存されたファイル (前述のように開かなかったファイル) は、Firefox のダウンロードフォルダに残ってしまいます。}}<br />
<br />
==== 検討すべき追加の設定 ====<br />
<br />
* {{ic|browser.download.forbid_open_with}}: {{ic|true}} (ファイル保存ダイアログで保存するかキャンセルするかを尋ねるだけであり、別のプログラムで開くように尋ねることはありません)<br />
* {{ic|browser.download.always_ask_before_handling_new_types}}: {{ic|true}} (''設定 > 一般 > ファイルとプログラム > 他のファイルは Firefox でどのように扱いますか? > ファイルを開くか保存するかを尋ねる''と同じ)<br />
* Firefox 自体で開くように設定されているものを除き、''設定 > 一般 > ファイルとプログラム'' で既知のファイルタイプをすべて ''毎回確認する'' に設定します。<br />
<br />
=== userChrome.css と userContent.css の変更が無視される ===<br />
<br />
{{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} を {{ic|about:config}} で {{ic|true}} に設定します。<br />
<br />
=== 中クリックの動作 ===<br />
<br />
UNIX 系 OS で一般的なように、マウスの中ボタンを使ってハイライトされた/追加されたテキストをクリップボードに貼り付けるには、{{ic|about:config}} から {{ic|middlemouse.contentLoadURL}} または {{ic|middlemouse.paste}} を {{ic|true}} にセットしてください。{{ic|middlemouse.contentLoadURL}} を有効にすることは、Firefox 57 より前のデフォルトの動作でした。<br />
<br />
中クリックでスクロールする場合 (Windows ブラウザのデフォルト) は {{ic|general.autoScroll}} を {{ic|true}} に設定してください。<br />
<br />
=== バックスペースが '戻る' ボタンとして機能しない ===<br />
<br />
[http://kb.mozillazine.org/Browser.backspace_action MozillaZine] によれば、{{ic|Backspace}} キーがどの機能にマッピングされるかはブラウザを動かしているプラットフォームによって決まっていました。妥協案として、{{ic|Backspace}} キーで戻る/進む、ページ上/下スクロール、または何もしないようにする設定が作成されました。<br />
<br />
{{ic|Backspace}} でタブの履歴の1ページ前に戻り、{{ic|Shift+Backspace}} で進むようにするには、{{ic|about:config}} で {{ic|browser.backspace_action}} を {{ic|0}} に設定してください。<br />
<br />
{{ic|Backspace}} キーでページをスクロールアップ、{{ic|Shift+Backspace}} でスクロールダウンするようにするには、{{ic|browser.backspace_action}} を {{ic|1}} に設定してください。このプロパティを他の値に設定すると、キーは割り当てられません (Arch Linux のデフォルトは {{ic|2}} です。つまり、デフォルトでは割り当てられていません)。<br />
<br />
=== Firefox がログイン情報を記憶しない ===<br />
<br />
[https://support.mozilla.org/ja/kb/profiles-where-firefox-stores-user-data Firefox のプロファイル]フォルダ内の {{ic|cookies.sqlite}} ファイルが破損していることが原因かもしれません。このファイルを修正するには、Firefox が実行中でないときに {{ic|cookie.sqlite}} の名前を変更するか削除してください。<br />
<br />
何らかのターミナルを起動し、以下を実行してください:<br />
<br />
$ rm -f ~/.mozilla/firefox/<プロファイル id>.default/cookies.sqlite<br />
<br />
プロファイル id はランダムな8文字の文字列です。<br />
<br />
Firefox を再起動し、問題が解決したかどうか確かめてください。<br />
<br />
うまく行かない場合、{{ic|cookies.sqlite.bak}} ファイルがあるか調べてください。このファイルは、cookie を手動で復元するために使用できます。<br />
<br />
=== フルスクリーンにできない/解除できない ===<br />
<br />
Firefox は、[https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html EWMH/ICCCM] に準拠したウィンドウマネージャを検出した場合、ルートウィンドウに WM_STATE メッセージを送信して、Firefox を (ウィンドウマネージャによって定義されている) フルスクリーンモードに入らせる (または解除させる) ことを要求しようと試みます。ウィンドウマネージャはそれを無視することができますが、無視した場合、Firefox は要求が拒否されたとみなし、要求をエンドユーザに伝搬し、その結果何も起こりません。その結果、動画をフルスクリーンにできないことになります。一般的な回避策は {{ic|about:config}} で {{ic|full-screen-api.ignore-widgets}} を {{ic|true}} に設定することです。<br />
<br />
関連するバグレポート: [https://bugzilla.mozilla.org/show_bug.cgi?id=1189622 Bugzilla 1189622]。<br />
<br />
=== YouTube がフルスクリーンの時にスクロールバーが非表示にならない/無効化されない ===<br />
<br />
{{Accuracy|このようなことが起こるはずがありません。uBlock Origin のフィルタを追加することは、やっつけ仕事的な回避策です。これはバグのように思えます (または、他の拡張機能が干渉しているのかもしれません)。}}<br />
<br />
これは [https://ublockorigin.com/ uBlock Origin] のフィルタを使うことで修正できます。フィルタを追加するには、uBlock Origin 拡張機能アイコン > 3つの歯車マーク (''ダッシュボードを開く'') > ''マイフィルター'' をクリックし、以下をテキスト入力枠に追加してください:<br />
<br />
www.youtube.com##ytd-app:style(overflow: hidden !important;)<br />
<br />
変更を適用し、YouTube のウィンドウを再読込みしたら、フィルタが効果を発揮します。これが機能するためには、整形フィルタリング (中央の目のアイコンです) を有効化する必要があることに注意してください。<br />
<br />
=== 一部のサイトで JavaScript のコンテキストメニューが表示されない ===<br />
<br />
{{ic|about:config}} で {{ic|dom.w3c_touch_events.enabled}} を {{ic|0}} に設定してみることができます。<br />
<br />
=== Firefox がデフォルトのスペルチェック言語を記憶しない ===<br />
<br />
デフォルトのスペルチェック言語は以下のようにして設定できます:<br />
<br />
# アドレスバーに {{ic|about:config}} と入力。<br />
# {{ic|spellchecker.dictionary}} を使用したい言語に設定 (例: {{ic|en_GB}})。<br />
# Firefox のプラグインとして辞書をインストールした場合、設定する文字列は {{ic|en-GB}} となりますが、{{Pkg|hunspell}} 辞書の場合は {{ic|en_GB}} となるので注意してください。<br />
<br />
システム全体で {{Pkg|hunspell}} の辞書をインストールしているだけでは、Firefox はデフォルトの辞書言語の設定を記憶しません。Firefox プラグインとして[https://addons.mozilla.org/firefox/language-tools/ 辞書]をインストールすることで問題は解決します。''アドオン'' ページに ''辞書'' のタブが作られます。スペルチェックのデフォルトをアドオン辞書の言語にするために、{{ic|about:preferences#general}} で ''ウェブページの表示に使用する言語の優先順位'' の順番を変更する必要がある場合があります。<br />
<br />
'''StackExchange''' プラットフォームにおける関連する質問: [https://stackoverflow.com/questions/26936792/change-firefox-spell-check-default-language/29446115], [https://stackoverflow.com/questions/21542515/change-default-language-on-firefox/29446353], [https://askubuntu.com/questions/184300/how-can-i-change-firefoxs-default-dictionary/576877]<br />
<br />
関連するバグレポート: [https://bugzilla.mozilla.org/show_bug.cgi?id=776028 Bugzilla 776028], [https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1026869 Ubuntu bug 1026869]<br />
<br />
=== Firefox がシステム全体の Hunspell のスペルチェック辞書を見つけてくれない ===<br />
<br />
{{ic|spellchecker.dictionary_path}} の設定が存在していて、かつ、システムの Hunspell 辞書へのパス ({{ic|/usr/share/hunspell}}) に設定されていることを確認してください。<br />
<br />
=== 一部の MathML 記号が表示されない ===<br />
<br />
MathML を正しく表示するには Latin Modern Math や STIX などの Math フォントが必要になります (MDN のページを参照: [https://developer.mozilla.org/en-US/docs/Mozilla/MathML_Project/Fonts#Linux])。<br />
<br />
Arch Linux では、これらのフォントは {{Pkg|texlive-fontsextra}} によって提供されていますが、デフォルトでは fontconfig から使うことはできません。詳しくは [[TeX Live#Fontconfig でフォントを利用可能にする]] を見て下さい。他の[[フォント#数学|数学フォント]]を使うこともできます。このバグ [https://bugzilla.mozilla.org/show_bug.cgi?id=1208776] に遭遇した場合、{{Pkg|otf-latinmodern-math}} をインストールすると解決する可能性があります。<br />
<br />
=== 動画がロードされるが、再生されない ===<br />
<br />
PulseAudio の問題かもしれません。[[PulseAudio/トラブルシューティング#ブラウザが動画をロードするが、再生しない]] で提案されている修正法を見てください。<br />
<br />
=== スクロール時にチラツキが発生する ===<br />
<br />
''設定 > 一般 > ブラウジング'' でスムーズスクロール機能を無効化してみてください。注意点として、これによりページがカクカクとスクロールするようになります。<br />
<br />
=== Firefox の WebRTC モジュールがマイクを認識できない ===<br />
<br />
WebRTC アプリケーション (例: [https://mozilla.github.io/webrtc-landing/gum_test.html Firefox WebRTC getUserMedia テストページ]) でマイクが認識できないと表示されることがあります。ALSA と PulseAudio どちらの環境でも発生します。Firefox のデバッグログには以下のようなエラーが表示されます:<br />
<br />
{{hc|1=$ NSPR_LOG_MODULES=MediaManager:5,GetUserMedia:5 firefox|2=<br />
...<br />
[Unnamed thread 0x7fd7c0654340]: D/GetUserMedia VoEHardware:GetRecordingDeviceName: Failed 1<br />
}}<br />
<br />
{{ic|about:config}} で {{ic|media.navigator.audio.full_duplex}} プロパティを {{ic|false}} に設定して Firefox を再起動してみてください。<br />
<br />
PulseAudio の [[PulseAudio/トラブルシューティング#エコー除去・ノイズキャンセルを有効にする|module-echo-cancel]] を使用している場合も Firefox が仮想のエコー除去ソースを認識できないことがあり、上記の設定で解決することがあります。<br />
<br />
=== WebRTC 共有インジケータが XML パースエラーを表示する ===<br />
<br />
マイクロフォンやウェブカメラの共有に同意した後、黄褐色の背景に赤い境界線のウィンドウがプライマリウィンドウの左上隅に表示され、以下のエラーメッセージを表示することがあります:<br />
<br />
XML Parsing Error: no root element found<br />
Location: chrome://browser/content/webrtcLegacyIndicator.xhtml<br />
Line Number: 1, Column 1:<br />
^<br />
<br />
この場合、以下を行うことでこの問題を解決できるはずです:<br />
<br />
# {{ic|about:support}} を開く。<br />
# ''起動時キャッシュを消去'' ボタンをクリックし、ブラウザの再起動に同意する。<br />
<br />
詳細は [https://bugzilla.mozilla.org/show_bug.cgi?id=1639821 Mozilla のバグレポート] を参照してください。<br />
<br />
=== 中国のアカウントでログインできません ===<br />
<br />
Firefox は、中国のユーザ向けに、国際的なアカウントとは全く異なるローカルアカウントを使用したサービスを提供しています。{{Pkg|firefox}} パッケージでインストールされた Firefox は、デフォルトで国際アカウントシステムを使用しています。中国ローカルサービスに変更するには、[http://mozilla.com.cn/thread-343905-1-1.html このページ] にあるアドオンマネージャをインストールすると、中国アカウントでログインできるようになります。<br />
<br />
=== JACK と PulseAudio を使用した場合、特定のビデオで音声が聞こえない ===<br />
<br />
もしあなたが JACK と PulseAudio を組み合わせて使っていて、いくつかのビデオで音が聞こえない場合、それらのビデオはモノラル音声であることが原因かもしれません。これは、あなたの JACK セットアップがステレオ以上のものを使っていて、普通のヘッドホンを使っている場 合に起こります。これを解決するには、PulseAudio JACK Sink の {{ic|front-center}} ポートをシステム出力の {{ic|playback_1}} と {{ic|playback_2}} ポートの両方に接続してみて下さい。<br />
<br />
これは、スクリプトを使って自動的に行うこともできます。<br />
<br />
{{hc|jack-mono.sh<br />
|2=#!/bin/sh<br />
jack_connect "PulseAudio JACK Sink:front-center" "system:playback_1"<br />
jack_connect "PulseAudio JACK Sink:front-center" "system:playback_2"<br />
}}<br />
<br />
シンクとポートの名前が異なる可能性があることに注意してください。あなたの JACK セットアップがどのようなものか、{{Pkg|cadence}} の Catia のような Patchbay でチェックすることができます。<br />
<br />
=== 位置情報が機能しない ===<br />
<br />
最近、Google は Arch Linux での位置情報サービスの使用を制限し、ウェブサイトで位置情報を有効にすると次のようなエラーが発生するようになりました。{{ic|Geolocation error: Unknown error acquiring position}}。[https://www.hulu.com/ Hulu] のようなリージョンロックされたサービスでは、サイトに対して位置情報サービスを許可しているにも関わらず、あなたの位置が特定できないことを示す同様のエラーが表示されることがあります。<br />
<br />
これらの問題を回避するために、[https://location.services.mozilla.com/ Mozilla Location Service] を使用するように切り替えることができます。{{ic|about:config}} で {{ic|geo.provider.network.url}} の設定を変更してください。<br />
<br />
<nowiki>https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%</nowiki><br />
<br />
詳しくは {{Bug|65241}} をご覧ください。<br />
<br />
=== ウィンドウマネージャで、マウスの右ボタンを押すと最初のオプションが即座にクリックされる ===<br />
<br />
この問題は、[[i3]]、[[bspwm]]、[[xmonad]] で確認されています。<br />
<br />
この問題を解決するには、{{ic|about:config}} に移動して {{ic|ui.context_menus.after_mouseup}} を {{ic|true}} に変更します。<br />
<br />
[https://www.reddit.com/r/i3wm/comments/88k0yt/right_mouse_btn_instantly_clicks_first_option_in/] を参照してください。<br />
<br />
=== コンポジットを無効にしたり有効にしたりすると、Firefox のウィンドウが再描画されない ===<br />
<br />
環境変数 {{ic|MOZ_X11_EGL}} の設定を解除してください。<br />
<br />
関連するバグレポート: [https://bugzilla.mozilla.org/show_bug.cgi?id=1711039 Bugzilla 1711039]<br />
<br />
=== Firefox が起動時にデフォルトブラウザとして設定するよう要求され続ける ===<br />
<br />
[[デスクトップ環境]] を使用している場合、システム設定で Firefox がデフォルトブラウザとして設定されているかどうかを確認してください。そうでなければ、[[xdg-utils]] パッケージが提供する以下の {{man|1|xdg-settings}} コマンドを実行して、システムでどのブラウザがデフォルトとして設定されているかを確認することができます。<br />
<br />
xdg-settings get default-web-browser<br />
<br />
値が返されない場合、またはFirefoxでない場合は、次のコマンドを実行して設定します。<br />
<br />
$ xdg-settings set default-web-browser firefox.desktop<br />
<br />
それでも Firefox がデフォルトブラウザとして設定するように要求してきた場合、URL スキームが ''http'' と ''https'' を処理するように設定すれば、静かになることがあります。これを行うには、以下の {{man|1|xdg-mime}} コマンドを実行してください。<br />
<br />
$ xdg-mime default firefox.desktop x-scheme-handler/http<br />
$ xdg-mime default firefox.desktop x-scheme-handler/https<br />
<br />
これらもうまくいかない場合は、環境変数 {{ic|GTK_USE_PORTAL}} が設定されているかどうかを確認してください。(すべての値がバグの引き金になります) その場合は、設定を解除してください。関連するバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Bugzilla 1516290] それでもうまくいかない場合、あるいは設定していない場合は、アドレスバーから {{ic|about:config}} に移動し、変数 {{ic|widget.use-xdg-desktop-portal}} が {{ic|true}} に設定されているかを確認し、もしそうなら {{ic|false}} を設定してください。<br />
<br />
デフォルトブラウザのチェックを完全に無効にしたい場合は、アドレスバーから {{ic|about:config}} に移動し、{{ic|browser.shell.checkDefaultBrowser}} を {{ic|false}} に設定してください。<br />
<br />
=== 動画のちらつき ===<br />
<br />
動画のちらつきが発生し、動画 (特に高解像度の動画) の視聴時に1つのコアの使用率だけが100%になる場合、以下で解決するかもしれません。<br />
<br />
{{ic|about:config}} を開き、{{ic|dom.ipc.processCount}} と検索して {{ic|dom.ipc.processCount.file}} を 1 からより高い値に変更してください。良い値を見つけるための暫定的な方法としては、良い結果を得られるまで値を1ずつ増やすというものがあります。しかし、4が良い値であるようです。<br />
<br />
=== 一部のページでベンガル語フォントが壊れる ===<br />
<br />
ほとんどの場合、{{Pkg|noto-fonts}} をインストールし、'''Fonts and Colors''' (訳注: Firefox 108.0.2 の時点でこの設定セクションはもはや存在せず、設定の ''一般'' > ''言語と外観'' > ''フォント'' がこれに相当します) の設定で '''Noto Sans Bengali''' をデフォルトにすると解決します。しかし、一部のソーシャルメディアサイトでは、ベンガル語のフォントは依然として壊れている場合があります。そのような場合、Mozilla は、ページ内でロードされているフォントを確認する詳細なガイドを提供しています。[https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Open_the_Inspector Page Inspector] を使い、ページ内でロードされている[https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts#all_fonts_on_page すべてのフォント]を確認してください。'''Noto Sans''' 以外のフォントをシステムから削除することで、この問題を恒久的に解決できます。<br />
<br />
一部のフォントは他のパッケージの依存関係としてインストールされます。例えば、{{Pkg|chromium}} は {{Pkg|ttf-liberation}} を依存関係としてインストールします。これは一部の Firefox ページで自動的に読み込まれ、そのようなページでベンガル語のフォントを破壊します。この問題を解決するには、以下のルールを[[フォント設定]]で使用してください:<br />
<br />
{{hc|$XDG_CONFIG_HOME/fontconfig/fonts.conf|2=<br />
<match target="pattern"><br />
<test qual="any" name="family"><string>Liberation</string></test><br />
<edit mode="assign" name="family" binding="same"><string>Noto Sans Bengali</string></edit><br />
</match><br />
}}<br />
<br />
=== Web Speech API で音が出ない ===<br />
<br />
Firefox はテキストの読み上げ (TTS: Text To Speech) のために speechd を使用します。{{ic|spd-say "some test sentence"}} コマンドを使ってテキストの読み上げが行われるかどうかを確認できます。また、{{ic|spd-say -L}} を使って音声のリストを取得できます。音声がリストにない場合、{{Pkg|espeak-ng}} パッケージでインストールできます。そのままではうまく動作しない場合、おそらく設定する必要があります。{{ic|spd-conf}} コマンドを使うか、設定ファイル {{ic|.config/speech-dispatcher/speechd.conf}} を編集することで可能です。以下の行が有効になっている必要があります (つまり、行頭に # が無い):<br />
<br />
AddModule "espeak-ng" "sd_espeak-ng" "espeak-ng.conf"<br />
DefaultModule espeak-ng<br />
<br />
=== ナレータ/聴くのアイコンがリーダーモードで表示されない === <br />
<br />
==== 合成音声を有効化する ====<br />
<br />
https://developer.mozilla.org/ja/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API によると、合成音声を有効化する必要があります (デフォルトで有効化されています)。有効にするには、{{ic|about:config}} で {{ic|media.webspeech.synth.enabled}} を {{ic|true}} に設定してください。<br />
<br />
==== フィンガープリント採取防止機能を無効化する ====<br />
<br />
https://support.mozilla.org/ja/kb/firefox-protection-against-fingerprinting によると、フィンガープリント採取防止機能は WebSpeech API を無効化します。このオプションを有効化している場合、それを無効化してナレータが機能するようにする必要があります。フィンガープリント採取防止機能を無効化するには、{{ic|about:config}} で {{ic|privacy.resistFingerprinting}} を {{ic|false}} に設定してください。<br />
<br />
==== filter voices を無効化する ====<br />
<br />
ナレータアイコンが表示されない場合、{{ic|about:config}} で {{ic|narrate.filter-voices}} を {{ic|false}} に設定してみてください。<br />
<br />
これは、{{ic|speech-dispatcher}} が動作するかどうかをチェックするために使用できます。うまく行く場合、リーダーモードで開いた記事の言語の音声を見逃すかもしれません ({{ic|spd-say -L}} を確認)。リーダーの記事の言語の音声がインストールされている場合、{{ic|speech-dispatcher}} の構成に関連する設定あるいはデフォルトが正しくないのかもしれません。<br />
<br />
=== ファイルをダウンロードするときにファイル選択ダイアログが開かない ===<br />
<br />
ファイルのダウンロード時に (Firefox の設定で「ファイルを開くか保存するかを確認する」オプションを有効にしていたとしても) ファイル選択ダイアログが表示されない場合、{{Pkg|xdg-desktop-portal}} とそれの適切な実装をインストールしていないのかもしれません。デスクトップ環境は通常それの実装を提供しますが、スタンドアローンなウィンドウマネージャ ([[i3]] など) を使用してる場合、場合によっては手動でインストールする必要があります。{{Pkg|xdg-desktop-portal}} と (例えば) {{Pkg|xdg-desktop-portal-gtk}} を[[インストール]]してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.mozilla.org/firefox/ 公式ウェブサイト]<br />
* [https://www.mozilla.org/ Mozilla Foundation]<br />
* [[MozillaWiki:Firefox]]<br />
* [[Wikipedia:Mozilla Firefox]]<br />
* [https://addons.mozilla.org/ Firefox アドオン]<br />
* [https://addons.mozilla.org/firefox/themes/ Firefox テーマ]<br />
* [https://ftp.mozilla.org/pub/firefox/releases/ Mozilla の FTP]<br />
* [http://forums.mozillazine.org/ mozillaZine] 非公式フォーラム<br />
<br />
{{TranslationStatus|Firefox|2024-02-03|798523}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AE%E5%90%91%E4%B8%8A&diff=36660
パフォーマンスの向上
2024-03-28T00:39:42Z
<p>AshMyzk: /* Zram または zswap */ 訳を修正</p>
<hr />
<div>[[Category:ハードウェア]]<br />
[[Category:システム管理]]<br />
[[en:Improving performance]]<br />
[[es:Improving performance]]<br />
[[fr:Improving performance]]<br />
[[pl:Improving performance]]<br />
[[pt:Improving performance]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|パフォーマンスの向上/ブートプロセス}}<br />
{{Related|Pacman ヒント#パフォーマンス}}<br />
{{Related|OpenSSH#SSH の高速化}}<br />
{{Related|OpenOffice#OpenOffice の高速化}}<br />
{{Related|ノートパソコン}}<br />
{{Related|Preload}}<br />
{{Related articles end}}<br />
<br />
この記事では、知覚または計測できるシステムパフォーマンスの向上を最終目的として、パフォーマンスに関連する基本的なシステム診断、及び、リソース消費量の削減やシステム最適化のための手順に関する情報を提供しています。ゲーミングおよび低レイテンシに特有のその他のアドバイスは [[ゲーム#パフォーマンスを向上させる]] も参照してください。<br />
<br />
== 基本 ==<br />
<br />
=== システムを知る ===<br />
<br />
システムをチューンするには、全体のスピードを下げているボトルネックやサブシステムに狙いを定めるがベストな方法です。システムの仕様を知ることは、それらを特定することに役立ちます。<br />
<br />
* (LibreOffice や Firefox などの) 巨大なアプリケーションを同時に動作させたときにコンピュータが遅くなる場合、RAM の容量が十分であるか確認してください。以下のコマンドを使って、"available" 列の値を確認してください: {{bc|$ free -h}}<br />
* 起動時間が長い場合、または、アプリケーションを初めて起動するとき (だけ) にロードに長い時間が掛かる場合、おそらくハードドライブが遅過ぎます。ハードドライブの速度を計測するには {{ic|hdparm}} コマンドを使うことができます: {{bc|# hdparm -t /dev/sd''X''}} {{Note|{{Pkg|hdparm}} で出力されるのはハードドライブの純粋な読み込み速度なので、有効なベンチマークとは言えませんが、平均的なコンピュータでは (アイドル状態のときに) 40MB/s より高い数値が出るのが妥当です。}}<br />
* 十分な RAM が利用できる時でも CPU 負荷が一貫して高い場合、不要な[[デーモン]]やプロセスを無効化するなどして CPU 使用量を減らすことを試みてください。{{Pkg|htop}} や {{ic|pstree}} などの[[アプリケーション一覧/ユーティリティ#システム監視|システム監視ツール]]で CPU 負担をモニタすることができます: {{bc|$ htop}}<br />
* ダイレクトレンダリングを使うアプリケーション (つまり、ビデオプレイヤ、ゲーム、[[ウィンドウマネージャ]]などの GPU を使うアプリケーション) が遅い場合、GPU パフォーマンスを向上させることで解決するはずです。まず初めにダイレクトレンダリングが有効になっているかどうか確認しましょう。{{ic|glxinfo}} コマンドを使うことで確認できます ({{Pkg|mesa-utils}} パッケージに含まれています)。次のコマンドを実行すると {{ic|direct rendering: Yes}} と表示される必要があります: {{bc|$ glxinfo {{!}} grep "direct rendering"}}<br />
* [[デスクトップ環境]]を動かしている場合、(不要な) 視覚デスクトップ効果を無効化することで GPU 使用率を削減できる場合があります。現在使用しているものがハードウェアや個人の要件に合わない場合、より軽量な環境を使用するか、[[デスクトップ環境#カスタム環境|カスタムの環境]]を作成しましょう。<br />
* 最適化された[[カーネル]]を使用することでパフォーマンスを向上できます。一般に {{Pkg|linux-zen}} が良い選択肢です。しかし、この記事の特定の部分で説明されているように、デフォルトのカーネルを調節することで良いパフォーマンスを得られます。<br />
<br />
=== ベンチマーク ===<br />
<br />
最適化の効果を判断できないことがたびたびあります。そういった場合は[[ベンチマーク]]ツールで計測することができます。<br />
<br />
== ストレージデバイス ==<br />
<br />
=== 複数のハードウェアパス ===<br />
<br />
内部ハードウェアパスは、ストレージデバイスがマザーボードを介してどのように接続されているかを表します。NIC、PCIe、Firewire、Raid カード、USB など、マザーボードを介する接続方法は複数あります。ストレージデバイスを複数の接続点に分けることで、ボトルネックを回避できます。なぜなら、マザーボードに入る「エントリーパス」は「パイプ」のようなもので、そのパイプを一度に通ることのできる量には制限があるからです。通常、マザーボードには複数の「パイプ」が存在するため、これは回避できます。<br />
<br />
これの具体例としては、マシン前面に2つの USB ポート、背面に4つの USB ポートがあり、4つのディスクを接続したい場合です。通常、3つのディスクを背面に接続し、残り1つを前面に接続するよりも、2つを前面に接続し、別の2つを背面に接続する方が高速です。これは、ほとんどの場合、前面と背面のポートは内部的に別の Root USB Hub に接続されていて、片方ではなく両方を使用することで同時に送信できるデータが増えるからです。<br />
<br />
次のコマンドは、マシンの様々なパスを特性するのに役立ちます。<br />
<br />
{{hc|USB デバイスツリー|$ lsusb -t}}<br />
<br />
{{hc|PCI デバイスツリー|$ lspci -tv}}<br />
<br />
=== パーティショニング ===<br />
<br />
パーティションが[[パーティショニング#パーティションアライメント|適切にアライメントされている]]ことを確認してください。<br />
<br />
==== 複数のドライブ ====<br />
<br />
複数のドライブを持っているのであれば、ソフトウェア [[RAID]] を組んでパフォーマンスを劇的に向上させることができます。<br />
<br />
[[スワップ]]を別のディスク上に作成することでもパフォーマンスを多少向上させることができます。特に、スワップが頻繁に発生する場合です。<br />
<br />
==== HDD でのレイアウト ====<br />
<br />
従来の回転式 HDD を使用している場合、パーティションのレイアウトがシステムのパフォーマンスに影響を与える可能性があります。ドライブの最初のセクター(ディスクの外周の近く)は最後のセクターよりも高速です。また、パーティションを小さくすれば必要なドライブヘッドの移動が少なくなり、ディスク操作をスピードアップできます。従って、システムのために作るパーティションは小さく (15~20GiB、必要に応じて調節) して、できるだけドライブの最初に配置することが推奨されます。他のデータ(画像・動画など)は別のパーティションに置くべきです。通常、システム ({{ic|/}}) から home ディレクトリ ({{ic|/home}}) を分割することでこれを達成できます。<br />
<br />
{{Note|このページのすべてのアドバイスにおいて言えることですが、得られる利益を計測してください: ハードドライブを[https://blog.stuffedcow.net/2019/09/hard-disk-geometry-microbenchmarking/#shortstroke ショートストローク]したり、合計容量の数%しか使わないようにしたりしない限り、一般的な使用においては読み書き操作が依然としてドライブ全体に及ぶため、パーティションを分割してもほんの数%しかアクセス時間は改善されません。それと比べて、SSD にアップグレードするとパフォーマンスが1桁以上向上します。}}<br />
<br />
=== ファイルシステムの選択とチューニング ===<br />
<br />
ファイルシステムごとに強みが異なるのでシステムごとにファイルシステムを選ぶことはとても重要です。[[ファイルシステム]]の記事に人気のあるファイルシステムの簡単な説明がされています。[[:カテゴリ:ファイルシステム]]から関連記事も見ることができます。<br />
<br />
==== マウントオプション ====<br />
<br />
様々な [[fstab#atime オプション|*atime]] オプションが、{{ic|strictatime}} のパフォーマンスのペナルティを軽減することができます。<br />
<br />
他のマウントオプションはファイルシステム固有なので、ファイルシステムの関連記事を参照してください:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#パフォーマンスの向上]]<br />
* [[JFS#最適化]]<br />
* [[XFS#パフォーマンス]]<br />
* [[Btrfs#デフラグメンテーション]]、[[Btrfs#圧縮]]、{{man|5|btrfs}}<br />
* [[ZFS#チューニング]]<br />
* [[NTFS#パフォーマンスの向上]]<br />
<br />
===カーネルパラメータの調整===<br />
<br />
ブロックデバイスのパフォーマンスに影響するキーが複数存在します、詳しくは [[sysctl#仮想メモリ]] を見て下さい。<br />
<br />
=== I/O スケジューラの設定 ===<br />
<br />
==== 背景情報 ====<br />
<br />
入出力 ''(I/O)'' スケジューラはストレージデバイスにブロック I/O の操作を送信するときの順番を決めるカーネルコンポーネントです。I/O スケジューラの目的は読み込みリクエストを最適な方法で扱うことであるため、以下の2つのドライブの特徴を押さえておくことが重要です:<br />
<br />
* HDD は回転ディスクでありヘッドが物理的に必要な場所に移動します。そのため、ランダムアクセスは 3〜12ms と非常に遅くなります (ハイエンドサーバーのドライブなのかノートパソコンのドライブなのか、あるいはディスクコントローラの書き込みバッファを迂回するかなどで速度は変わります)。逆に連続アクセスなら高いスループットを得ることが可能です。連続アクセスならヘッドはほとんど動かなくてよいためです。典型的な HDD は毎秒200回ほどの I/O リクエストを処理することができます ''(IOPS)''。<br />
<br />
* SSD には物理的に移動する部品がありません。ランダムアクセスはシーケンシャルアクセスと同じ速度が出ます (0.1ms 未満)。SSD は複数のリクエストを一度にこなすこともできます。典型的な SSD のスループットは 10,000 IOPS を超えるため、大抵の場合は必要な仕事量を上回ります。<br />
<br />
プロセスを大量に実行してストレージの様々な場所の I/O リクエストを発生させているとき (つまりランダムアクセスをしている状態)、数千の IOPS が生成されますが、普通の HDD では 200 IOPS までしか対応できません。ストレージにアクセスできるまで待機するリクエストの待ち行列が作られることになります。I/O スケジューラはこの待ち行列を最適化します。<br />
<br />
==== スケジューリングアルゴリズム ====<br />
<br />
スループットを改善する方法の一つとして、待機リクエストの順番を論理アドレスで並び替えて出来るだけ一番近いリクエストを通すことで、アクセスをリニア化する方法があります。これが [[w:ja:エレベータアルゴリズム|elevator]] スケジューラと呼ばれる Linux の最初の I/O スケジューラでした。<br />
<br />
エレベータアルゴリズムの問題点はシーケンシャルアクセスをするプロセスが上手く動かなくなることです。そのようなプロセスは、データブロックを読み取って数マイクロ秒で処理してから次のブロックを読み出します。エレベータスケジューラはプロセスが近くのブロックを呼びだそうとしていることを知らないため、他の場所のリクエストに移ってしまいます。[[w:Anticipatory_scheduling|anticipatory]] IO スケジューラはこの問題を解決します。このスケジューラは、他のリクエストを処理する前に、近くで別の読み取り操作が発生することを予測して、数ミリ秒待機します。<br />
<br />
上述のスケジューラはどちらも全体のスループットを改善することを目指していましたが、それによって不幸にも長い間待たされてしまうリクエストも発生していました。例えば、プロセスの多くがストレージ領域の最初の部分をリクエストしていて、不幸なプロセスはストレージの末端付近をリクエストしているような状況を考えて下さい。そのため、開発者は公平なアルゴリズムを作成することを決めて [[w:Deadline_scheduler|deadline]] スケジューラが追加されました。deadline スケジューラはアドレスによってキューの順番を決めますが (エレベーターアルゴリズムと同じ)、一定期間、リクエストがキューの中で待機した場合、リクエストを (経過時間によって順番が付けられる) "expired" キューに移動します。スケジューラは先に expired キューをチェックして、リクエストを処理してからエレベーターキューに移動します。このアルゴリズムは公平性のために全体のスループットを犠牲にしているわけです。<br />
<br />
[[w:CFQ|Completely Fair Queuing (CFQ)]] は別のアプローチで問題に取り組みました。CFQ はプロセスの優先度に基づくキューを使ってタイムスライスと許容するリクエストの数を割り当てます。さらに [[cgroups]] のサポートを追加することで特定のプロセスグループに一定の IO を予約できるようにしました。これは共有・クラウドサーバーで特に役立ちます。ユーザーはリソースが必要なときに料金を払って IOPS を得られるのです。また、同期 I/O で近くの操作を待機するという ''anticipatory'' スケジューラの機能を改良して取り入れています。''anticipatory'' と ''elevator'' スケジューラは Linux カーネルから外され、下記のより高度な代替スケジューラに置き換えられました。<br />
<br />
[https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing (BFQ)] は CFQ のコードをベースにいくつか改善を加えています。各プロセスに固定長のタイムスライスを与えるかわりに、プロセスのセクタ数から計算した "budget" を割り当ててヒューリスティックを用います。BFQ は想定的に複雑なスケジューラであるため、オーバーヘッドが大きく、回転ドライブや低速 SSD に適しています。特に遅い CPU と組み合わせたときに高速なデバイスの足を引っ張ってしまうような場合に有用です。BFQ は個人用のシステムでインタラクティブな作業を行うときに、ストレージデバイスがまるで待機状態のときのように素早く反応することを目標としています。デフォルト設定ではスループットの最大化よりもレイテンシの最小化が優先されているのが特徴です。これにより、ハードドライブにおいて[https://www.phoronix.com/review/linux-50hdd-io/2 アプリケーションの起動を劇的に加速化]させられる場合があります。<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] はネットワークルーティングで用いられている積極的なキュー管理テクニックから生まれた新しいスケジューラです。リクエストを制限するメカニズムとして「トークン」を基に実装されています。 リクエストの割当を受けるにはキューイングトークンを必要とすることで、リクエストのスタベーションを防ぎます。ディスパッチトークンによってデバイスの特定の優先度の操作に制限されます。さらに、ターゲットの読み込みレイテンシを定義して、レイテンシ目標を達成するためにスケジューラ自身がチューニングを行います。アルゴリズムの実装は比較的シンプルなので高速なデバイスでも効率的に機能します。<br />
<br />
==== カーネルの I/O スケジューラ ====<br />
<br />
初期のアルゴリズムには既にメインラインから外されているものもあります。公式 Linux カーネルがサポートしている I/O スケジューラは以下の2つのカテゴリに分けることができます:<br />
<br />
*'''マルチキュースケジューラ'''はカーネルでデフォルトで利用できます。[https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism (blk-mq)] は I/O クエリを複数のキューに割り当てて、複数のスレッドおよび CPU コアにタスクを分散させます。このフレームワークでは以下のスケジューラが使えます:<br />
**''None''、キューイングアルゴリズムは適用されません。<br />
**''mq-deadline'' は deadline スケジューラ (下記を参照) をマルチスレッドに対応させたスケジューラです。<br />
**''Kyber''<br />
**''BFQ''<br />
<br />
*'''シングルキュースケジューラ'''はレガシーなスケジューラです:<br />
**[[w:Noop scheduler|NOOP]] は最も単純なスケジューラです。全ての I/O リクエストをシンプルな FIFO キューに入れてリクエストをまとめます。NOOP アルゴリズムでは、セクタ番号によってリクエストの順番を変えることがありません。したがって、デバイスレベルで順位付けを行っている場合や SSD など順位付けが意味をなさない場合は NOOP を使用します。<br />
**[[w:Deadline scheduler|Deadline]]<br />
**[[w:CFQ|CFQ]]<br />
<br />
:{{Note|1=シングルキュースケジューラは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f382fb0bcef4c37dc049e9f6963e3baf204d815c Linux 5.0 以降カーネルから削除されました]}}<br />
<br />
==== I/O スケジューラの変更 ====<br />
<br />
{{Note|スケジューラーの最適な選択は、デバイスとワークロードの正確な性質の両方によって異なります。 また、MB/秒単位のスループットだけがパフォーマンスの指標ではありません。デッドラインや公平性は全体的なスループットを低下させますが、システムの応答性を向上させる可能性があります。 [[ベンチマーク]] は、各 I/O スケジューラのパフォーマンスを示すのに役立つ場合があります。}}<br />
<br />
特定のデバイスで利用可能なスケジューラとアクティブなスケジューラを表示するには (アクティブなスケジューラは角括弧の中):<br />
<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
}}<br />
<br />
全デバイスで利用可能なスケジューラを表示するには:<br />
<br />
{{hc|$ grep "" /sys/block/'''*'''/queue/scheduler|<br />
/sys/block/pktcdvd0/queue/scheduler:none<br />
/sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none<br />
/sys/block/sr0/queue/scheduler:[mq-deadline] kyber bfq none<br />
}}<br />
<br />
デバイス ''sda'' のアクティブな I/O スケジューラを ''bfq'' に変更するには:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
<br />
I/O スケジューラの変更プロセスは、ディスクが回転式か否かに応じて自動化することができ、起動毎に永続化させることができます。例えば、以下の [[udev]] ルールは、回転ドライブに対しては ''bfq'' を、[[SSD]]/eMMC ドライブに対しては ''bfq'' を、[[NVMe]] に対しては ''none'' を設定します:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|<nowiki><br />
# HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"<br />
<br />
# SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"<br />
<br />
# NVMe SSD<br />
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"<br />
</nowiki>}}<br />
<br />
再起動するか、強制的に[[udev#新しいルールをロードする|新しいルールをロード]]してください。<br />
<br />
==== IO スケジューラの調整 ====<br />
<br />
カーネルの I/O スケジューラには遅延・期限時間や FIFO パラメータなどそれぞれ設定項目が存在します。特定のデバイスとワークロードの組み合わせにあわせてアルゴリズムを調整することが可能です。スループットを高めたり遅延を少なくしたりするときに用います。<br />
設定項目と説明は [https://docs.kernel.org/block/index.html カーネルドキュメント] で確認できます。<br />
<br />
特定のデバイスで設定可能なパラメータを確認するには (以下の例では ''sdb'' は ''deadline'' を使用しています):<br />
<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
レイテンシを犠牲に ''deadline'' のスループットを高めるには以下のコマンドで {{ic|fifo_batch}} を増やします:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== 電源管理設定とライトキャッシュ ===<br />
<br />
従来の回転ディスク (HDD) を使用する場合は、省電力機能を完全に無効にするか下げるかし、書き込みキャッシュが有効になっているかどうかを確認すると良いかもしれません。<br />
<br />
[[Hdparm#電源管理の設定]] と [[Hdparm#ライトキャッシュ]] を参照してください。<br />
<br />
後で、起動時にこれらを適用する [[Hdparm#udev ルールによる永続的な設定|udev ルール]] を作成することができます。<br />
<br />
{{Tip|[[GNOME]] では、"ディスク" アプリケーションからこれらのパラメータのいくつかを設定でき、udev ルールは必要ありません。}}<br />
<br />
{{Note|一部の機能はあなたのハードドライブではサポートされていないかもしれません。その場合、Hdparm が通知します。なので、この特定の機能の設定を無視してください。}}<br />
<br />
=== ディスクの読み書きを減らす ===<br />
<br />
遅いストレージデバイスへの不必要なアクセスを避けることはパフォーマンスを向上にとって良いことであり、デバイスの寿命を伸ばすことにも繋がります。ただし最近のハードウェアでは寿命への影響はわずかです。<br />
<br />
{{Note|書き込み増幅率が平凡な 10x で、書き込み/消去サイクルが標準的な 10000 である、32GB の SSD の場合、'''毎日 10GB のデータ書き込みを行うと'''、'''8年間で寿命が尽きる'''とされます。この数字はもっと容量が大きい SSD を使ったり書き込み増幅が少ない最新のコントローラを使うことで改善されます。また、ディスクの書き込みを制限するのにどの方法が必要なのか考えるときは [https://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead/ この耐久実験] も参照してください。}}<br />
<br />
==== ディスクの書き込みを表示する ====<br />
<br />
{{Pkg|iotop}} パッケージはプログラムをディスクの書き込み数でソートして、どれくらいの頻度でどれだけディスクに書き込んでいるか表示します。詳しくは {{man|8|iotop}} を見てください。<br />
<br />
==== ファイルを tmpfs に再配置する ====<br />
<br />
ブラウザプロファイルなどのファイルを [[tmpfs]] ファイルシステムに再配置してメモリ内に保存することで、アプリケーションのレスポンスを向上させることができます:<br />
<br />
* ブラウザプロファイルを同期させる方法については [[Profile-sync-daemon]] を参照してください。特定のブラウザには注意が必要な場合があります。例えば [[Firefox Ramdisk]] を参照してください。<br />
* 任意の指定されたフォルダを同期させる方法については [[Anything-sync-daemon]] を参照してください。<br />
* tmpfs 内でパッケージをビルドすることでコンパイル時間を減らす方法については [[Makepkg#ビルド時間を短縮する]] を参照してください。<br />
<br />
==== ファイルシステム ====<br />
<br />
対応する[[ファイルシステム]]ページを参照して、パフォーマンス改善に関する指示があるか見てください。例: [[Ext4#パフォーマンスの向上]]、[[XFS#パフォーマンス]]。<br />
<br />
==== スワップ領域 ====<br />
<br />
[[スワップ#パフォーマンス]] を見てください。<br />
<br />
==== ライトバックの間隔とバッファサイズ ====<br />
<br />
詳細は [[Sysctl#仮想メモリ]] を見てください。<br />
<br />
==== コアダンプを無効化する ====<br />
<br />
[[コアダンプ#自動的なコアダンプの無効化]] を見てください。<br />
<br />
=== ionice によるストレージ I/O スケジューリング ===<br />
<br />
バックアップなど多くのタスクにおいては、そのタスクを実行するために、ストレージ I/O の遅延が短かったり、ストレージ I/O の帯域が大きかったりする必要はありません。そのようなタスクはバックグラウンドタスクに分類することができます。一方、デスクトップにおいて高速な I/O は UI の応答性を高める上で必須です。ゆえに、他のタスクがストレージ I/O を必要としている間は、バックグラウンドタスクによって利用できるストレージ帯域幅を減らすことが有益です。これは、プロセスごとに異なる優先度を設定できる Linux I/O スケジューラ CFQ を使用することで実現できます。<br />
<br />
以下のようにバックグラウンドプロセスを実行することで、プロセスの I/O 優先度 "Idle" レベルまで落とすことができます:<br />
<br />
# ionice -c 3 command<br />
<br />
詳細は [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html a short introduction to ionice] や {{man|1|ionice}} を参照してください。<br />
<br />
=== トリム ===<br />
<br />
最適なパフォーマンスを得るには、SSD を定期的にトリムしてランダム読み込みの速度を最適化するべきです。詳細は [[ソリッドステートドライブ#TRIM]] を参照してください。<br />
<br />
== CPU ==<br />
<br />
=== オーバークロック ===<br />
<br />
[[Wikipedia:ja:オーバークロック|オーバークロック]]は、CPU クロック周波数の上限を上げることにより、CPU の計算パフォーマンスを向上させます。オーバークロックできるかどうかは、CPU モデルとマザーボードモデルの組み合わせに依存します。オーバークロックは BIOS を介して行うのが最も一般的です。オーバークロックには欠点とリスクもあります。ここでは推奨も非推奨もしないでおきましょう。<br />
<br />
Intel 製のチップの多くは acpi_cpufreq などや他のほとんどのユーティリティに正しいクロック周波数を伝えません。この結果、[[dmesg]] は極端なメッセージを表示します (これは、{{ic|acpi_cpufreq}} カーネルモジュールをアンロードしてブラックリスト化することで回避可能です)。クロック速度を読むには、{{Pkg|i7z}} パッケージの ''i7z'' を使用してください。オーバークロックされた CPU が正しく動作していることを確認する方法として、[[ストレステスト]]が推奨されます。<br />
<br />
=== 周波数スケーリング ===<br />
<br />
[[CPU 周波数スケーリング]]を見てください。<br />
<br />
=== CPU スケジューラ ===<br />
<br />
メインライン Linux カーネルのデフォルトの CPU スケジューラは [https://lwn.net/Articles/925371/ EEVDF] です。<br />
<br />
* {{App|[[Wikipedia:Brain_Fuck_Scheduler#MuQSS|MuQSS]]|Multiple Queue Skiplist Scheduler。[[Wikipedia:Con_Kolivas|Con Kolivas]] によって開発されている {{ic|-ck}} パッチセットにより利用可能。|[[非公式ユーザーリポジトリ/Repo-ck]]|{{AUR|linux-ck}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/PDS PDS]|デスクトップのレスポンスに焦点を当てている、優先度 (Priority) とデッドライン (Deadline) をベースとした Skiplist 複数キュースケジューラ。|https://cchalpha.blogspot.com/|{{AUR|linux-pds}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/BMQ BMQ]|BMQ "BitMap Queue" スケジューラは、既存の PDS 開発経験を元に作成され、Google の Zircon (Fuchsia OS イニシアチブ内のカーネル) に使用されているスケジューラからインスパイアされました。CachyOS からのパッチセットにより利用可能。|https://cchalpha.blogspot.com/|{{AUR|linux-cachyos-bmq}}}}<br />
* {{App|[https://cchalpha.blogspot.com/2020/05/project-c-announcement.html Project C]|BMQ を Project C にリファクタリングするためのクロスプロジェクト。Project C コードベースに基づいて PSD を再作成します。よって、これは2つのプロジェクトのマージであり、その後 PDS が Project C として更新されます。より最近の開発として推奨されます。|https://cchalpha.blogspot.com/|{{AUR|linux-prjc}}}}<br />
* {{App|[https://github.com/hamadmarri/TT-CPU-Scheduler TT]|Task Type (TT) スケジューラの目標は、動作に基づいてタスクの種類を検出し、その種類に基づいてスケジューリングを制御することです。|https://github.com/hamadmarri/TT-CPU-Scheduler|{{AUR|linux-tt}}}}<br />
* {{App|[https://github.com/firelzrd/bore-scheduler BORE]|BORE スケジューラは、対話型タスクにおいてある程度の公平性を犠牲にして低レイテンシを実現することに焦点を当てています。CFS の上に構築されており、vruntime コード更新だけに調整されています。なので、他の非公式 CPU スケジューラと比較して、全体的な変更は非常に小さいです。|https://github.com/firelzrd/bore-scheduler|{{AUR|linux-cachyos-bore}}}}<br />
<br />
=== リアルタイムカーネル ===<br />
<br />
(TV チューナーカードをフル HD 解像度 (1080p) で実行するなど) 一部の使用用途では、[[リアルタイムカーネル]]を使うと利益を得られる場合があります。<br />
<br />
=== プロセスの優先順位を設定 ===<br />
<br />
{{man|1|nice}} と {{man|1|renice}} も参照してください。<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] は動的に実行可能ファイルの nice レベルを調整するためのデーモンで、{{AUR|ananicy-git}} や {{AUR|ananicy-cpp}} パッケージで利用可能です。nice レベルとは、CPU 資源を配分するときの実行可能ファイルの優先度を表すものです。<br />
<br />
==== cgroups ====<br />
<br />
[[cgroups]] を見てください。<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] は特定のプロセスの CPU 使用率を制限するプログラムです。{{AUR|cpulimit}} をインストールすれば、プロセスの PID で CPU 使用率を 0 から 100 までの値にコンピュータに搭載されている CPU コア数をかけた数字の範囲で制限することができます。例えば、CPU コアが8個であれば利用可能な値は 0 から 800 です。使用例:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
{{Pkg|irqbalance}} はマルチプロセッサシステムでパフォーマンスを向上させるためにプロセッサ間でハードウェア割り込みを分散させます。{{ic|irqbalance.service}} で[[systemd#ユニットを使う|操作]]することが可能です。<br />
<br />
=== CPU の脆弱性の緩和策をオフにする ===<br />
<br />
{{Warning|1=以下の設定を使うときは問題の脆弱性について確認してください。詳しくは [https://phoronix.com/scan.php?page=news_item&px=Linux-Improve-CPU-Spec-Switches こちら] や [https://linuxreviews.org/HOWTO_make_Linux_run_blazing_fast_(again)_on_Intel_CPUs こちら] のページを参照。}}<br />
<br />
CPU の脆弱性の緩和策をオフにすることで、パフォーマンスが向上する場合があります。以下の[[カーネルパラメータ]]ですべての緩和策が無効になります:<br />
<br />
mitigations=off<br />
<br />
このパラメータによって切り替えられるすべてのスイッチについての説明は、[https://docs.kernel.org/admin-guide/kernel-parameters.html kernel.org] で見られます。{{AUR|spectre-meltdown-checker}} や {{man|1|lscpu}} ({{Pkg|util-linux}} に同梱) を使うことで、脆弱性チェックを行うことができます。<br />
<br />
{{Note|1=第10世代およびそれ以降の Intel CPU、または AMD Ryzen シリーズ 1000 およびそれ以降の CPU を使用している場合、緩和策を無効化することにより得られるパフォーマンスの向上は、最大でも 5% にとどまります。一方、それ以前の世代の CPU では、最大 25% まで向上します。[https://www.phoronix.com/scan.php?page=article&item=3-years-specmelt 2021 初頭における総評]、[https://www.phoronix.com/scan.php?page=article&item=spectre-rocket-lake Rocket Lake におけるテスト]、[https://www.phoronix.com/scan.php?page=article&item=alder-lake-mitigations Alder Lake におけるテスト] を参照。}}<br />
<br />
== グラフィック ==<br />
<br />
=== Xorg の設定 ===<br />
<br />
グラフィックパフォーマンスは {{man|5|xorg.conf}} の設定に依存している場合があります。[[NVIDIA]]、[[AMDGPU]]、[[Intel]] の記事を参照してください。不適切な設定は Xorg が動作しなくなる原因になるため、注意しましょう。<br />
<br />
=== Mesa の設定 ===<br />
<br />
Mesa ドライバのパフォーマンスは [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc] で設定できます。GUI の設定ツールもあります:<br />
<br />
* {{App|adriconf (Advanced DRI Configurator)|オプションを設定して標準の drirc ファイルに書き込むことで MESA ドライバを設定する GUI ツール。|https://gitlab.freedesktop.org/mesa/adriconf/|{{Pkg|adriconf}}}}<br />
* {{App|DRIconf|Direct Rendering Infrastructure の設定アプレット。OpenGL ドライバのパフォーマンスや視覚クオリティ設定をドライバ毎、スクリーン毎、プリケーション毎レベルでカスタマイズできます。|https://dri.freedesktop.org/wiki/DriConf/|{{AUR|driconf}}}}<br />
<br />
=== ハードウェアビデオアクセラレーション ===<br />
<br />
[[ハードウェアビデオアクセラレーション]]により、ビデオカードに動画のデコード/エンコードをさせることができます。<br />
<br />
=== オーバークロック ===<br />
<br />
CPU と同様に、(GPU の) オーバークロックは直接的にパフォーマンスを向上できますが、一般には推奨されません。いくつかのパッケージがあります: {{AUR|rovclock}} (ATI カード)、{{Pkg|rocm-smi-lib}} (最近の AMD カード)、{{AUR|nvclock}} (古い NVIDIA カード - Geforce 9 まで)、{{Pkg|nvidia-utils}} (最近の NVIDIA カード)。<br />
<br />
[[AMDGPU#オーバークロック]] や [[NVIDIA/ヒントとテクニック#オーバークロックを有効化する]] を参照してください。<br />
<br />
=== PCI resizable BAR を有効化する ===<br />
<br />
{{Note|<br />
* 一部のシステムでは、PCI resizable BAR を有効化するとパフォーマンスが大幅に劣化する可能性があります。システムのベンチマークを行って、PCI resizable BAR がパフォーマンスを向上させていることを確認してください。<br />
* 効果を発揮させるには、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] を無効化しなければなりません。<br />
}}<br />
<br />
PCI の仕様では、PCI デバイスのメモリを PCI コントローラに公開するために、より大きい[[wikipedia:PCI_configuration_space#Standardized_registers|基底アドレスレジスタ (BAR)]] を使用できます。そうすることで、ビデオカードのパフォーマンスを向上できる可能性があります。ビデオメモリ全体にアクセスすることでパフォーマンスを向上できますし、グラフィックドライバの最適化も可能になります。Resizable BAR、above 4G decoding、そしてドライバ最適化の組み合わせを、AMD は [https://www.amd.com/ja/technologies/smart-access-memory AMD Smart Access Memory] と呼んでおり、初期は AMD Series 500 チップセットマザーボードで利用できましたが、後に UEFI アップデートを通して AMD Series 400 と Intel Series 300 以降に拡張されました。この設定はすべてのマザーボードで利用できるわけではなく、特定のボードではブート問題を引き起こすことが知られています。<br />
<br />
BAR のサイズが 256M の場合、この機能は有効化されていないか、サポートされていません:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=256M}}<br />
<br />
有効化するには、マザーボード設定で "Above 4G Decode" か ">4GB MMIO" という名前の設定を有効化してください。BAR が大きくなっていることを確認するには:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=8192M}}<br />
<br />
== RAM、スワップ、OOM 処理 ==<br />
<br />
=== クロック周波数とタイミング ===<br />
<br />
RAM は BIOS で設定することで、クロック周波数とタイミングを別々にすることができます。メモリのパフォーマンスは両方の値によって変わります。BIOS に用意されている最高速のプリセットを選択することでデフォルト設定よりも性能を上げることができます。マザーボードやメモリのメーカーがサポートしていない周波数まで値を高めると、CPU のオーバークロックと同じようなリスクがあるので注意してください。[[#オーバークロック]]を参照。<br />
<br />
=== RAM オーバーレイ上に root を置く ===<br />
<br />
{{Out of date|liveroot スクリプトはメンテナンスされていないようです。しかし、このアプローチは依然として機能するはずです。}}<br />
<br />
書き込みが遅いメディア (USB や 回転 HDD) を使う場合、(ディスク上の) 読み取り専用の root の上で RAM オーバーレイを作って root を動作させることができます。root に書き込みできる領域が制限されるかわりにパフォーマンスが劇的に改善します。{{AUR|liveroot}} を見て下さい。<br />
<br />
=== Zram または zswap ===<br />
<br />
[[zswap]] や [[zram]] を使うことで、同様の利点を (同様のコストで) 得られます。これら2つは一般に意図が似ていますが、動作が異なります。zswap は、圧縮 RAM キャッシュとして機能し、高コストなユーザ空間の設定を要求しません (そして、許可もしません)。[[zram]] は、RAM 内に圧縮ブロックデバイスを作成するために使用できるカーネルモジュールです。[[zswap]] はスワップデバイスと組み合わさって機能するのに対し、[[zram]] は補助スワップデバイスを必要としません。<br />
<br />
===グラフィックカードの RAM を使う===<br />
<br />
稀なケースとして、RAM 容量が非常に小さいが、ビデオ RAM に余りがある場合、後者をスワップとして使用できます。[[ビデオメモリにスワップ]] を参照してください。<br />
<br />
=== メモリ不足の状況におけるシステムのレスポンスを改善する ===<br />
<br />
従来の GNU/Linux システム (特にグラフィカルワークステーション) では、割り当てられたメモリがオーバーコミットすると、カーネル内の OOM killer がトリガーされるか、十分な量のメモリが開放される (システムが応答しない場合、メモリを大量消費するアプリケーションを閉じることは難しいため、これはすぐには起こり得ないでしょう) まで、システム全体のレスポンスがほぼ使用不能な状態まで低下します。挙動は特定の環境や条件に依存しており、通常のレスポンス状態に戻るまでには数秒から30分以上かかる場合があります。会議でのプレゼンテーションなどのような重要な状況においては、待つのが苦痛になるでしょう。<br />
<br />
[https://lore.kernel.org/lkml/d9802b6a-949b-b327-c4a6-3dbca485ec20@gmx.com/T/ カーネル]と[https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/XUZLHJ5O32OX24LG44R7UZ2TMN6NY47N/ Fedora] のメーリングリストで議論されている通り、メモリ不足の状況におけるカーネルとユーザ空間の挙動は将来的に改善されるかもしれませんが、ユーザは、システムのハードリセットや {{ic|vm.overcommit_*}} [[sysctl]] パラメータの調整よりも実行可能で効果的なオプションを使うことができます:<br />
<br />
* [https://docs.kernel.org/admin-guide/sysrq.html Magic SysRq キー] ({{ic|Alt+SysRq+f}}) で手動でカーネルの OOM killer をトリガーする。<br />
* ユーザ空間の OOM デーモンを使ってこれに自動的 (または対話的) に対処する。<br />
<br />
{{Warning|OOM killer をトリガーして実行中のアプリケーションを kill すると、保存されていない作業が失われる場合があります。アプリケーションが最終的に通常通りメモリを開放してくれることを期待して辛抱強く待つか、あるいは応答がないシステムを可能な限り早く通常に戻したいと望むかは、あなた次第です。}}<br />
<br />
カーネルの OOM killer では終了する (しない) プロセスに優先順位を付けられないので、SysRq よりも OOM デーモンのほうが好ましい場合もあります。いくつかの OOM デーモンをリストアップしました:<br />
<br />
* {{App|systemd-oomd|[[systemd]] によって {{ic|systemd-oomd.service}} として提供されています。cgroups-v2 と pressure stall information (PSI) を使用してプロセスを監視し、カーネル空間で OOM が発生する前にアクションを取ります。|https://github.com/systemd/systemd, {{man|8|systemd-oomd}}|{{Pkg|systemd}}}}<br />
* {{App|earlyoom|C で書かれた、シンプルなユーザ空間の OOM killer 実装です。|https://github.com/rfjakob/earlyoom|{{Pkg|earlyoom}}}}<br />
* {{App|oomd|[https://lwn.net/Articles/759781/ PSI] ベースの OOM killer 実装です。Linux カーネルバージョン 4.20+ を必要とします。設定は JSON で行い、非常に複雑です。Facebook の本番環境において動作確認済み。|https://github.com/facebookincubator/oomd|{{AUR|oomd}}}}<br />
* {{App|nohang|Python で書かれた、洗練された OOM ハンドラ。オプションで PSI サポートあり。earlyoom よりも設定可能です。|https://github.com/hakavlad/nohang|{{AUR|nohang-git}}}}<br />
* {{App|low-memory-monitor|GNOME 開発者の取り組み。ユーザ空間のアプリケーションにメモリ不足の状態を伝えるためのより良いコミュニケーションを提供することを目的としており、さらにカーネルの OOM killer をトリガーするように設定することができます。PSI ベースで、Linux 5.2+ を必要とします。|https://gitlab.freedesktop.org/hadess/low-memory-monitor/|{{AUR|low-memory-monitor-git}}}}<br />
* {{App|uresourced|アクティブなグラフィカルユーザセッションに対して、cgroup ベースのリソース保護を有効化する小さなデーモン。|https://gitlab.freedesktop.org/benzea/uresourced|{{AUR|uresourced}}}}<br />
<br />
== ネットワーク ==<br />
<br />
* カーネルネットワーキング: [[Sysctl#パフォーマンスを向上させる]] を参照<br />
* NIC: [[ネットワーク設定#MTU とキューの長さの設定]] を参照<br />
* DNS: キャッシュ付きの DNS リゾルバの使用を検討してください。[[ドメイン名前解決#DNS サーバ]] を参照<br />
* Samba: [[Samba#スループットを向上させる]] を参照<br />
<br />
== ウォッチドッグ ==<br />
<br />
[[wikipedia:ja:ウォッチドッグタイマー]]より:<br />
<br />
:ウォッチドッグタイマーはコンピュータの動作に支障が生じていないか確認して復旧するために使われる電子的なタイマーである。通常、コンピュータは定期的にウォッチドッグタイマーをリセットする。何らかの理由でウォッチドッグをリセットできなかった場合、タイマーによってタイムアウト信号が生成され、コンピュータを安定状態に移行して通常のシステムオペレーティングを復旧させるなどの対応が行われる。<br />
<br />
システムがミッションクリティカルな役割 (サーバーなど) を担う場合や電源のリセットができない場合 (組み込みデバイスなど)、上記のようなウォッチドッグ機能が必要となります。ユースケースによってはウォッチドッグ機能はシステム運用に不可欠な存在です。一方で、普通のユーザー (デスクトップやノートパソコンユーザー) にとっては不要な機能であり無効化しても問題ありません。<br />
<br />
(ソフトウェアとハードウェア両方の) ウォッチドッグタイマーを無効化するには、ブートパラメータに {{ic|nowatchdog}} を追加してください。<br />
<br />
{{ic|nowatchdog}} ブートパラメータは Intel TCO ハードウェアウォッチドッグに対しては機能しない場合があります。[https://bbs.archlinux.org/viewtopic.php?id=221239] そのような場合、{{ic|1=modprobe.blacklist=iTCO_wdt}} [[カーネルパラメータ]]を使って TCO のカーネルモジュールを無効化することができます。<br />
<br />
AMD Ryzen CPU を使用している場合、[[journal]] で {{ic|sp5100-tco}} も確認してください。これは [[Wikipedia:AMD_700_chipset_series|AMD 700 チップセットシリーズ]]内部のハードウェア watchdog です。これを無効化するには、以下を作成してください:<br />
<br />
{{hc|/etc/modprobe.d/disable-sp5100-watchdog.conf|<br />
blacklist sp5100_tco<br />
}}<br />
<br />
あるいは、{{ic|1=modprobe.blacklist=sp5100_tco}} [[カーネルパラメータ]]を使用してください。<br />
<br />
{{ic|cat /proc/sys/kernel/watchdog}} か {{ic|wdctl}} で新しい設定が機能していることを確認してください。<br />
<br />
ロードされるモジュールが減ることで起動やシャットダウンが高速化されます。さらに、ウォッチドッグを無効にするとパフォーマンスが向上し、[[電源管理#NMI watchdog の無効化|消費電力も抑えられます]]。<br />
<br />
詳しくは [https://bbs.archlinux.org/viewtopic.php?id=163768]、[https://bbs.archlinux.org/viewtopic.php?id=165834]、[https://0pointer.de/blog/projects/watchdog.html]、[https://docs.kernel.org/watchdog/watchdog-parameters.html] を参照してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]<br />
<br />
{{TranslationStatus|Improving performance|2024-03-16|803302}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AE%E5%90%91%E4%B8%8A&diff=36659
パフォーマンスの向上
2024-03-28T00:31:34Z
<p>AshMyzk: /* スケジューリングアルゴリズム */ 訳を修正</p>
<hr />
<div>[[Category:ハードウェア]]<br />
[[Category:システム管理]]<br />
[[en:Improving performance]]<br />
[[es:Improving performance]]<br />
[[fr:Improving performance]]<br />
[[pl:Improving performance]]<br />
[[pt:Improving performance]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|パフォーマンスの向上/ブートプロセス}}<br />
{{Related|Pacman ヒント#パフォーマンス}}<br />
{{Related|OpenSSH#SSH の高速化}}<br />
{{Related|OpenOffice#OpenOffice の高速化}}<br />
{{Related|ノートパソコン}}<br />
{{Related|Preload}}<br />
{{Related articles end}}<br />
<br />
この記事では、知覚または計測できるシステムパフォーマンスの向上を最終目的として、パフォーマンスに関連する基本的なシステム診断、及び、リソース消費量の削減やシステム最適化のための手順に関する情報を提供しています。ゲーミングおよび低レイテンシに特有のその他のアドバイスは [[ゲーム#パフォーマンスを向上させる]] も参照してください。<br />
<br />
== 基本 ==<br />
<br />
=== システムを知る ===<br />
<br />
システムをチューンするには、全体のスピードを下げているボトルネックやサブシステムに狙いを定めるがベストな方法です。システムの仕様を知ることは、それらを特定することに役立ちます。<br />
<br />
* (LibreOffice や Firefox などの) 巨大なアプリケーションを同時に動作させたときにコンピュータが遅くなる場合、RAM の容量が十分であるか確認してください。以下のコマンドを使って、"available" 列の値を確認してください: {{bc|$ free -h}}<br />
* 起動時間が長い場合、または、アプリケーションを初めて起動するとき (だけ) にロードに長い時間が掛かる場合、おそらくハードドライブが遅過ぎます。ハードドライブの速度を計測するには {{ic|hdparm}} コマンドを使うことができます: {{bc|# hdparm -t /dev/sd''X''}} {{Note|{{Pkg|hdparm}} で出力されるのはハードドライブの純粋な読み込み速度なので、有効なベンチマークとは言えませんが、平均的なコンピュータでは (アイドル状態のときに) 40MB/s より高い数値が出るのが妥当です。}}<br />
* 十分な RAM が利用できる時でも CPU 負荷が一貫して高い場合、不要な[[デーモン]]やプロセスを無効化するなどして CPU 使用量を減らすことを試みてください。{{Pkg|htop}} や {{ic|pstree}} などの[[アプリケーション一覧/ユーティリティ#システム監視|システム監視ツール]]で CPU 負担をモニタすることができます: {{bc|$ htop}}<br />
* ダイレクトレンダリングを使うアプリケーション (つまり、ビデオプレイヤ、ゲーム、[[ウィンドウマネージャ]]などの GPU を使うアプリケーション) が遅い場合、GPU パフォーマンスを向上させることで解決するはずです。まず初めにダイレクトレンダリングが有効になっているかどうか確認しましょう。{{ic|glxinfo}} コマンドを使うことで確認できます ({{Pkg|mesa-utils}} パッケージに含まれています)。次のコマンドを実行すると {{ic|direct rendering: Yes}} と表示される必要があります: {{bc|$ glxinfo {{!}} grep "direct rendering"}}<br />
* [[デスクトップ環境]]を動かしている場合、(不要な) 視覚デスクトップ効果を無効化することで GPU 使用率を削減できる場合があります。現在使用しているものがハードウェアや個人の要件に合わない場合、より軽量な環境を使用するか、[[デスクトップ環境#カスタム環境|カスタムの環境]]を作成しましょう。<br />
* 最適化された[[カーネル]]を使用することでパフォーマンスを向上できます。一般に {{Pkg|linux-zen}} が良い選択肢です。しかし、この記事の特定の部分で説明されているように、デフォルトのカーネルを調節することで良いパフォーマンスを得られます。<br />
<br />
=== ベンチマーク ===<br />
<br />
最適化の効果を判断できないことがたびたびあります。そういった場合は[[ベンチマーク]]ツールで計測することができます。<br />
<br />
== ストレージデバイス ==<br />
<br />
=== 複数のハードウェアパス ===<br />
<br />
内部ハードウェアパスは、ストレージデバイスがマザーボードを介してどのように接続されているかを表します。NIC、PCIe、Firewire、Raid カード、USB など、マザーボードを介する接続方法は複数あります。ストレージデバイスを複数の接続点に分けることで、ボトルネックを回避できます。なぜなら、マザーボードに入る「エントリーパス」は「パイプ」のようなもので、そのパイプを一度に通ることのできる量には制限があるからです。通常、マザーボードには複数の「パイプ」が存在するため、これは回避できます。<br />
<br />
これの具体例としては、マシン前面に2つの USB ポート、背面に4つの USB ポートがあり、4つのディスクを接続したい場合です。通常、3つのディスクを背面に接続し、残り1つを前面に接続するよりも、2つを前面に接続し、別の2つを背面に接続する方が高速です。これは、ほとんどの場合、前面と背面のポートは内部的に別の Root USB Hub に接続されていて、片方ではなく両方を使用することで同時に送信できるデータが増えるからです。<br />
<br />
次のコマンドは、マシンの様々なパスを特性するのに役立ちます。<br />
<br />
{{hc|USB デバイスツリー|$ lsusb -t}}<br />
<br />
{{hc|PCI デバイスツリー|$ lspci -tv}}<br />
<br />
=== パーティショニング ===<br />
<br />
パーティションが[[パーティショニング#パーティションアライメント|適切にアライメントされている]]ことを確認してください。<br />
<br />
==== 複数のドライブ ====<br />
<br />
複数のドライブを持っているのであれば、ソフトウェア [[RAID]] を組んでパフォーマンスを劇的に向上させることができます。<br />
<br />
[[スワップ]]を別のディスク上に作成することでもパフォーマンスを多少向上させることができます。特に、スワップが頻繁に発生する場合です。<br />
<br />
==== HDD でのレイアウト ====<br />
<br />
従来の回転式 HDD を使用している場合、パーティションのレイアウトがシステムのパフォーマンスに影響を与える可能性があります。ドライブの最初のセクター(ディスクの外周の近く)は最後のセクターよりも高速です。また、パーティションを小さくすれば必要なドライブヘッドの移動が少なくなり、ディスク操作をスピードアップできます。従って、システムのために作るパーティションは小さく (15~20GiB、必要に応じて調節) して、できるだけドライブの最初に配置することが推奨されます。他のデータ(画像・動画など)は別のパーティションに置くべきです。通常、システム ({{ic|/}}) から home ディレクトリ ({{ic|/home}}) を分割することでこれを達成できます。<br />
<br />
{{Note|このページのすべてのアドバイスにおいて言えることですが、得られる利益を計測してください: ハードドライブを[https://blog.stuffedcow.net/2019/09/hard-disk-geometry-microbenchmarking/#shortstroke ショートストローク]したり、合計容量の数%しか使わないようにしたりしない限り、一般的な使用においては読み書き操作が依然としてドライブ全体に及ぶため、パーティションを分割してもほんの数%しかアクセス時間は改善されません。それと比べて、SSD にアップグレードするとパフォーマンスが1桁以上向上します。}}<br />
<br />
=== ファイルシステムの選択とチューニング ===<br />
<br />
ファイルシステムごとに強みが異なるのでシステムごとにファイルシステムを選ぶことはとても重要です。[[ファイルシステム]]の記事に人気のあるファイルシステムの簡単な説明がされています。[[:カテゴリ:ファイルシステム]]から関連記事も見ることができます。<br />
<br />
==== マウントオプション ====<br />
<br />
様々な [[fstab#atime オプション|*atime]] オプションが、{{ic|strictatime}} のパフォーマンスのペナルティを軽減することができます。<br />
<br />
他のマウントオプションはファイルシステム固有なので、ファイルシステムの関連記事を参照してください:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#パフォーマンスの向上]]<br />
* [[JFS#最適化]]<br />
* [[XFS#パフォーマンス]]<br />
* [[Btrfs#デフラグメンテーション]]、[[Btrfs#圧縮]]、{{man|5|btrfs}}<br />
* [[ZFS#チューニング]]<br />
* [[NTFS#パフォーマンスの向上]]<br />
<br />
===カーネルパラメータの調整===<br />
<br />
ブロックデバイスのパフォーマンスに影響するキーが複数存在します、詳しくは [[sysctl#仮想メモリ]] を見て下さい。<br />
<br />
=== I/O スケジューラの設定 ===<br />
<br />
==== 背景情報 ====<br />
<br />
入出力 ''(I/O)'' スケジューラはストレージデバイスにブロック I/O の操作を送信するときの順番を決めるカーネルコンポーネントです。I/O スケジューラの目的は読み込みリクエストを最適な方法で扱うことであるため、以下の2つのドライブの特徴を押さえておくことが重要です:<br />
<br />
* HDD は回転ディスクでありヘッドが物理的に必要な場所に移動します。そのため、ランダムアクセスは 3〜12ms と非常に遅くなります (ハイエンドサーバーのドライブなのかノートパソコンのドライブなのか、あるいはディスクコントローラの書き込みバッファを迂回するかなどで速度は変わります)。逆に連続アクセスなら高いスループットを得ることが可能です。連続アクセスならヘッドはほとんど動かなくてよいためです。典型的な HDD は毎秒200回ほどの I/O リクエストを処理することができます ''(IOPS)''。<br />
<br />
* SSD には物理的に移動する部品がありません。ランダムアクセスはシーケンシャルアクセスと同じ速度が出ます (0.1ms 未満)。SSD は複数のリクエストを一度にこなすこともできます。典型的な SSD のスループットは 10,000 IOPS を超えるため、大抵の場合は必要な仕事量を上回ります。<br />
<br />
プロセスを大量に実行してストレージの様々な場所の I/O リクエストを発生させているとき (つまりランダムアクセスをしている状態)、数千の IOPS が生成されますが、普通の HDD では 200 IOPS までしか対応できません。ストレージにアクセスできるまで待機するリクエストの待ち行列が作られることになります。I/O スケジューラはこの待ち行列を最適化します。<br />
<br />
==== スケジューリングアルゴリズム ====<br />
<br />
スループットを改善する方法の一つとして、待機リクエストの順番を論理アドレスで並び替えて出来るだけ一番近いリクエストを通すことで、アクセスをリニア化する方法があります。これが [[w:ja:エレベータアルゴリズム|elevator]] スケジューラと呼ばれる Linux の最初の I/O スケジューラでした。<br />
<br />
エレベータアルゴリズムの問題点はシーケンシャルアクセスをするプロセスが上手く動かなくなることです。そのようなプロセスは、データブロックを読み取って数マイクロ秒で処理してから次のブロックを読み出します。エレベータスケジューラはプロセスが近くのブロックを呼びだそうとしていることを知らないため、他の場所のリクエストに移ってしまいます。[[w:Anticipatory_scheduling|anticipatory]] IO スケジューラはこの問題を解決します。このスケジューラは、他のリクエストを処理する前に、近くで別の読み取り操作が発生することを予測して、数ミリ秒待機します。<br />
<br />
上述のスケジューラはどちらも全体のスループットを改善することを目指していましたが、それによって不幸にも長い間待たされてしまうリクエストも発生していました。例えば、プロセスの多くがストレージ領域の最初の部分をリクエストしていて、不幸なプロセスはストレージの末端付近をリクエストしているような状況を考えて下さい。そのため、開発者は公平なアルゴリズムを作成することを決めて [[w:Deadline_scheduler|deadline]] スケジューラが追加されました。deadline スケジューラはアドレスによってキューの順番を決めますが (エレベーターアルゴリズムと同じ)、一定期間、リクエストがキューの中で待機した場合、リクエストを (経過時間によって順番が付けられる) "expired" キューに移動します。スケジューラは先に expired キューをチェックして、リクエストを処理してからエレベーターキューに移動します。このアルゴリズムは公平性のために全体のスループットを犠牲にしているわけです。<br />
<br />
[[w:CFQ|Completely Fair Queuing (CFQ)]] は別のアプローチで問題に取り組みました。CFQ はプロセスの優先度に基づくキューを使ってタイムスライスと許容するリクエストの数を割り当てます。さらに [[cgroups]] のサポートを追加することで特定のプロセスグループに一定の IO を予約できるようにしました。これは共有・クラウドサーバーで特に役立ちます。ユーザーはリソースが必要なときに料金を払って IOPS を得られるのです。また、同期 I/O で近くの操作を待機するという ''anticipatory'' スケジューラの機能を改良して取り入れています。''anticipatory'' と ''elevator'' スケジューラは Linux カーネルから外され、下記のより高度な代替スケジューラに置き換えられました。<br />
<br />
[https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing (BFQ)] は CFQ のコードをベースにいくつか改善を加えています。各プロセスに固定長のタイムスライスを与えるかわりに、プロセスのセクタ数から計算した "budget" を割り当ててヒューリスティックを用います。BFQ は想定的に複雑なスケジューラであるため、オーバーヘッドが大きく、回転ドライブや低速 SSD に適しています。特に遅い CPU と組み合わせたときに高速なデバイスの足を引っ張ってしまうような場合に有用です。BFQ は個人用のシステムでインタラクティブな作業を行うときに、ストレージデバイスがまるで待機状態のときのように素早く反応することを目標としています。デフォルト設定ではスループットの最大化よりもレイテンシの最小化が優先されているのが特徴です。これにより、ハードドライブにおいて[https://www.phoronix.com/review/linux-50hdd-io/2 アプリケーションの起動を劇的に加速化]させられる場合があります。<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] はネットワークルーティングで用いられている積極的なキュー管理テクニックから生まれた新しいスケジューラです。リクエストを制限するメカニズムとして「トークン」を基に実装されています。 リクエストの割当を受けるにはキューイングトークンを必要とすることで、リクエストのスタベーションを防ぎます。ディスパッチトークンによってデバイスの特定の優先度の操作に制限されます。さらに、ターゲットの読み込みレイテンシを定義して、レイテンシ目標を達成するためにスケジューラ自身がチューニングを行います。アルゴリズムの実装は比較的シンプルなので高速なデバイスでも効率的に機能します。<br />
<br />
==== カーネルの I/O スケジューラ ====<br />
<br />
初期のアルゴリズムには既にメインラインから外されているものもあります。公式 Linux カーネルがサポートしている I/O スケジューラは以下の2つのカテゴリに分けることができます:<br />
<br />
*'''マルチキュースケジューラ'''はカーネルでデフォルトで利用できます。[https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism (blk-mq)] は I/O クエリを複数のキューに割り当てて、複数のスレッドおよび CPU コアにタスクを分散させます。このフレームワークでは以下のスケジューラが使えます:<br />
**''None''、キューイングアルゴリズムは適用されません。<br />
**''mq-deadline'' は deadline スケジューラ (下記を参照) をマルチスレッドに対応させたスケジューラです。<br />
**''Kyber''<br />
**''BFQ''<br />
<br />
*'''シングルキュースケジューラ'''はレガシーなスケジューラです:<br />
**[[w:Noop scheduler|NOOP]] は最も単純なスケジューラです。全ての I/O リクエストをシンプルな FIFO キューに入れてリクエストをまとめます。NOOP アルゴリズムでは、セクタ番号によってリクエストの順番を変えることがありません。したがって、デバイスレベルで順位付けを行っている場合や SSD など順位付けが意味をなさない場合は NOOP を使用します。<br />
**[[w:Deadline scheduler|Deadline]]<br />
**[[w:CFQ|CFQ]]<br />
<br />
:{{Note|1=シングルキュースケジューラは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f382fb0bcef4c37dc049e9f6963e3baf204d815c Linux 5.0 以降カーネルから削除されました]}}<br />
<br />
==== I/O スケジューラの変更 ====<br />
<br />
{{Note|スケジューラーの最適な選択は、デバイスとワークロードの正確な性質の両方によって異なります。 また、MB/秒単位のスループットだけがパフォーマンスの指標ではありません。デッドラインや公平性は全体的なスループットを低下させますが、システムの応答性を向上させる可能性があります。 [[ベンチマーク]] は、各 I/O スケジューラのパフォーマンスを示すのに役立つ場合があります。}}<br />
<br />
特定のデバイスで利用可能なスケジューラとアクティブなスケジューラを表示するには (アクティブなスケジューラは角括弧の中):<br />
<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
}}<br />
<br />
全デバイスで利用可能なスケジューラを表示するには:<br />
<br />
{{hc|$ grep "" /sys/block/'''*'''/queue/scheduler|<br />
/sys/block/pktcdvd0/queue/scheduler:none<br />
/sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none<br />
/sys/block/sr0/queue/scheduler:[mq-deadline] kyber bfq none<br />
}}<br />
<br />
デバイス ''sda'' のアクティブな I/O スケジューラを ''bfq'' に変更するには:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
<br />
I/O スケジューラの変更プロセスは、ディスクが回転式か否かに応じて自動化することができ、起動毎に永続化させることができます。例えば、以下の [[udev]] ルールは、回転ドライブに対しては ''bfq'' を、[[SSD]]/eMMC ドライブに対しては ''bfq'' を、[[NVMe]] に対しては ''none'' を設定します:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|<nowiki><br />
# HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"<br />
<br />
# SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"<br />
<br />
# NVMe SSD<br />
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"<br />
</nowiki>}}<br />
<br />
再起動するか、強制的に[[udev#新しいルールをロードする|新しいルールをロード]]してください。<br />
<br />
==== IO スケジューラの調整 ====<br />
<br />
カーネルの I/O スケジューラには遅延・期限時間や FIFO パラメータなどそれぞれ設定項目が存在します。特定のデバイスとワークロードの組み合わせにあわせてアルゴリズムを調整することが可能です。スループットを高めたり遅延を少なくしたりするときに用います。<br />
設定項目と説明は [https://docs.kernel.org/block/index.html カーネルドキュメント] で確認できます。<br />
<br />
特定のデバイスで設定可能なパラメータを確認するには (以下の例では ''sdb'' は ''deadline'' を使用しています):<br />
<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
レイテンシを犠牲に ''deadline'' のスループットを高めるには以下のコマンドで {{ic|fifo_batch}} を増やします:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== 電源管理設定とライトキャッシュ ===<br />
<br />
従来の回転ディスク (HDD) を使用する場合は、省電力機能を完全に無効にするか下げるかし、書き込みキャッシュが有効になっているかどうかを確認すると良いかもしれません。<br />
<br />
[[Hdparm#電源管理の設定]] と [[Hdparm#ライトキャッシュ]] を参照してください。<br />
<br />
後で、起動時にこれらを適用する [[Hdparm#udev ルールによる永続的な設定|udev ルール]] を作成することができます。<br />
<br />
{{Tip|[[GNOME]] では、"ディスク" アプリケーションからこれらのパラメータのいくつかを設定でき、udev ルールは必要ありません。}}<br />
<br />
{{Note|一部の機能はあなたのハードドライブではサポートされていないかもしれません。その場合、Hdparm が通知します。なので、この特定の機能の設定を無視してください。}}<br />
<br />
=== ディスクの読み書きを減らす ===<br />
<br />
遅いストレージデバイスへの不必要なアクセスを避けることはパフォーマンスを向上にとって良いことであり、デバイスの寿命を伸ばすことにも繋がります。ただし最近のハードウェアでは寿命への影響はわずかです。<br />
<br />
{{Note|書き込み増幅率が平凡な 10x で、書き込み/消去サイクルが標準的な 10000 である、32GB の SSD の場合、'''毎日 10GB のデータ書き込みを行うと'''、'''8年間で寿命が尽きる'''とされます。この数字はもっと容量が大きい SSD を使ったり書き込み増幅が少ない最新のコントローラを使うことで改善されます。また、ディスクの書き込みを制限するのにどの方法が必要なのか考えるときは [https://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead/ この耐久実験] も参照してください。}}<br />
<br />
==== ディスクの書き込みを表示する ====<br />
<br />
{{Pkg|iotop}} パッケージはプログラムをディスクの書き込み数でソートして、どれくらいの頻度でどれだけディスクに書き込んでいるか表示します。詳しくは {{man|8|iotop}} を見てください。<br />
<br />
==== ファイルを tmpfs に再配置する ====<br />
<br />
ブラウザプロファイルなどのファイルを [[tmpfs]] ファイルシステムに再配置してメモリ内に保存することで、アプリケーションのレスポンスを向上させることができます:<br />
<br />
* ブラウザプロファイルを同期させる方法については [[Profile-sync-daemon]] を参照してください。特定のブラウザには注意が必要な場合があります。例えば [[Firefox Ramdisk]] を参照してください。<br />
* 任意の指定されたフォルダを同期させる方法については [[Anything-sync-daemon]] を参照してください。<br />
* tmpfs 内でパッケージをビルドすることでコンパイル時間を減らす方法については [[Makepkg#ビルド時間を短縮する]] を参照してください。<br />
<br />
==== ファイルシステム ====<br />
<br />
対応する[[ファイルシステム]]ページを参照して、パフォーマンス改善に関する指示があるか見てください。例: [[Ext4#パフォーマンスの向上]]、[[XFS#パフォーマンス]]。<br />
<br />
==== スワップ領域 ====<br />
<br />
[[スワップ#パフォーマンス]] を見てください。<br />
<br />
==== ライトバックの間隔とバッファサイズ ====<br />
<br />
詳細は [[Sysctl#仮想メモリ]] を見てください。<br />
<br />
==== コアダンプを無効化する ====<br />
<br />
[[コアダンプ#自動的なコアダンプの無効化]] を見てください。<br />
<br />
=== ionice によるストレージ I/O スケジューリング ===<br />
<br />
バックアップなど多くのタスクにおいては、そのタスクを実行するために、ストレージ I/O の遅延が短かったり、ストレージ I/O の帯域が大きかったりする必要はありません。そのようなタスクはバックグラウンドタスクに分類することができます。一方、デスクトップにおいて高速な I/O は UI の応答性を高める上で必須です。ゆえに、他のタスクがストレージ I/O を必要としている間は、バックグラウンドタスクによって利用できるストレージ帯域幅を減らすことが有益です。これは、プロセスごとに異なる優先度を設定できる Linux I/O スケジューラ CFQ を使用することで実現できます。<br />
<br />
以下のようにバックグラウンドプロセスを実行することで、プロセスの I/O 優先度 "Idle" レベルまで落とすことができます:<br />
<br />
# ionice -c 3 command<br />
<br />
詳細は [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html a short introduction to ionice] や {{man|1|ionice}} を参照してください。<br />
<br />
=== トリム ===<br />
<br />
最適なパフォーマンスを得るには、SSD を定期的にトリムしてランダム読み込みの速度を最適化するべきです。詳細は [[ソリッドステートドライブ#TRIM]] を参照してください。<br />
<br />
== CPU ==<br />
<br />
=== オーバークロック ===<br />
<br />
[[Wikipedia:ja:オーバークロック|オーバークロック]]は、CPU クロック周波数の上限を上げることにより、CPU の計算パフォーマンスを向上させます。オーバークロックできるかどうかは、CPU モデルとマザーボードモデルの組み合わせに依存します。オーバークロックは BIOS を介して行うのが最も一般的です。オーバークロックには欠点とリスクもあります。ここでは推奨も非推奨もしないでおきましょう。<br />
<br />
Intel 製のチップの多くは acpi_cpufreq などや他のほとんどのユーティリティに正しいクロック周波数を伝えません。この結果、[[dmesg]] は極端なメッセージを表示します (これは、{{ic|acpi_cpufreq}} カーネルモジュールをアンロードしてブラックリスト化することで回避可能です)。クロック速度を読むには、{{Pkg|i7z}} パッケージの ''i7z'' を使用してください。オーバークロックされた CPU が正しく動作していることを確認する方法として、[[ストレステスト]]が推奨されます。<br />
<br />
=== 周波数スケーリング ===<br />
<br />
[[CPU 周波数スケーリング]]を見てください。<br />
<br />
=== CPU スケジューラ ===<br />
<br />
メインライン Linux カーネルのデフォルトの CPU スケジューラは [https://lwn.net/Articles/925371/ EEVDF] です。<br />
<br />
* {{App|[[Wikipedia:Brain_Fuck_Scheduler#MuQSS|MuQSS]]|Multiple Queue Skiplist Scheduler。[[Wikipedia:Con_Kolivas|Con Kolivas]] によって開発されている {{ic|-ck}} パッチセットにより利用可能。|[[非公式ユーザーリポジトリ/Repo-ck]]|{{AUR|linux-ck}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/PDS PDS]|デスクトップのレスポンスに焦点を当てている、優先度 (Priority) とデッドライン (Deadline) をベースとした Skiplist 複数キュースケジューラ。|https://cchalpha.blogspot.com/|{{AUR|linux-pds}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/BMQ BMQ]|BMQ "BitMap Queue" スケジューラは、既存の PDS 開発経験を元に作成され、Google の Zircon (Fuchsia OS イニシアチブ内のカーネル) に使用されているスケジューラからインスパイアされました。CachyOS からのパッチセットにより利用可能。|https://cchalpha.blogspot.com/|{{AUR|linux-cachyos-bmq}}}}<br />
* {{App|[https://cchalpha.blogspot.com/2020/05/project-c-announcement.html Project C]|BMQ を Project C にリファクタリングするためのクロスプロジェクト。Project C コードベースに基づいて PSD を再作成します。よって、これは2つのプロジェクトのマージであり、その後 PDS が Project C として更新されます。より最近の開発として推奨されます。|https://cchalpha.blogspot.com/|{{AUR|linux-prjc}}}}<br />
* {{App|[https://github.com/hamadmarri/TT-CPU-Scheduler TT]|Task Type (TT) スケジューラの目標は、動作に基づいてタスクの種類を検出し、その種類に基づいてスケジューリングを制御することです。|https://github.com/hamadmarri/TT-CPU-Scheduler|{{AUR|linux-tt}}}}<br />
* {{App|[https://github.com/firelzrd/bore-scheduler BORE]|BORE スケジューラは、対話型タスクにおいてある程度の公平性を犠牲にして低レイテンシを実現することに焦点を当てています。CFS の上に構築されており、vruntime コード更新だけに調整されています。なので、他の非公式 CPU スケジューラと比較して、全体的な変更は非常に小さいです。|https://github.com/firelzrd/bore-scheduler|{{AUR|linux-cachyos-bore}}}}<br />
<br />
=== リアルタイムカーネル ===<br />
<br />
(TV チューナーカードをフル HD 解像度 (1080p) で実行するなど) 一部の使用用途では、[[リアルタイムカーネル]]を使うと利益を得られる場合があります。<br />
<br />
=== プロセスの優先順位を設定 ===<br />
<br />
{{man|1|nice}} と {{man|1|renice}} も参照してください。<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] は動的に実行可能ファイルの nice レベルを調整するためのデーモンで、{{AUR|ananicy-git}} や {{AUR|ananicy-cpp}} パッケージで利用可能です。nice レベルとは、CPU 資源を配分するときの実行可能ファイルの優先度を表すものです。<br />
<br />
==== cgroups ====<br />
<br />
[[cgroups]] を見てください。<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] は特定のプロセスの CPU 使用率を制限するプログラムです。{{AUR|cpulimit}} をインストールすれば、プロセスの PID で CPU 使用率を 0 から 100 までの値にコンピュータに搭載されている CPU コア数をかけた数字の範囲で制限することができます。例えば、CPU コアが8個であれば利用可能な値は 0 から 800 です。使用例:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
{{Pkg|irqbalance}} はマルチプロセッサシステムでパフォーマンスを向上させるためにプロセッサ間でハードウェア割り込みを分散させます。{{ic|irqbalance.service}} で[[systemd#ユニットを使う|操作]]することが可能です。<br />
<br />
=== CPU の脆弱性の緩和策をオフにする ===<br />
<br />
{{Warning|1=以下の設定を使うときは問題の脆弱性について確認してください。詳しくは [https://phoronix.com/scan.php?page=news_item&px=Linux-Improve-CPU-Spec-Switches こちら] や [https://linuxreviews.org/HOWTO_make_Linux_run_blazing_fast_(again)_on_Intel_CPUs こちら] のページを参照。}}<br />
<br />
CPU の脆弱性の緩和策をオフにすることで、パフォーマンスが向上する場合があります。以下の[[カーネルパラメータ]]ですべての緩和策が無効になります:<br />
<br />
mitigations=off<br />
<br />
このパラメータによって切り替えられるすべてのスイッチについての説明は、[https://docs.kernel.org/admin-guide/kernel-parameters.html kernel.org] で見られます。{{AUR|spectre-meltdown-checker}} や {{man|1|lscpu}} ({{Pkg|util-linux}} に同梱) を使うことで、脆弱性チェックを行うことができます。<br />
<br />
{{Note|1=第10世代およびそれ以降の Intel CPU、または AMD Ryzen シリーズ 1000 およびそれ以降の CPU を使用している場合、緩和策を無効化することにより得られるパフォーマンスの向上は、最大でも 5% にとどまります。一方、それ以前の世代の CPU では、最大 25% まで向上します。[https://www.phoronix.com/scan.php?page=article&item=3-years-specmelt 2021 初頭における総評]、[https://www.phoronix.com/scan.php?page=article&item=spectre-rocket-lake Rocket Lake におけるテスト]、[https://www.phoronix.com/scan.php?page=article&item=alder-lake-mitigations Alder Lake におけるテスト] を参照。}}<br />
<br />
== グラフィック ==<br />
<br />
=== Xorg の設定 ===<br />
<br />
グラフィックパフォーマンスは {{man|5|xorg.conf}} の設定に依存している場合があります。[[NVIDIA]]、[[AMDGPU]]、[[Intel]] の記事を参照してください。不適切な設定は Xorg が動作しなくなる原因になるため、注意しましょう。<br />
<br />
=== Mesa の設定 ===<br />
<br />
Mesa ドライバのパフォーマンスは [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc] で設定できます。GUI の設定ツールもあります:<br />
<br />
* {{App|adriconf (Advanced DRI Configurator)|オプションを設定して標準の drirc ファイルに書き込むことで MESA ドライバを設定する GUI ツール。|https://gitlab.freedesktop.org/mesa/adriconf/|{{Pkg|adriconf}}}}<br />
* {{App|DRIconf|Direct Rendering Infrastructure の設定アプレット。OpenGL ドライバのパフォーマンスや視覚クオリティ設定をドライバ毎、スクリーン毎、プリケーション毎レベルでカスタマイズできます。|https://dri.freedesktop.org/wiki/DriConf/|{{AUR|driconf}}}}<br />
<br />
=== ハードウェアビデオアクセラレーション ===<br />
<br />
[[ハードウェアビデオアクセラレーション]]により、ビデオカードに動画のデコード/エンコードをさせることができます。<br />
<br />
=== オーバークロック ===<br />
<br />
CPU と同様に、(GPU の) オーバークロックは直接的にパフォーマンスを向上できますが、一般には推奨されません。いくつかのパッケージがあります: {{AUR|rovclock}} (ATI カード)、{{Pkg|rocm-smi-lib}} (最近の AMD カード)、{{AUR|nvclock}} (古い NVIDIA カード - Geforce 9 まで)、{{Pkg|nvidia-utils}} (最近の NVIDIA カード)。<br />
<br />
[[AMDGPU#オーバークロック]] や [[NVIDIA/ヒントとテクニック#オーバークロックを有効化する]] を参照してください。<br />
<br />
=== PCI resizable BAR を有効化する ===<br />
<br />
{{Note|<br />
* 一部のシステムでは、PCI resizable BAR を有効化するとパフォーマンスが大幅に劣化する可能性があります。システムのベンチマークを行って、PCI resizable BAR がパフォーマンスを向上させていることを確認してください。<br />
* 効果を発揮させるには、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] を無効化しなければなりません。<br />
}}<br />
<br />
PCI の仕様では、PCI デバイスのメモリを PCI コントローラに公開するために、より大きい[[wikipedia:PCI_configuration_space#Standardized_registers|基底アドレスレジスタ (BAR)]] を使用できます。そうすることで、ビデオカードのパフォーマンスを向上できる可能性があります。ビデオメモリ全体にアクセスすることでパフォーマンスを向上できますし、グラフィックドライバの最適化も可能になります。Resizable BAR、above 4G decoding、そしてドライバ最適化の組み合わせを、AMD は [https://www.amd.com/ja/technologies/smart-access-memory AMD Smart Access Memory] と呼んでおり、初期は AMD Series 500 チップセットマザーボードで利用できましたが、後に UEFI アップデートを通して AMD Series 400 と Intel Series 300 以降に拡張されました。この設定はすべてのマザーボードで利用できるわけではなく、特定のボードではブート問題を引き起こすことが知られています。<br />
<br />
BAR のサイズが 256M の場合、この機能は有効化されていないか、サポートされていません:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=256M}}<br />
<br />
有効化するには、マザーボード設定で "Above 4G Decode" か ">4GB MMIO" という名前の設定を有効化してください。BAR が大きくなっていることを確認するには:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=8192M}}<br />
<br />
== RAM、スワップ、OOM 処理 ==<br />
<br />
=== クロック周波数とタイミング ===<br />
<br />
RAM は BIOS で設定することで、クロック周波数とタイミングを別々にすることができます。メモリのパフォーマンスは両方の値によって変わります。BIOS に用意されている最高速のプリセットを選択することでデフォルト設定よりも性能を上げることができます。マザーボードやメモリのメーカーがサポートしていない周波数まで値を高めると、CPU のオーバークロックと同じようなリスクがあるので注意してください。[[#オーバークロック]]を参照。<br />
<br />
=== RAM オーバーレイ上に root を置く ===<br />
<br />
{{Out of date|liveroot スクリプトはメンテナンスされていないようです。しかし、このアプローチは依然として機能するはずです。}}<br />
<br />
書き込みが遅いメディア (USB や 回転 HDD) を使う場合、(ディスク上の) 読み取り専用の root の上で RAM オーバーレイを作って root を動作させることができます。root に書き込みできる領域が制限されるかわりにパフォーマンスが劇的に改善します。{{AUR|liveroot}} を見て下さい。<br />
<br />
=== Zram または zswap ===<br />
<br />
[[zswap]] や [[zram]] を使うことで、同様の利点を (同様のコストで) 得られます。これら2つは一般に意図が似ていますが、操作が異なります。zswap は、圧縮 RAM キャッシュとして機能し、高コストなユーザ空間の設定を要求しません (そして、許可もしません)。[[zram]] は、RAM 内に圧縮ブロックデバイスを作成するために使用できるカーネルモジュールです。[[zswap]] はスワップデバイスと組み合わさって機能するのに対し、[[zram]] は補助スワップデバイスを必要としません。<br />
<br />
===グラフィックカードの RAM を使う===<br />
<br />
稀なケースとして、RAM 容量が非常に小さいが、ビデオ RAM に余りがある場合、後者をスワップとして使用できます。[[ビデオメモリにスワップ]] を参照してください。<br />
<br />
=== メモリ不足の状況におけるシステムのレスポンスを改善する ===<br />
<br />
従来の GNU/Linux システム (特にグラフィカルワークステーション) では、割り当てられたメモリがオーバーコミットすると、カーネル内の OOM killer がトリガーされるか、十分な量のメモリが開放される (システムが応答しない場合、メモリを大量消費するアプリケーションを閉じることは難しいため、これはすぐには起こり得ないでしょう) まで、システム全体のレスポンスがほぼ使用不能な状態まで低下します。挙動は特定の環境や条件に依存しており、通常のレスポンス状態に戻るまでには数秒から30分以上かかる場合があります。会議でのプレゼンテーションなどのような重要な状況においては、待つのが苦痛になるでしょう。<br />
<br />
[https://lore.kernel.org/lkml/d9802b6a-949b-b327-c4a6-3dbca485ec20@gmx.com/T/ カーネル]と[https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/XUZLHJ5O32OX24LG44R7UZ2TMN6NY47N/ Fedora] のメーリングリストで議論されている通り、メモリ不足の状況におけるカーネルとユーザ空間の挙動は将来的に改善されるかもしれませんが、ユーザは、システムのハードリセットや {{ic|vm.overcommit_*}} [[sysctl]] パラメータの調整よりも実行可能で効果的なオプションを使うことができます:<br />
<br />
* [https://docs.kernel.org/admin-guide/sysrq.html Magic SysRq キー] ({{ic|Alt+SysRq+f}}) で手動でカーネルの OOM killer をトリガーする。<br />
* ユーザ空間の OOM デーモンを使ってこれに自動的 (または対話的) に対処する。<br />
<br />
{{Warning|OOM killer をトリガーして実行中のアプリケーションを kill すると、保存されていない作業が失われる場合があります。アプリケーションが最終的に通常通りメモリを開放してくれることを期待して辛抱強く待つか、あるいは応答がないシステムを可能な限り早く通常に戻したいと望むかは、あなた次第です。}}<br />
<br />
カーネルの OOM killer では終了する (しない) プロセスに優先順位を付けられないので、SysRq よりも OOM デーモンのほうが好ましい場合もあります。いくつかの OOM デーモンをリストアップしました:<br />
<br />
* {{App|systemd-oomd|[[systemd]] によって {{ic|systemd-oomd.service}} として提供されています。cgroups-v2 と pressure stall information (PSI) を使用してプロセスを監視し、カーネル空間で OOM が発生する前にアクションを取ります。|https://github.com/systemd/systemd, {{man|8|systemd-oomd}}|{{Pkg|systemd}}}}<br />
* {{App|earlyoom|C で書かれた、シンプルなユーザ空間の OOM killer 実装です。|https://github.com/rfjakob/earlyoom|{{Pkg|earlyoom}}}}<br />
* {{App|oomd|[https://lwn.net/Articles/759781/ PSI] ベースの OOM killer 実装です。Linux カーネルバージョン 4.20+ を必要とします。設定は JSON で行い、非常に複雑です。Facebook の本番環境において動作確認済み。|https://github.com/facebookincubator/oomd|{{AUR|oomd}}}}<br />
* {{App|nohang|Python で書かれた、洗練された OOM ハンドラ。オプションで PSI サポートあり。earlyoom よりも設定可能です。|https://github.com/hakavlad/nohang|{{AUR|nohang-git}}}}<br />
* {{App|low-memory-monitor|GNOME 開発者の取り組み。ユーザ空間のアプリケーションにメモリ不足の状態を伝えるためのより良いコミュニケーションを提供することを目的としており、さらにカーネルの OOM killer をトリガーするように設定することができます。PSI ベースで、Linux 5.2+ を必要とします。|https://gitlab.freedesktop.org/hadess/low-memory-monitor/|{{AUR|low-memory-monitor-git}}}}<br />
* {{App|uresourced|アクティブなグラフィカルユーザセッションに対して、cgroup ベースのリソース保護を有効化する小さなデーモン。|https://gitlab.freedesktop.org/benzea/uresourced|{{AUR|uresourced}}}}<br />
<br />
== ネットワーク ==<br />
<br />
* カーネルネットワーキング: [[Sysctl#パフォーマンスを向上させる]] を参照<br />
* NIC: [[ネットワーク設定#MTU とキューの長さの設定]] を参照<br />
* DNS: キャッシュ付きの DNS リゾルバの使用を検討してください。[[ドメイン名前解決#DNS サーバ]] を参照<br />
* Samba: [[Samba#スループットを向上させる]] を参照<br />
<br />
== ウォッチドッグ ==<br />
<br />
[[wikipedia:ja:ウォッチドッグタイマー]]より:<br />
<br />
:ウォッチドッグタイマーはコンピュータの動作に支障が生じていないか確認して復旧するために使われる電子的なタイマーである。通常、コンピュータは定期的にウォッチドッグタイマーをリセットする。何らかの理由でウォッチドッグをリセットできなかった場合、タイマーによってタイムアウト信号が生成され、コンピュータを安定状態に移行して通常のシステムオペレーティングを復旧させるなどの対応が行われる。<br />
<br />
システムがミッションクリティカルな役割 (サーバーなど) を担う場合や電源のリセットができない場合 (組み込みデバイスなど)、上記のようなウォッチドッグ機能が必要となります。ユースケースによってはウォッチドッグ機能はシステム運用に不可欠な存在です。一方で、普通のユーザー (デスクトップやノートパソコンユーザー) にとっては不要な機能であり無効化しても問題ありません。<br />
<br />
(ソフトウェアとハードウェア両方の) ウォッチドッグタイマーを無効化するには、ブートパラメータに {{ic|nowatchdog}} を追加してください。<br />
<br />
{{ic|nowatchdog}} ブートパラメータは Intel TCO ハードウェアウォッチドッグに対しては機能しない場合があります。[https://bbs.archlinux.org/viewtopic.php?id=221239] そのような場合、{{ic|1=modprobe.blacklist=iTCO_wdt}} [[カーネルパラメータ]]を使って TCO のカーネルモジュールを無効化することができます。<br />
<br />
AMD Ryzen CPU を使用している場合、[[journal]] で {{ic|sp5100-tco}} も確認してください。これは [[Wikipedia:AMD_700_chipset_series|AMD 700 チップセットシリーズ]]内部のハードウェア watchdog です。これを無効化するには、以下を作成してください:<br />
<br />
{{hc|/etc/modprobe.d/disable-sp5100-watchdog.conf|<br />
blacklist sp5100_tco<br />
}}<br />
<br />
あるいは、{{ic|1=modprobe.blacklist=sp5100_tco}} [[カーネルパラメータ]]を使用してください。<br />
<br />
{{ic|cat /proc/sys/kernel/watchdog}} か {{ic|wdctl}} で新しい設定が機能していることを確認してください。<br />
<br />
ロードされるモジュールが減ることで起動やシャットダウンが高速化されます。さらに、ウォッチドッグを無効にするとパフォーマンスが向上し、[[電源管理#NMI watchdog の無効化|消費電力も抑えられます]]。<br />
<br />
詳しくは [https://bbs.archlinux.org/viewtopic.php?id=163768]、[https://bbs.archlinux.org/viewtopic.php?id=165834]、[https://0pointer.de/blog/projects/watchdog.html]、[https://docs.kernel.org/watchdog/watchdog-parameters.html] を参照してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]<br />
<br />
{{TranslationStatus|Improving performance|2024-03-16|803302}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=NetworkManager&diff=36658
NetworkManager
2024-03-27T23:01:45Z
<p>AshMyzk: /* Wi-Fi パスワードの暗号化 */ 不要な丸</p>
<hr />
<div>[[Category:ネットワークマネージャ]]<br />
[[Category:Red Hat]]<br />
[[Category:DHCP]]<br />
[[de:Networkmanager]]<br />
[[en:NetworkManager]]<br />
[[fr:NetworkManager]]<br />
[[pt:NetworkManager]]<br />
[[zh-hans:NetworkManager]]<br />
{{Related articles start}}<br />
{{Related|ネットワーク設定}}<br />
{{Related|ワイヤレスネットワーク設定}}<br />
{{Related articles end}}<br />
[https://networkmanager.dev/ NetworkManager] は、システムがネットワークに自動的に接続できるようにするためにネットワークの検出と設定の機能を提供するプログラムです。NetworkManager の機能は無線ネットワークと有線ネットワークの両方で有用です。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先するようになっており、最も信頼性のあるネットワークに切り替える機能もあります。NetworkManager 対応のアプリケーションはオンラインモードとオフラインモードの切り替えが可能です。また、NetworkManager は無線接続よりも有線接続を優先するようになっており、モデム接続と特定の種類の VPN に対応しています。NetworkManager は元々 Red Hat によって開発されていましたが、現在では [[GNOME]] プロジェクトによってホストされています。<br />
<br />
{{Warning|デフォルトでは、機密情報 (Wi-Fi のパスワードなど) は root ユーザからファイルシステムでアクセス可能であり、さらに GUI (''nm-applet'' など) を介して設定にアクセスできるユーザからもアクセス可能です。[[#Wi-Fi パスワードの暗号化]] を参照してください。}}<br />
<br />
== インストール ==<br />
<br />
NetworkManager は {{Pkg|networkmanager}} パッケージで[[インストール]]できます。このパッケージには、デーモン、コマンドラインインターフェイス ({{ic|nmcli}})、そして curses ベースのインターフェイス ({{ic|nmtui}}) が含まれています。<br />
<br />
=== NetworkManager を有効化する ===<br />
<br />
インストールしたら、{{ic|NetworkManager.service}} を[[起動/有効化]]する必要があります。NetworkManager デーモンが起動すると、既に構成されている利用可能な "システム接続" に自動的に接続します。"ユーザ接続" や未構成の接続を設定したり接続したりするには、''nmcli'' やアプレットが必要です。<br />
<br />
{{Note|<br />
* ネットワークを設定しようとするサービスが他に動いていないことを確認しなければなりません。事実、ネットワーキングサービスが複数動いていると、互いに干渉してしまいます。現在動作中のサービスの完全なリストは {{ic|1=systemctl --type=service}} で見られます。衝突の恐れのあるサービスは[[停止]]してください。NetworkManager サービスを有効化する方法は [[#設定]] を見てください。<br />
* [[systemd-resolved]] が[[起動]]されていない場合、エラーメッセージがログに溢れ始めます。詳細は [[#Unit dbus-org.freedesktop.resolve1.service not found]] を見てください。<br />
}}<br />
<br />
=== 追加のインターフェイス ===<br />
<br />
* {{Pkg|nm-connection-editor}}: グラフィカルユーザインターフェイス。<br />
* {{Pkg|network-manager-applet}}: システムトレイアプレット ({{ic|nm-applet}})。<br />
<br />
=== モバイルブロードバンドサポート ===<br />
<br />
NetworkManager はモバイルブロードバンド接続のサポートに [[ModemManager]] を使用します。<br />
<br />
{{Pkg|modemmanager}} と {{Pkg|usb_modeswitch}} を[[インストール]]してください。その後、{{ic|ModemManager.service}} を[[有効化]]し、[[起動]]してください。<br />
<br />
ModemManager を認識させるために {{ic|NetworkManager.service}} を[[再起動]]する必要がある場合があります。サービスを再起動し、モデムを挿し直せば、認識されるはずです。<br />
<br />
フロントエンド (例えば {{Pkg|nm-connection-editor}}) から接続を追加し、接続タイプにモバイルブロードバンドを選択してください。ISP と料金プランを選んだら、[[Wikipedia:ja:APN|APN]] とその他の設定が {{Pkg|mobile-broadband-provider-info}} にある情報で自動的に書き込まれるはずです。<br />
<br />
=== PPPoE / DSL サポート ===<br />
<br />
PPPoE / DSL サポートに関しては {{Pkg|rp-pppoe}} を[[インストール]]してください。PPPoE 接続を追加するには、{{ic|1=nm-connection-editor}} を使って新しい DSL/PPPoE 接続を追加してください。<br />
<br />
=== VPN サポート ===<br />
<br />
NetworkManager 1.16 から [[WireGuard]] のネイティブなサポートが追加されました。必要なのは {{ic|wireguard}} カーネルモジュールだけです。詳細は [https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/ NetworkManager のブログ記事の WireGuard] を見てください。<br />
<br />
その他の VPN タイプに対するサポートはプラグインなシステムをベースとしています。以下のパッケージで提供されています:<br />
<br />
* {{Pkg|networkmanager-openconnect}}: [[OpenConnect]] 用<br />
* [[networkmanager-openvpn]]: [[OpenVPN]] 用<br />
* {{Pkg|networkmanager-pptp}}: [[PPTP クライアント]]用<br />
* {{Pkg|networkmanager-strongswan}}: [[strongSwan]] 用<br />
* {{Pkg|networkmanager-vpnc}}<br />
* {{AUR|networkmanager-fortisslvpn-git}}<br />
* {{AUR|networkmanager-iodine-git}}<br />
* {{AUR|networkmanager-libreswan}}<br />
* {{Pkg|networkmanager-l2tp}}<br />
* {{AUR|networkmanager-ssh-git}}<br />
* {{Pkg|network-manager-sstp}}<br />
<br />
{{Warning|1=VPN サポートに関連する[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues?search=VPN&state=opened バグ]が大量に存在しています。デーモンプロセスのオプションが GUI から適切に設定されていることを確認し、パッケージのリリースの度にダブルチェックしてください。}}<br />
<br />
{{Note|1=<nowiki/><br />
* VPN 使用時に DNS 解決を完全に機能させるには、[[#DNS キャッシングと条件付きフォワーディング|条件付きフォワーディング]]をセットアップする必要があります。<br />
* これらのプラグインは、ドキュメント化されたコマンドラインインターフェイスが存在しなかったり、アプレットが実行されていないと全く動作しなかったりする場合があります。通常のデスクトップ環境を使用している場合には問題になりません。通常とは異なるものを使用している場合は、接続を設定したりアクティブ化したりする際に必要なダイアログが表示されるようにするために [[#nm-applet]] を実行するべきです。[https://bbs.archlinux.org/viewtopic.php?id=246698]<br />
}}<br />
<br />
== 使い方 ==<br />
<br />
NetworkManager には {{man|1|nmcli}} と {{man|1|nmtui}} が付属しています。<br />
<br />
=== nmcli 例 ===<br />
<br />
近くの Wi-Fi ネットワークを一覧表示します:<br />
<br />
$ nmcli device wifi list<br />
<br />
Wi-Fi ネットワークに接続します:<br />
<br />
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード''<br />
<br />
非表示の Wi-Fi ネットワークに接続します:<br />
<br />
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード'' hidden yes<br />
<br />
{{ic|wlan1}} インターフェイスで Wi-Fi に接続します:<br />
<br />
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード'' ifname wlan1 ''プロファイル名''<br />
<br />
インターフェイスを切断します:<br />
<br />
$ nmcli device disconnect ifname eth0<br />
<br />
名前、UUID、タイプ、バッキングデバイスを含む接続のリストを取得します:<br />
<br />
$ nmcli connection show<br />
<br />
接続を有効にします (つまり、既存のプロファイルでネットワークに接続します):<br />
<br />
$ nmcli connection up ''名前_または_uuid''<br />
<br />
接続を削除します:<br />
<br />
$ nmcli connection delete ''名前_または_uuid''<br />
<br />
ネットワークデバイスとその状態のリストを表示します:<br />
<br />
$ nmcli device<br />
<br />
Wi-Fi をオフにします:<br />
<br />
$ nmcli radio wifi off<br />
<br />
=== 接続を編集する ===<br />
<br />
設定の包括的なリストについては、{{man|5|nm-settings}} を参照してください。<br />
<br />
まず、接続のリストを取得する必要があります:<br />
<br />
{{hc|$ nmcli connection|<nowiki><br />
NAME UUID TYPE DEVICE<br />
有線接続 2 e7054040-a421-3bef-965d-bb7d60b7cecf ethernet enp5s0<br />
有線接続 1 997f2782-f0fc-301d-bfba-15421a2735d8 ethernet enp0s25<br />
MY-HOME-WIFI-5G 92a0f7b3-2eba-49ab-a899-24d83978f308 wifi --<br />
</nowiki>}}<br />
<br />
ここでは、後で使用する接続 ID として最初の列を使用できます。この例では、{{ic|有線接続 2}} を接続 ID として選択します。<br />
<br />
作成後に接続 {{ic|有線接続 2}} を設定するには、次の3つの方法があります:<br />
<br />
; nmcli 対話型エディタ<br />
: {{ic|nmcli connection edit '有線接続 2'}}。<br> 使用法はエディタから十分に文書化されています。<br />
<br />
; nmcli コマンドラインインターフェイス<br />
: {{ic|nmcli connection modify '有線接続 2' ''設定''.''プロパティ'' ''値''}}。使用方法については {{man|1|nmcli}} を参照してください。例えば、{{ic|nmcli connection modify '有線接続 2' ipv4.route-metric 200}} コマンドを使用して、IPv4 ルートメトリックを 200 に変更できます。<br />
設定を削除するには、次のように空のフィールド ("") を渡します:<br />
: {{ic|nmcli connection modify '有線接続 2' ''設定''.''プロパティ'' ""}}<br />
<br />
; 接続ファイル<br />
: {{ic|/etc/NetworkManager/system-connections/}} で、対応する {{ic|有線接続 2.nmconnection}} ファイルを変更します。<br>{{ic|nmcli connection reload}} で設定ファイルをリロードすることを忘れないでください。<br />
<br />
== フロントエンド ==<br />
<br />
[[デスクトップ環境]]と統合するために、ほとんどのユーザはアプレットをインストールしたいと考えるでしょう。アプレットはネットワークの選択や設定を容易にするだけでなく、機密情報をセキュアに保存するために必要なエージェントも提供します。様々なデスクトップ環境は独自のアプレットを持っています。デスクトップ環境に独自のアプレットが存在しない場合、[[#nm-applet]] を使用することもできます。<br />
<br />
=== GNOME ===<br />
<br />
[[GNOME]] にはツールが内蔵されており、ネットワーク設定からアクセス可能です。<br />
<br />
=== KDE Plasma ===<br />
<br />
{{Pkg|plasma-nm}} パッケージを[[インストール]]してください。その後、''パネルオプション > ウィジェットを追加 > ネットワーク'' で KDE タスクバーにアプレットを追加してください。<br />
<br />
=== nm-applet ===<br />
<br />
{{Pkg|network-manager-applet}} は、システムトレイのある Xorg 環境で機能する GTK 3 フロントエンドです。<br />
<br />
接続に関する機密情報 (Wi-Fi のパスワードなど) を保存するには、[https://specifications.freedesktop.org/secret-service/latest/ Secret Service D-Bus API] を実装しているアプリケーション ([[GNOME/Keyring]]、[[KDE Wallet]]、[[KeePass|KeePassXC]] など) をインストールし設定してください。<br />
<br />
接続の設定で {{ic|Make available to other users}} チェックボックスオプションを有効化すると、NetworkManager はその接続のパスワードを平文で保存することに注意してください。とはいえ、パスワードが含まれるファイルは root (及び {{ic|nm-applet}} を通して他のユーザ) からしかアクセスできません。[[#Wi-Fi パスワードの暗号化]] を見てください。<br />
<br />
{{Pkg|trayer}} か {{Pkg|stalonetray}} を使うことで、システムトレイ無しで {{ic|nm-applet}} を実行することができます。例えば、以下のようなスクリプトをパスに追加することができます:<br />
<br />
{{hc|nmgui|<nowiki><br />
#!/bin/sh<br />
nm-applet 2>&1 > /dev/null &<br />
stalonetray 2>&1 > /dev/null<br />
killall nm-applet<br />
</nowiki>}}<br />
<br />
''stalonetray'' のウィンドウを閉じると、{{ic|nm-applet}} も閉じます。なので、ネットワークの設定を終えたら余分なメモリが消費されることはありません。<br />
<br />
このアプレットは、Wi-Fi ネットワークの接続や切断などのイベントの通知を表示することができます。これらの通知を表示させるには、通知サーバがインストールされている必要があります ([[デスクトップ通知]] を見てください)。アプレットを通知サーバ無しで使うと、標準出力や標準エラー出力にメッセージが表示され、最悪、アプレットがハングするかもしれません。[https://bugzilla.gnome.org/show_bug.cgi?id=788313] を参照してください。<br />
<br />
通知を無効化した状態で {{ic|nm-applet}} を実行するには、アプレットを以下のコマンドで起動してください:<br />
<br />
$ nm-applet --no-agent<br />
<br />
{{Tip|{{ic|nm-applet}} は[[XDG Autostart|自動起動デスクトップファイル]]によって自動的に起動されるかもしれません。そのような場合に {{ic|--no-agent}} オプションを追加するには、デスクトップファイルの Exec 行を変更してください。つまり:<br />
<br />
{{bc|1=Exec=nm-applet --no-agent}}<br />
<br />
}}<br />
<br />
{{Warning|[[i3]] では、nm-applet が {{ic|--no-agent}} オプションで起動された場合、パスワード入力ダイアログが表示されないため、アイテムリストをクリックして新しい暗号化された Wi-Fi ネットワークに接続することができなくなります。[[journal]] には {{ic|no secrets: No agents were available for this request}} と出力されます。}}<br />
<br />
==== Appindicator ====<br />
<br />
バージョン 1.18.0 から、Appindicator のサポートが公式の {{Pkg|network-manager-applet}} パッケージで[https://gitlab.archlinux.org/archlinux/packaging/packages/network-manager-applet/-/commit/527448fb2a87d85055f504f463dfe961dccd75c3 利用可能]になりました。nm-applet を Appindicator の環境で使うには、アプレットを以下のコマンドで起動してください:<br />
<br />
$ nm-applet --indicator<br />
<br />
=== networkmanager-dmenu ===<br />
<br />
フロントエンドのもう一つの選択肢は {{AUR|networkmanager-dmenu-git}} です。これは、NetworkManager の接続を {{ic|nm-applet}} ではなく [[dmenu]] や [[rofi]] で管理する小さなスクリプトです。このスクリプトには必須の機能が全て揃っています。例えば: NetworkManager の既存の Wi-Fi 接続や有線接続に接続する、新しい Wi-Fi 接続に接続する、必要に応じてパスフレーズを要求する、既存の VPN 接続に接続する、ネットワークを有効化/無効化する、''nm-connection-editor'' GUI を起動する、Bluetooth ネットワークに接続する。<br />
<br />
== 設定 ==<br />
<br />
NetworkManager を適切に実行させるには、いくつか追加の手順が必要です。[[ネットワーク設定#ホスト名の設定]] で説明されているように、{{ic|/etc/hosts}} が設定されていることを確認してください。<br />
<br />
NetworkManager のグローバルな設定ファイルは {{ic|/etc/NetworkManager/NetworkManager.conf}} です。追加の設定ファイルは {{ic|/etc/NetworkManager/conf.d/}} に置くことができます。通常、グローバルなデフォルト値に対して設定を行う必要はありません。<br />
<br />
設定ファイルを編集したら、以下のコマンドで変更を適用することができます:<br />
<br />
# nmcli general reload<br />
<br />
=== NetworkManager-wait-online ===<br />
<br />
{{ic|NetworkManager.service}} を有効化すると、{{ic|NetworkManager-wait-online.service}} も有効化されます。{{ic|NetworkManager-wait-online.service}} は oneshot なシステムサービスで、ネットワークが構成されるまで待機します。このサービスには {{ic|1=WantedBy=network-online.target}} が含まれているため、このサービスが終了するのは、{{ic|network-online.target}} 自体が有効化されている時か、あるいは {{ic|network-online.target}} が他のユニットによって実行された時のみです。[[systemd#ネットワークが稼働した後にサービスを実行する]] も参照してください。<br />
<br />
デフォルトでは、{{ic|NetworkManager-wait-online.service}} は、ネットワーク接続が確立されるのを待つ ({{man|1|nm-online}} を参照) のではなく、NetworkManager の起動が完了するのを待ちます。ネットワークの準備が整う前に {{ic|NetworkManager-wait-online.service}} が終了してしまってブート時に一部のサービスが失敗してしまう場合、{{ic|NetworkManager-wait-online.service}} [[ユニットを拡張]]し、{{ic|ExecStart}} 行から {{ic|-s}} を削除してください:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=/usr/bin/nm-online -q<br />
<br />
ただし、これにより[https://lists.fedoraproject.org/archives/list/users@lists.fedoraproject.org/thread/EGC324JD3HJCGVN7J55WYPRLFDA3TP7N/ 他の問題]が発生する可能性があることに注意してください。<br />
<br />
一部のケースで、タイムアウトの設定が短すぎるために、このサービスの起動が失敗してしまう場合があります。サービスを[[編集]]して {{ic|NM_ONLINE_TIMEOUT}} を {{ic|60}} からより大きい値に変更してください。<br />
<br />
=== PolicyKit のパーミッションをセットアップする ===<br />
<br />
デフォルトでは、アクティブなローカルセッションのユーザは全員パスワード無しでほぼ全てのネットワーク設定を変更することができます。セッションの種類を確認する方法については、[[一般的なトラブルシューティング#セッションのパーミッション]] を見てください。ほとんどの場合、特に設定しなくても全て動作するはずです。<br />
<br />
一部のアクション (システムのホスト名を変更するなど) においては、管理者のパスワードが必要です。そのような場合、自身のユーザを {{ic|wheel}} グループに[[ユーザーとグループ#グループ管理|追加]]し、パスワードのプロンプトを表示する [[Polkit#認証エージェント|Polkit の認証エージェント]]を実行する必要があります。<br />
<br />
リモートセッションの場合 (例えば、[[TigerVNC#vncserver をバーチャル(ヘッドレス)セッションで起動する|ヘッドレス VNC]])、NetworkManager を使用するために必要な特権を得る方法は複数あります:<br />
<br />
# 自身を {{ic|wheel}} グループに[[ユーザーとグループ#グループ管理|追加]]する。アクションの度にパスワードを入力する必要があります。注意点として、{{ic|wheel}} グループに追加すると他の権限 (root パスワードを入力せずに [[sudo]] を実行できるなど) も付与される場合があります。<br />
# 自身を {{ic|network}} グループに[[ユーザーとグループ#グループ管理|追加]]し、以下の内容で {{ic|/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules}} を作成する: {{bc|<nowiki><br />
polkit.addRule(function(action, subject) {<br />
if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {<br />
return polkit.Result.YES;<br />
}<br />
});<br />
</nowiki>}} {{ic|network}} グループ内の全ユーザがパスワード無しでネットワークの追加と削除を行えるようになります (これは、Polkit 認証エージェントを実行する必要がないことを意味します。なので、この方法は SSH セッションでも使えます。)。<br />
<br />
=== プロクシ設定 ===<br />
<br />
NetworkManager は直接プロクシ設定を扱いませんが、[[GNOME]] や [[KDE]] を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する {{AUR|proxydriver}} を使うことができます。<br />
<br />
''proxydriver'' でプロクシ設定を変更できるようにするには、GNOME スタートアッププロセスの一部として、次のコマンドを実行する必要があります ([[GNOME#自動起動]] を参照):<br />
<br />
$ xhost +si:localuser:''ユーザ名''<br />
<br />
参照: [[プロキシ設定]]<br />
<br />
=== 接続の確認 ===<br />
<br />
NetworkManager は、ネットワークに接続した後にウェブサーバへの接続を試みて、キャプティブポータルなどが存在しないか確認します。デフォルトの接続先ホスト ({{ic|/usr/lib/NetworkManager/conf.d/20-connectivity.conf}} で設定されています) は [https://ping.archlinux.org ping.archlinux.org] (redirect.archlinux.org の CNAME エイリアス) です。別のウェブサーバを使う、または接続チェックを無効化するには、{{ic|/etc/NetworkManager/conf.d/20-connectivity.conf}} を作成してください ({{man|5|NetworkManager.conf|CONNECTIVITY SECTION}} を参照)。以下は、GNOME のサーバを使用する例です ([[GNOME]] を使用する必要はありません):<br />
<br />
{{hc|/etc/NetworkManager/conf.d/20-connectivity.conf|<nowiki><br />
[connectivity]<br />
uri=http://nmcheck.gnome.org/check_network_status.txt<br />
</nowiki>}}<br />
<br />
NetworkManager の接続チェックを無効化するには、以下の設定を使用してください。これは、接続チェックを無効化する VPN に接続している場合に便利です。<br />
<br />
{{hc|/etc/NetworkManager/conf.d/20-connectivity.conf|<nowiki><br />
[connectivity]<br />
enabled=false<br />
</nowiki>}}<br />
<br />
{{Note|自動的な接続チェックはプライバシーの問題を引き起こす可能性がありますが、Arch Linux のデフォルトの接続先 URL は如何なるアクセスも記録しません。[https://gitlab.archlinux.org/archlinux/infrastructure/-/commit/fabccd0f61e5dea3925e8a0c6a46d56d5750c121#a4f34381bbb18ea77bfb3dd11a8aeca707078fca_0_26] [https://gitlab.archlinux.org/archlinux/infrastructure/-/blob/master/roles/ping/templates/nginx.d.conf.j2] を参照してください。}}<br />
<br />
=== キャプティブポータル ===<br />
<br />
[[Wikipedia:ja:キャプティブポータル|キャプティブポータル]]が存在している場合、デスクトップマネージャが、資格情報を求めるウィンドウを自動的に開く場合があります。あなたのデスクトップ環境がこれを行わない場合、{{Pkg|capnet-assist}} パッケージを使用することができます (しかし現在、このパッケージの NetworkManager ディスパッチャスクリプトは壊れています)。あるいは、NetworkManager ディスパッチャスクリプトを以下の内容で作成することもできます:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/90-open_captive_portal|<nowiki><br />
#!/bin/sh -e<br />
# Script to dispatch NetworkManager events<br />
#<br />
# Runs shows a login webpage on walled garden networks.<br />
# See NetworkManager(8) for further documentation of the dispatcher events.<br />
<br />
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin<br />
<br />
if [ -x "/usr/bin/logger" ]; then<br />
logger="/usr/bin/logger -s -t captive-portal"<br />
else<br />
logger=":"<br />
fi<br />
<br />
wait_for_process() {<br />
PNAME=$1<br />
while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do<br />
sleep 3;<br />
done<br />
}<br />
<br />
#launch the browser, but on boot we need to wait that nm-applet starts<br />
start_browser() {<br />
local user="$1"<br />
local display="$2"<br />
<br />
export DISPLAY="$display"<br />
wait_for_process nm-applet<br />
<br />
export XAUTHORITY="/home/$user/.Xauthority"<br />
<br />
$logger "Running browser as '$user' with display '$display' to login in captive portal"<br />
sudo -u "$user" --preserve-env=DISPLAY,XAUTHORITY -H xdg-open http://capnet.elementary.io 2>&1 > /dev/null<br />
}<br />
<br />
# Run the right scripts<br />
case "$2" in<br />
connectivity-change)<br />
$logger -p user.debug "dispatcher script triggered on connectivity change: $CONNECTIVITY_STATE"<br />
if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then<br />
# Match last column of who's output with ' :[at least one digit] '<br />
who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \<br />
while read user display; do<br />
start_browser $user $display || $logger -p user.err "Failed for user: '$user' display: '$display'"<br />
done<br />
fi<br />
;;<br />
*)<br />
# In a down phase<br />
exit 0<br />
;;<br />
esac<br />
</nowiki>}}<br />
<br />
このスクリプトを実行するには、{{ic|NetworkManager.service}} を[[再起動]]するか、システムを再起動する必要があります。そうしたら、ディスパッチャスクリプトはキャプティブポータルを検知するとログインウィンドウを開くはずです。<br />
<br />
別の解決策は Google Chrome ベースの {{AUR|captive-browser-git}} です。<br />
<br />
=== DHCP クライアント ===<br />
<br />
デフォルトでは、NetworkManager は自身の内蔵 DHCP クライアントを使用します。内蔵 DHCPv4 プラグインは [https://nettools.github.io/n-dhcp4/ nettools の n-dhcp4] ライブラリをベースにしていますが、内蔵 DHCPv6 プラグインは systemd-networkd ベースのコードから作られています。<br />
<br />
別の DHCP クライアントを使用するには、以下の代替実装のどれかを[[インストール]]してください:<br />
<br />
* {{Pkg|dhclient}} - [[dhclient]]<br />
* {{Pkg|dhcpcd}} - [[dhcpcd]]<br />
<br />
DHCP クライアントのバックエンドを変更するには、{{ic|/etc/NetworkManager/conf.d/}} 内に設定ファイルを作成して、そのファイル内で {{ic|1=main.dhcp=''DHCP_クライアント名''}} オプションを設定してください。例えば:<br />
<br />
{{hc|1=/etc/NetworkManager/conf.d/dhcp-client.conf|2=<br />
[main]<br />
dhcp=dhclient<br />
}}<br />
<br />
{{Note|<br />
* NetworkManger は IPv6 に dhcpcd を使用することをサポートしていません。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/5 NetworkManager issue #5] を参照してください。dhcpcd が DHCP クライアントとして設定されている場合、NetworkManager は DHCPv6 に対しては内臓の DHCP クライアントを使用します。<br />
* {{Pkg|dhclient}} パッケージと {{Pkg|dhcpcd}} パッケージに同梱されている systemd ユニットは有効化しないでください。NetworkManager と競合してしまいます。詳細は [[#インストール]] セクションに書かれているノートを見てください。<br />
}}<br />
<br />
=== DNS の管理 ===<br />
<br />
NetworkManager の DNS 管理については、GNOME プロジェクトの wiki ページ [https://wiki.gnome.org/Projects/NetworkManager/DNS Projects/NetworkManager/DNS] で説明されています。<br />
<br />
==== DNS キャッシングと条件付きフォワーディング ====<br />
<br />
NetworkManager には、[[dnsmasq]] または [[systemd-resolved]] を使用して DNS キャッシングと条件付きフォワーディングを有効化するプラグインが存在します ([https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/143 以前は]、"条件付きフォワーディング" は NetworkManager のドキュメントで "split DNS" と呼ばれていました)。このセットアップには、DNS ルックアップがキャッシュされるので名前解決の時間が短縮され、VPN ホストの DNS ルックアップが、関連する VPN の DNS サーバに転送されるという長所があります。これは、複数の VPN に接続する場合に特に便利です。<br />
<br />
{{Note|{{ic|/etc/resolv.conf}} が {{ic|/run/systemd/resolve/stub-resolv.conf}} や {{ic|/run/systemd/resolve/resolv.conf}}、{{ic|/lib/systemd/resolv.conf}}、{{ic|/usr/lib/systemd/resolv.conf}} へのシンボリックリンクである場合、NetworkManager は systemd-resolved を自動的に選択します。dnsmasq を使用するには、まずシンボリックリンクを削除する必要があります。その後で、NetworkManager を再起動してください。}}<br />
<br />
===== dnsmasq =====<br />
<br />
{{Pkg|dnsmasq}} がインストールされていることを確認してください。そして、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイル (無い場合は作成してください) で {{ic|1=main.dns=dnsmasq}} を設定してください:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=<br />
[main]<br />
dns=dnsmasq<br />
}}<br />
<br />
次に、{{ic|nmcli general reload}} を root として実行してください。NetworkManager は自動的に dnsmasq を起動し、{{ic|/etc/resolv.conf}} に {{ic|127.0.0.1}} を追加します。元の DNS サーバは {{ic|/run/NetworkManager/no-stub-resolv.conf}} を見れば分かります。dnsmasq が使用されているかどうかは、{{ic|drill example.com}} で同じ DNS ルックアップを2度行ってサーバとクエリの時間を計測すれば確認できます。<br />
<br />
{{Note|<br />
* {{ic|dnsmasq.service}} を起動したり、{{ic|/etc/dnsmasq.conf}} を編集したりする必要はありません。NetworkManager は、その systemd サービスを使わず、さらに dnsmasq のデフォルトの設定ファイルを読み込まずに dnsmasq を起動します。<br />
* NetworkManager によって起動された dnsmasq インスタンスは {{ic|127.0.0.1:53}} にバインドされます。なので、これと同じアドレスとポートで他のソフトウェア ({{ic|dnsmasq.service}} も含む) を実行することはできません。<br />
}}<br />
<br />
====== dnsmasq のカスタム設定 ======<br />
<br />
{{ic|/etc/NetworkManager/dnsmasq.d/}} 内に設定ファイルを作成することで、''dnsmasq'' のカスタム設定を作成することができます。例えば、DNS キャッシュ (RAM 内に格納されます) のサイズを変更するには:<br />
<br />
{{hc|/etc/NetworkManager/dnsmasq.d/cache.conf|2=<br />
cache-size=1000<br />
}}<br />
<br />
設定ファイルの構文は以下のコマンドで確認できます:<br />
<br />
$ dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d<br />
<br />
利用可能な全てのオプションについては {{man|8|dnsmasq}} を参照してください。<br />
<br />
====== IPv6 ======<br />
<br />
{{Accuracy|NetworkManager は {{ic|::1}} を {{ic|/etc/resolv.conf}} に追加しないため、以下の方法では問題を解決できません。{{ic|@::1}} を手動で drill に渡さない限り、{{ic|Error: error sending query: No (valid) nameservers defined in the resolver}} というエラーで失敗します。}}<br />
<br />
NetworkManager で {{ic|dnsmasq}} を有効化すると、IPv6 のみの DNS ルックアップ (つまり、{{ic|drill -6 [hostname]}}) が機能しなくなる場合があります (しかし、それ以外では機能する)。この問題を解決するには、以下のファイルを作成し、IPv6 ループバックもリッスンするように ''dnsmasq'' を設定してください:<br />
<br />
{{hc|/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf|2=<br />
listen-address=::1<br />
}}<br />
<br />
さらに、{{ic|dnsmasq}} は上流の IPv6 DNS を優先しません。残念ながら、NetworkManager も IPv6 DNS を優先しません ([https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/936712 Ubuntu Bug])。回避策は、NetworkManager の設定で IPv6 DNS を無効化することです (IPv4 DNS があると仮定します)。<br />
<br />
====== DNSSEC ======<br />
<br />
NetworkManager によってデフォルトで開始される dnsmasq インスタンスは、{{ic|--proxy-dnssec}} オプションを渡して開始されるため、[[DNSSEC]] を検証しません。なので、上流の DNS サーバからの DNSSEC 情報を何でも信頼します。<br />
<br />
dnsmasq に DNSSEC を適切に検証させるには、以下の設定ファイルを作成してください (これにより、DNSSEC をサポートしない名前サーバでの DNS 解決が機能しなくなります):<br />
<br />
{{hc|/etc/NetworkManager/dnsmasq.d/dnssec.conf|2=<br />
conf-file=/usr/share/dnsmasq/trust-anchors.conf<br />
dnssec<br />
}}<br />
<br />
===== systemd-resolved =====<br />
<br />
NetworkManager は [[systemd-resolved]] を DNS リゾルバ及び DNS キャッシュとして使用することができます。まず先に、''systemd-resolved'' が適切に設定されていて、{{ic|systemd-resolved.service}} が[[開始]]されていることを確認してください。<br />
<br />
{{ic|/etc/resolv.conf}} が {{ic|/run/systemd/resolve/stub-resolv.conf}} や {{ic|/run/systemd/resolve/resolv.conf}}、{{ic|/usr/lib/systemd/resolv.conf}} への[[systemd-resolved#DNS|シンボリックリンク]]である場合、systemd-resolved は自動的に使用されます。<br />
<br />
{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで {{ic|1=main.dns=systemd-resolved}} を設定することで、これを明示的に有効化することもできます:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=<br />
[main]<br />
dns=systemd-resolved<br />
}}<br />
<br />
===== openresolv サブスクライバのある DNS リゾルバ =====<br />
<br />
ローカルの [[DNS リゾルバ]]へのサブスクライバ (加入者) が [[openresolv]] に存在している場合、サブスクライバをセットアップし、[[#openresolv を使う|openresolv を使用するように NetworkManager を設定してください]]。<br />
<br />
NetworkManager は単一の "インターフェイス" を ''resolvconf'' に広告するため、2つの NetworkManager 接続間で条件付きフォワーディングを行うのは不可能です。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 NetworkManager issue 153] を参照してください。<br />
<br />
この問題は {{ic|/etc/resolvconf.conf}} で {{ic|1=private_interfaces="*"}} を設定すれば、部分的に緩和できます [https://roy.marples.name/projects/openresolv/configuration/]。検索ドメインリストに無いドメインのクエリは、フォワーディングされません。そのようなクエリは、他の DNS サーバにフォワーディングされるか、DNS ルートサーバから回帰的に解決されるなどして、ローカルのリゾルバの設定に従って処理されます。<br />
<br />
==== カスタム DNS サーバ ====<br />
<br />
===== カスタムグローバル DNS サーバの設定 =====<br />
<br />
全ての接続に対して DNS サーバを設定するには、{{man|5|NetworkManager.conf}} 内で {{ic|[global-dns-domain-*]}} というセクション内で {{ic|1=servers=''serveripaddress1'',''serveripaddress2'',''serveripaddress3''}} という構文を使ってDNS サーバを指定してください。例えば:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/dns-servers.conf|2=<br />
[global-dns-domain-*]<br />
servers=::1,127.0.0.1<br />
}}<br />
<br />
{{Note|<br />
* [[#DNS キャッシングと条件付きフォワーディング|NetworkManager の dnsmasq か systemd-resolved プラグイン]]、または [[#openresolv サブスクライバのある DNS リゾルバ|openresolv サブスクライバ]]を使用する場合、{{ic|1=servers=}} オプションにループバックアドレスを指定しないでください。DNS 解決が機能しなくなる可能性があります。<br />
* 指定されたサーバは [[systemd-resolved]] に送られず、接続の DNS サーバが代わりに使用されます。<br />
}}<br />
<br />
===== 接続でのカスタム DNS サーバの設定 =====<br />
<br />
====== 接続でのカスタム DNS サーバの設定 (GUI) ======<br />
<br />
セットアップ方法は、使用するフロントエンドの種類に依ります。手順としては通常、アプレットを右クリックし、プロファイルを編集 (または作成) し、DHCP タイプに ''自動 (アドレスのみ)'' (''Automatic (specify addresses)'') を選択するというものです。DNS アドレスを入力する必要があり、通常、{{ic|127.0.0.1, ''DNS-server-one'', ...}} という形です。<br />
<br />
====== 接続でのカスタム DNS サーバの設定 (nmcli / 設定ファイル) ======<br />
<br />
[[#接続を編集する|接続の設定]]で {{ic|dns}} フィールド (及び、関連する {{ic|dns-search}} と {{ic|dns-options}}) を使うことで、接続毎に DNS サーバをセットアップすることができます。<br />
<br />
{{ic|method}} が {{ic|auto}} に設定されている場合 (DHCP を使用する場合)、{{ic|ignore-auto-dns}} を {{ic|yes}} に設定する必要があります。<br />
<br />
==== /etc/resolv.conf ====<br />
<br />
NetworkManager の {{ic|/etc/resolv.conf}} 管理モードは、{{ic|main.rc-manager}} で設定されます。{{Pkg|networkmanager}} パッケージはこれを、上流のデフォルトである {{ic|auto}} ではなく、{{ic|symlink}} に設定します。設定と値は {{man|5|NetworkManager.conf}} man ページでドキュメント化されています。<br />
<br />
{{Tip|openresolv を使用すると、NetworkManager は、''resolvconf'' によってサポートされている他のソフトウェアと共存できます。例えば、openresolv が [[openresolv#Subscribers|subscriber]] を持つローカル DNS キャッシングおよび分割 DNS リゾルバを実行できます。openresolv で NetworkManager を使用する場合、条件付きフォワーディングは[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 まだ完全にサポートされていない]ことに注意してください。}}<br />
<br />
また、''NetworkManager'' は、ネットワークの変更後に {{ic|/etc/resolv.conf}} を変更するために使用できる、いわゆるディスパッチャスクリプトを介したフックも提供します。詳細は [[#ネットワークサービスで NetworkManager dispatcher を使用する]] と {{man|8|NetworkManager}} を参照してください。<br />
<br />
{{Note|<br />
* NetworkManager が [[#dnsmasq|dnsmasq]] または [[systemd-resolved]] のいずれかを使用するように設定されている場合、適切なループバックアドレスが {{ic|/etc/resolv.conf}} に書き込まれます。<br />
* NetworkManager が書き込む {{ic|resolv.conf}}、または {{ic|/etc/resolv.conf}} に書き込む内容は、{{ic|/run/NetworkManager/resolv.conf}} で見られます。<br />
* 取得したネームサーバーと検索ドメインを含む {{ic|resolv.conf}} ファイルは、{{ic|/run/NetworkManager/no-stub-resolv.conf}} にあります。<br />
}}<br />
<br />
===== 管理対象外の /etc/resolv.conf =====<br />
<br />
NetworkManager が {{ic|/etc/resolv.conf}} に干渉しないようにするには、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで {{ic|1=main.dns=none}} を設定してください:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=<br />
[main]<br />
dns=none<br />
}}<br />
<br />
{{Tip|NetworkManager が DNS 設定を [[systemd-resolved]] に送信しないように、{{ic|1=main.systemd-resolved=false}} を設定することもできます。}}<br />
<br />
{{Note|{{ic|1=main.dns=none}} を使うのではなく、[[dnsmasq]] や [[systemd-resolved]] などの他の DNS バックエンドを使用するように NetworkManager を設定する方法については、[[#DNS キャッシングと条件付きフォワーディング]] を見てください。}}<br />
<br />
その後、{{ic|/etc/resolv.conf}} が壊れたシンボリックリンクになり、削除する必要が生じるかもしれません。その場合、新しい {{ic|/etc/resolv.conf}} ファイルを作成してください。<br />
<br />
===== openresolv を使う =====<br />
<br />
{{Note|NetworkManager は、{{Pkg|systemd-resolvconf}} によって提供されている systemd-resolved の ''resolvconf'' インターフェイスの使用をサポートしていません ({{man|1|resolvectl|COMPATIBILITY WITH RESOLVCONF(8)}})。<br />
* [[systemd-resolved]] を使用する際は {{ic|1=main.rc-manager=resolvconf}} を設定しないでください。代わりに、[[systemd-resolved#DNS|/etc/resolv.conf シンボリックリンクを適切に作成する]]か、[[#systemd-resolved|systemd-resolved を使用するように NetworkManager を明示的に設定]]してください。<br />
* systemd-resolved を使用しない場合は、{{Pkg|systemd-resolvconf}} パッケージがインストールされていないことを確認してください。{{ic|systemd-resolved.service}} が起動されていないと、このパッケージは、resolvconf を使用する全てのネットワーキングソフトウェア (NetworkManager だけではありません) の機能を破壊します。<br />
}}<br />
<br />
[[openresolv]] を使用するように NetworkManager を設定するには、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで {{ic|1=main.rc-manager=resolvconf}} を設定してください:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=<br />
[main]<br />
rc-manager=resolvconf<br />
}}<br />
<br />
=== ファイアウォール ===<br />
<br />
現在の接続に基づいて [[Firewalld#NetworkManager を使ったゾーン管理|firewalld ゾーンを割り当てる]]ことができます。たとえば、職場では制限の厳しいファイアウォールを使用し、自宅では制限の少ないファイアウォールを使用します。<br />
<br />
これは、[[#ネットワークサービスで NetworkManager dispatcher を使用する|NetworkManager dispatcher]] を使用して行うこともできます。<br />
<br />
== ネットワークサービスで NetworkManager dispatcher を使用する ==<br />
<br />
NetworkManager がインターフェイスを立ち上げるまで実行したくないようなネットワークサービスはたくさんあります。NetworkManager には、(例えば [[NFS]] や [[SMB]]、[[NTPd]] を使用する時などに) ネットワークに接続したらサービスを開始し、切断したらサービスを停止する機能があります。<br />
<br />
この機能を有効化するには、{{ic|NetworkManager-dispatcher.service}} を[[有効化]]し、かつ[[起動]]する必要があります。<br />
<br />
このサービスを有効化したら、{{ic|/etc/NetworkManager/dispatcher.d}} 内にスクリプトを追加することができます。<br />
<br />
スクリプトは '''root''' によって所有されていなければなりません。ディスパッチャは、root によって所有されていないスクリプトを実行しません。セキュリティを高めるために、スクリプトのグループ[[所有権]]も root に設定してください:<br />
<br />
# chown root:root /etc/NetworkManager/dispatcher.d/''10-script.sh''<br />
<br />
スクリプトファイルを[[実行可能属性|実行可能]]にするのを忘れないでください。<br />
<br />
スクリプトは、ネットワークへの接続時にはアルファベット順で実行され、切断時には逆アルファベット順で実行されます。実行される順番を保証するために、スクリプトの名前の前に数字を置くのが一般的です (例: {{ic|10-portmap}}、{{ic|30-netfs}}。こうすることで、NFS がマウントを試みる前に、''portmapper'' が立ち上がります)。<br />
<br />
スクリプトは以下の引数を受け取ります:<br />
<br />
* '''インターフェイス名:''' 例えば {{ic|eth0}}<br />
* '''アクション:''' ''up''、''down''、''vpn-up''、''vpn-down'' など (完全なリストは {{man|8|NetworkManager-dispatcher}} を見てください)<br />
<br />
{{Warning|外部ネットワークや公開ネットワークに接続する場合は、どのサービスを起動するのか、どのサーバにサービスは接続できるのかに注意してください。公開ネットワークに接続する際に間違ったサービスを起動してしまうとセキュリティホールを作ってしまう可能性があります。}}<br />
<br />
=== ディスパッチャのタイムアウトを防ぐ ===<br />
<br />
上記がうまくいっているのであれば、このセクションは関係しません。しかし、ディスパッチャのスクリプトの実行に時間が掛かってしまうという一般的な問題があります。最初は、3 秒だけの内部タイムアウトが使用されていました。呼ばれたスクリプトが時間内に完了しないと、そのスクリプトは kill されていました。後に、タイムアウトは約 20 秒に延長されました (詳細は [https://bugzilla.redhat.com/show_bug.cgi?id=982734 Bugtracker] を参照)。タイムアウトのせいで依然として問題が発生する場合は、{{ic|NetworkManager-dispatcher.service}} に対する[[ドロップインファイル]]を使って、終了後もアクティブ状態を維持するように設定することで問題を回避できます:<br />
<br />
{{hc|/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf|2=<br />
[Service]<br />
RemainAfterExit=yes<br />
}}<br />
<br />
その後、変更した {{ic|NetworkManager-dispatcher}} サービスを開始し、かつ有効化してください。<br />
<br />
{{Warning|{{ic|RemainAfterExit}} 行を追加すると、ディスパッチャが閉じられなくなります。残念ながら、ディスパッチャは、スクリプトを再び実行する前に'''閉じなければなりません'''。先の設定により、ディスパッチャはタイムアウトしませんが、閉じられもしません。これは、スクリプトはブート毎に 1 度しか実行されないことを意味します。なので、タイムアウトが実際に問題を起こしていない限り、この行を追加しないでください。}}<br />
<br />
=== ディスパッチャの例 ===<br />
<br />
==== sshfs でリモートディレクトリをマウントする ====<br />
<br />
このスクリプトは非常に制限された環境内で実行されるため、SSH エージェントに接続するためには {{ic|SSH_AUTH_SOCK}} 変数をエクスポートする必要があります。これを行う方法はいくつかあります (詳細は[https://bbs.archlinux.org/viewtopic.php?pid=1042030#p1042030 このメッセージ]を見てください)。以下の例は [[GNOME Keyring]] を使って動作し、キーリングがまだアンロックされていない場合はパスワードを要求します。NetworkManager がログイン時に自動的にネットワークに接続するような状況では、''gnome-keyring'' がまだ開始されておらず、変数のエクスポートが失敗する可能性が高いです (そのために sleep コマンドがあります)。接続とマッチする {{ic|UUID}} は、{{ic|nmcli connection status}} か {{ic|nmcli connection list}} を実行すれば確認できます。<br />
<br />
{{bc|<nowiki><br />
#!/bin/sh<br />
USER='username'<br />
REMOTE='user@host:/remote/path'<br />
LOCAL='/local/path'<br />
<br />
interface=$1 status=$2<br />
if [ "$CONNECTION_UUID" = "</nowiki>''uuid''<nowiki>" ]; then<br />
case $status in<br />
up)<br />
# sleep 10<br />
SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')<br />
export SSH_AUTH_SOCK<br />
su "$USER" -c "sshfs $REMOTE $LOCAL"<br />
;;<br />
down)<br />
fusermount -u "$LOCAL"<br />
;;<br />
esac<br />
fi<br />
</nowiki>}}<br />
<br />
==== SMB 共有をマウントする ====<br />
<br />
[[SMB]] 共有は特定のネットワークや場所 (例えば自宅) でしか利用できないことがあります。ディスパッチャを使えば、現在の場所で利用可能な SMB 共有のみをマウントすることができます。<br />
<br />
以下のスクリプトは、特定のネットワークに接続していることを確認し、それに応じて共有をマウントします:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/30-mount-smb.sh|<nowiki><br />
#!/bin/sh<br />
<br />
# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。<br />
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。<br />
if [ "$2" = "up" ]; then<br />
if [ "$CONNECTION_UUID" = "uuid" ]; then<br />
mount /your/mount/point & <br />
# add more shares as needed<br />
fi<br />
fi<br />
</nowiki>}}<br />
<br />
以下のスクリプトは、ソフトウェアが特定のネットワークからの切断を開始する前に、全ての SMB 共有をアンマウントします:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh|<nowiki><br />
#!/bin/sh<br />
<br />
if [ "$CONNECTION_UUID" = "uuid" ]; then<br />
umount -a -l -t cifs<br />
fi<br />
</nowiki>}}<br />
<br />
{{Note|このスクリプトは上記の通り {{ic|pre-down.d}} サブディレクトリに配置してください。さもないと、接続状態が変わる度に毎回、全ての共有がアンマウントされてしまいます。}}<br />
<br />
以下のスクリプトは、特定のネットワークから予期せずに切断されてしまった時に、全ての SMB 共有のアンマウントを試みます:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/40-umount-smb.sh|<nowiki><br />
#!/bin/sh<br />
<br />
if [ "$CONNECTION_UUID" = "uuid" ]; then<br />
if [ "$2" = "down" ]; then<br />
umount -a -l -t cifs<br />
fi<br />
fi<br />
</nowiki>}}<br />
<br />
{{Note|<br />
* NetworkManager 0.9.8 から、''pre-down'' と ''down'' のイベントはシャットダウン時や再起動時に実行されなくなりました。詳細は[https://bugzilla.gnome.org/show_bug.cgi?id&#61;701242 このバグレポート]を見てください。<br />
* 上記 2 つの ''umount'' スクリプトでは、マウントに実際にアクセスしているアプリケーションが 'ハング' してしまう傾向が依然としてあります。<br />
}}<br />
<br />
代替案は、[[NFS#NetworkManager dispatcher を使う]] にあるスクリプトを使うことです:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/30-smb.sh|<nowiki><br />
#!/bin/sh<br />
<br />
# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。<br />
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。<br />
WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"<br />
<br />
if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then<br />
<br />
# スクリプトパラメータ $1: ネットワークインターフェイス名 (未使用)<br />
# スクリプトパラメータ $2: ディスパッチされたイベント<br />
<br />
case "$2" in<br />
"up")<br />
mount -a -t cifs<br />
;;<br />
"down"|"pre-down"|"vpn-pre-down")<br />
umount -l -a -t cifs >/dev/null<br />
;;<br />
esac<br />
fi<br />
</nowiki>}}<br />
<br />
{{Note|このスクリプトは {{ic|noauto}} オプションのマウントは無視します。これらのマウントをディスパッチャが管理できるようにするには、このオプションを取り除くか、{{ic|auto}} を使ってください。}}<br />
<br />
{{ic|pre-down}} イベントをキャッチできるようにするために {{ic|/etc/NetworkManager/dispatcher.d/pre-down/}} 内にシンボリックリンクを作成してください:<br />
<br />
# ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh<br />
<br />
==== NFS 共有をマウントする ====<br />
<br />
[[NFS#NetworkManager dispatcher を使う]] を見てください。<br />
<br />
==== ディスパッチャを使って、LAN ケーブルが挿入されているかに応じて Wi-Fi を自動的にオンオフする ====<br />
<br />
アイディアとしては、LAN ケーブルが抜かれた時にのみ Wi-Fi をオンにし (例えば、ラップトップのドックから取り外された時など)、LAN ケーブルが挿入されたら Wi-Fi を自動的に無効化します。<br />
<br />
以下のディスパッチャスクリプト[https://superuser.com/questions/233448/disable-wlan-if-wired-cable-network-is-available]を作成してください。{{ic|1=''LAN_interface''}} の部分はあなたの LAN インターフェイスに置き換えてください。<br />
<br />
コンピュータがオンの時に LAN インターフェイスが接続され、コンピュータがオフの時に切断された場合のフェイルセーフがあることに注意してください。このフェイルセーフがないと、コンピュータがオンに戻っても Wi-Fi は依然としてオフであり、LAN インターフェイスが切断されていれば、ネットワーク接続が利用できなくなってしまいます。<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/wlan_auto_toggle.sh|2=<br />
#!/bin/sh<br />
<br />
if [ "$1" = "''LAN_interface''" ]; then<br />
case "$2" in<br />
up)<br />
nmcli radio wifi off<br />
;;<br />
down)<br />
nmcli radio wifi on<br />
;;<br />
esac<br />
elif [ "$(nmcli -g GENERAL.STATE device show LAN_interface)" = "20 (unavailable)" ]; then<br />
nmcli radio wifi on<br />
fi<br />
}}<br />
<br />
{{Note|[[#nmcli 例|nmcli]] を使えばインターフェイスの一覧を得られます。イーサネット (LAN) インターフェイスの名前は {{ic|en}} で始まります (例: {{ic|1=enp0s5}})。}}<br />
<br />
==== ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する ====<br />
<br />
この例では、特定の Wi-Fi ネットワークに接続した後に、以前定義された VPN 接続に自動的に接続したいと思います。最初にすべきことは、そのネットワークに接続した後にすることを定義するディスパッチャスクリプトを作成することです。<br />
<br />
{{Note|このスクリプトでは {{ic|iwgetid}} を使うために {{Pkg|wireless_tools}} を必要とします。}}<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/vpn-up|<nowiki><br />
#!/bin/sh<br />
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"<br />
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"<br />
<br />
interface=$1 status=$2<br />
case $status in<br />
up|vpn-down)<br />
if iwgetid | grep -qs ":\"$ESSID\""; then<br />
nmcli connection up id "$VPN_NAME"<br />
fi<br />
;;<br />
down)<br />
if iwgetid | grep -qs ":\"$ESSID\""; then<br />
if nmcli connection show --active | grep "$VPN_NAME"; then<br />
nmcli connection down id "$VPN_NAME"<br />
fi<br />
fi<br />
;;<br />
esac<br />
</nowiki>}}<br />
<br />
全ての Wi-Fi ネットワークで VPN への接続を試みたい場合は、次の ESSID 定義を使用できます: {{ic|1=ESSID=$(iwgetid -r)}}。スクリプトのパーミッションを[[#ネットワークサービスで NetworkManager dispatcher を使用する|適宜]]設定することを忘れないでください。<br />
<br />
[https://developer.gnome.org/NetworkManager/0.9/secrets-flags.html VPN の機密情報が保管される方法]により、上記のスクリプトで VPN への接続しようとしても、{{ic|NetworkManager-dispatcher.service}} が 'no valid VPN secrets' というエラーで失敗する場合があります。幸運なことに、スクリプトから VPN のパスワードにアクセスする方法は他にもあります。<br />
<br />
1: それらの方法の1つでは、VPN 接続の設定ファイルを編集して、[https://bugzilla.redhat.com/show_bug.cgi?id=710552 root からはアクセスできない]キーリングではなく自身で機密情報を保存させるように NetworkManager を設定する必要があります: {{ic|/etc/NetworkManager/system-connections/''VPN接続の名前''}} を開き、{{ic|password-flags}} と {{ic|secret-flags}} を {{ic|1}} から {{ic|0}} に変更してください。<br />
<br />
それだけではうまく行かない場合は、以下の内容で {{ic|passwd-file}} を安全な場所にディスパッチャスクリプトと同じパーミッションと所有権で作成する必要があるかもしれません:<br />
<br />
{{hc|/path/to/passwd-file|<br />
vpn.secrets.password:パスワード<br />
}}<br />
<br />
ファイルからパスワードを得られるようにするために、スクリプトは適宜変更する必要があります:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/vpn-up|<nowiki><br />
#!/bin/sh<br />
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"<br />
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"<br />
<br />
interface=$1 status=$2<br />
case $status in<br />
up|vpn-down)<br />
if iwgetid | grep -qs ":\"$ESSID\""; then<br />
nmcli connection up id "$VPN_NAME" passwd-file /path/to/passwd-file<br />
fi<br />
;;<br />
down)<br />
if iwgetid | grep -qs ":\"$ESSID\""; then<br />
if nmcli connection show --active | grep "$VPN_NAME"; then<br />
nmcli connection down id "$VPN_NAME"<br />
fi<br />
fi<br />
;;<br />
esac<br />
</nowiki>}}<br />
<br />
2: あるいは、{{ic|password-flags}} を変更して、設定ファイル内に {{ic|vpn-secrets}} セクションを追加してパスワードを直接書き込むという方法もあります:<br />
<br />
[vpn]<br />
....<br />
password-flags=0<br />
<br />
[vpn-secrets]<br />
password=''パスワード''<br />
<br />
{{Note|NetworkManager の接続エディタを再び開き、VPN のパスワード/機密情報を保存し直す必要があるかもしれません。}}<br />
<br />
==== ディスパッチャを使って、VPN プロバイダの接続時に IPv6 を無効化する ====<br />
<br />
多くの[[:カテゴリ:VPN プロバイダー|商用 VPN プロバイダー]]は IPv4 のみをサポートしています。つまり、IPv6 のトラフィックは全て VPN をバイパスし、事実上、使い物にならなくなります。ディスパッチャを使って、VPN に接続されている時は全ての IPv6 トラフィックを無効化することで、この問題を回避できます。<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/10-vpn-ipv6|<nowiki><br />
#!/bin/sh<br />
<br />
case "$2" in<br />
vpn-up)<br />
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6<br />
;;<br />
vpn-down)<br />
echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6<br />
;;<br />
esac<br />
</nowiki>}}<br />
<br />
==== OpenNTPD ====<br />
<br />
[[OpenNTPD#NetworkManager dispatcher を使う]] を参照してください。<br />
<br />
==== systemd-timesyncd で DHCP 経由で受信した NTP サーバを動的に設定する ====<br />
<br />
異なるネットワーク間 (例: 会社の LAN、自宅の Wi-Fi、その他の様々な Wi-Fi) でローミングする場合、timesyncd によって使用されている NTP サーバを DHCP によって提供されているものに設定したい場合があります。ただし、NetworkManager 自体は systemd-timesyncd と通信して NTP サーバを設定することはできません。<br />
<br />
ディスパッチャを使うことで、この問題を回避できます。<br />
<br />
systemd-timesyncd の設定ようのオーバーレイディレクトリ {{ic|/etc/systemd/timesyncd.conf.d}} を[[作成]]してください (まだ存在していない場合)。{{ic|/etc/NetworkManager/dispatcher.d}} 内に以下を追加してください:<br />
<br />
{{hc|/etc/NetworkManager/dispatcher.d/10-update-timesyncd|<nowiki><br />
#!/bin/sh<br />
<br />
[ -z "$CONNECTION_UUID" ] && exit 0<br />
INTERFACE="$1"<br />
ACTION="$2"<br />
<br />
case $ACTION in<br />
up | dhcp4-change | dhcp6-change)<br />
[ -n "$DHCP4_NTP_SERVERS" ] || exit<br />
mkdir -p /etc/systemd/timesyncd.conf.d<br />
cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"<br />
[Time]<br />
NTP=$DHCP4_NTP_SERVERS<br />
THE_END<br />
systemctl restart systemd-timesyncd.service<br />
;;<br />
down)<br />
rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"<br />
systemctl restart systemd-timesyncd.service<br />
;;<br />
esac<br />
</nowiki>}}<br />
<br />
NetworkManager が新しいネットワーク接続を設定する ({{ic|1=ACTION=up}}) か、既存の接続の更新を取得する ({{ic|1=ACTION=dhcp4-change}} または {{ic|1=ACTION=dhcp6-change}}) 度に、接続データに NTP サーバ ({{ic|DHCP4_NTP_SERVERS}}) に関する情報が含まれていると、接続固有のオーバーレイ設定ファイルが {{ic|/etc/systemd/timesyncd.conf.d}} に書き込まれ、このファイルには、提供された NTP サーバ (1台または複数) の情報が記述されます。提供された NTP サーバが含まれます。接続が停止される ({{ic|1=ACTION=down}}) と、接続固有のオーバーレイファイルは削除されます。systemd-timesyncd の設定が変更されるたびに、サービスは再起動され、更新された設定を取得します。NetworkManager で 2つ以上の接続を並行して管理する場合、{{ic|up}}、{{ic|dhcp4-change}}、{{ic|dhcp6-change}}、そして {{ic|down}} アクションが任意の順序で来るかもしれないので、設定内の異なる NTP サーバ名が上書きされないように接続固有の設定ファイルを意図的に使用しています。<br />
<br />
== テスト ==<br />
<br />
NetworkManager アプレットはログイン時にロードされるようになっているので、ほとんどのユーザにとって追加の設定は必要ないはずです。以前のネットワーク設定を無効化し、ネットワークから切断されているならば、NetworkManager が動作するかどうかをテストできます。まず始めに、{{ic|NetworkManager.service}} を[[起動]]してください。<br />
<br />
一部のアプレットは、NetworkManager アプレットをアプリケーションメニューからロードできるようにするために、{{ic|.desktop}} ファイルを提供しています。デスクトップファイルが提供されていない場合は、アプレットを使用するためのコマンドを見つけるか、アプレットをロードするために一度ログアウトして再度ログインする必要があります。アプレットが開始されれば、DHCP サーバを使って自動設定によるネットワーク接続のポーリングが開始されるでしょう。<br />
<br />
[[awesome]] などの XDG 非互換のウィンドウマネージャで GNOME のアプレットを開始するには:<br />
<br />
nm-applet --sm-disable &<br />
<br />
固定 IP アドレスの場合は、NetworkManager にそのことを伝えなければなりません。手順としては通常、アプレットを右クリックし、'接続を編集する' ('Edit Connections') などのような項目を選択します。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== Wi-Fi パスワードの暗号化 ===<br />
<br />
デフォルトでは、NetworkManager はパスワードを平文で {{ic|/etc/NetworkManager/system-connections/}} 内の設定ファイルに保存します。保存されているパスワードを表示するには、以下のコマンドを使ってください:<br />
<br />
# grep -r '^psk=' /etc/NetworkManager/system-connections/<br />
<br />
パスワードは root ユーザからファイルシステムでアクセス可能であり、さらに GUI (例: {{ic|nm-applet}}) を通して設定にアクセスできるユーザからもアクセス可能です。<br />
<br />
パスワードは、平文ではなく、キーリングの中で暗号化された形で保存するのが望ましいです。しかし、これの欠点は、それぞれのユーザで接続をセットアップしなけれならないことです。<br />
<br />
キーリングを読み書きするために、利用可能なシークレットエージェントが存在していなければなりません。いかのどれかを使用できます:<br />
<br />
* {{ic|nmcli}} で {{ic|--ask}} オプションを使う。<br />
* [[#フロントエンド]] に挙げられているグラフィカルインターフェイス<br />
<br />
シークレットエージェントが利用できないと、{{ic|no secrets: No agents were available for this request.}} というエラーで認証が失敗します。<br />
<br />
==== GNOME Keyring を使う ====<br />
<br />
以下の方法を使うには、GNOME Keyring のキーリングデーモンが開始されていて、キーリングがアンロックされている必要があります。<br />
<br />
さらに、全ユーザのパスワードを保存しないように NetworkManager を設定する必要があります。GNOME の {{Pkg|network-manager-applet}} を使って、ターミナルから {{ic|nm-connection-editor}} を実行し、ネットワーク接続を選択し、''編集'' (''Edit'') をクリックし、''Wi-Fi セキュリティー'' (''Wi-Fi Security'') タブを選択し、パスワード入力欄の右のアイコンをクリックして、''このユーザーのパスワードのみ保存する'' (''Store the password only for this user'') にチェックを入れてください。<br />
<br />
==== KDE Wallet を使う ====<br />
<br />
KDE の {{Pkg|plasma-nm}} を使う場合、アプレットをクリックし、右上の ''設定'' アイコンをクリックし、ネットワーク接続を選択し、''一般設定'' (''General configuration'') タブを選択し、''すべてのユーザはこのネットワークに接続可能'' (''All users may connect to this network'') のチェックを外してください。このオプションにチェックが入っていると、たとえキーリングデーモンが実行されていたとしても、パスワードが平文で保存されてしまいます。<br />
<br />
以前このオプションにチェックが入っていて、後にチェックを外した場合、ファイルからパスワードを消すために {{ic|reset}} オプションを使用する必要がある場合があります。あるいは、接続を削除し、再度セットアップしてください。<br />
<br />
=== Wi-Fi でインターネット接続を共有する ===<br />
<br />
数クリックでインターネット接続 (例: 3G、有線) を共有することができます。ただし、[[ファイアウォール]]はインターネット共有を妨害する場合があることに注意してください。<br />
<br />
AP モードをサポートする Wi-Fi カードが必要になります。詳細は [[ソフトウェアアクセスポイント#Wi-Fi デバイスが AP モードをサポートしていること]] を見てください。<br />
<br />
接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。<br />
<br />
共有された接続を作成してください:<br />
<br />
* アプレットをクリックし、''新規 Wi-Fi ネットワークを作成'' (''Create new wireless network'') を選んでください。<br />
* ウィザードに従ってください (WPA2 以上を選んでください。パスワードは 8 文字以上にしてください。さもないと失敗します)。<br />
* Wi-Fi モードとして[[Fedora:Features/RealHotspot|ホットスポット]]かアドホックを選択してください。<br />
<br />
これで、次回必要になるときのために接続は保存されます。<br />
<br />
{{Note|Android はアドホックネットワークへの接続をサポートしていません。Android と接続を共有するには、インフラストラクチャモードを使用してください (つまり、Wi-Fi モードを "ホットスポット" に設定する)。}}<br />
<br />
=== イーサネットでインターネット接続を共有する ===<br />
<br />
シナリオ: デバイスが Wi-Fi 経由でインターネットに接続されていて、イーサネットで他のデバイスとインターネット接続を共有したいと考えている場合。<br />
<br />
要件:<br />
<br />
* 接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージと {{Pkg|nm-connection-editor}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。<br />
* インターネットに接続されたデバイスとその他のデバイスが適切なイーサネットケーブルで接続されていること (これは通常、間をクロスオーバーケーブルやスイッチで繋ぐことを意味します)。<br />
* インターネット共有が[[ファイアウォール]]によってブロックされていないこと。<br />
<br />
手順:<br />
<br />
* ターミナルから {{ic|nm-connection-editor}} を実行してください。<br />
* 新しいイーサネット接続を追加してください。<br />
* 何かわかりやすい名前を付けてください。例えば "Shared Internet"。<br />
* "IPv4 設定" ("IPv4 Settings") を開いてください。<br />
* "メソッド:" ("Method:") で "他のコンピューターへ共有" ("Shared to other computers") を選択してください。<br />
* 保存<br />
<br />
これで、NetworkManager の有線接続に "Shared Internet" という新しいオプションができたはずです。<br />
<br />
=== cron ジョブやスクリプトでネットワークが立ち上がっているか確認する ===<br />
<br />
{{Out of date|''nm-tool'' は NetworkManager から削除されました [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/bb8c75bd536d4f8fb80a4366025a279078f0ec81]。代わりに ''nmcli'' を使用するべきです。}}<br />
<br />
一部の ''cron'' ジョブではネットワークが立ち上がっている必要があり、ネットワークが落ちている状態でそのようなジョブを実行したくない場合があります。そうするには、NetworkManager の ''nm-tool'' にクエリして、ネットワークの状態をチェックする '''if''' テストを追加してください。このテストは、何らかのインターフェイスが立ち上がっていれば成功し、インターフェイスが全て落ちている場合は失敗します。これは、ある時は有線接続されていて、ある時は無線で、またある時はネットワークから切断されているようなノート PC で便利です。<br />
<br />
{{bc|<nowiki><br />
if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then<br />
# ネットワークがオンラインの時に実行したいコード<br />
else<br />
# ネットワークがオフラインの時に実行したいコード (注記: この部分と上の else は任意です)<br />
fi<br />
</nowiki>}}<br />
<br />
これは、例えば F-Prot ウイルススキャナのシグネチャを更新するために ''fpupdate'' を実行する {{ic|cron.hourly}} で便利です。また、''nm-tool'' の出力の様々な部分を使えば、ネットワークを識別することもできます。例えば、アクティブなワイヤレスネットワークにはアスタリスクが付くので、ネットワーク名を grep して、その後でアスタリスクを grep しますs。<br />
<br />
=== ブート時にシークレットを使ってネットワークに接続する ===<br />
<br />
デフォルトでは、NetworkManager はシークレットを要求するネットワークにはブート時に自動的に接続しません。NetworkManager では、そのようなネットワークは、そのネットワークをデフォルトで使用するユーザがログインした後にのみ、接続されるからです。この動作を変更するには、以下を行ってください:<br />
<br />
# パネルの {{ic|nm-applet}} のアイコンを右クリックし、"接続を編集する" を選択し、Wi-Fi タブを開いてください。<br />
# 使いたい接続を選択し、編集ボタンをクリックしてください。<br />
# “Connect Automatically” と “Available to all users” のボックスにチェックを入れてください。<br />
# 加えて、"Wi-Fi Security" タブで "Store password for all users (not encrypted)" が選択されていることを確認してください。<br />
<br />
ログアウトし、ログインし直せば完了です。<br />
<br />
=== OpenConnect で KWallet 内のパスワードを使う ===<br />
<br />
接続時にユーザ名とパスワードを入力することはできますが、{{Pkg|plasma-nm}} 0.9.3.2-1 から、[[KWallet]] から直接 OpenConnect のユーザ名とパスワードを取得することが可能になりました。<br />
<br />
"KDE Wallet Manager" を開き、"Network Management|Maps" で対象の OpenConnect VPN 接続を見つけてください。"Show values" をクリックし、認証情報を以下の形式で "VpnSecrets" に入力してください (''ユーザ名'' と ''パスワード'' の部分は適宜置き換えてください):<br />
<br />
form:main:username%SEP%''ユーザ名''%SEP%form:main:password%SEP%''パスワード''<br />
<br />
次回の接続時に、ユーザ名とパスワードが "VPN secrets" ダイアログボックスに入力されるはずです。<br />
<br />
=== 特定のデバイスを無視する ===<br />
<br />
NetworkManager で特定のデバイスを無視し、そのデバイスに対してはアドレスとルート (route) の設定を試みないようにすることが望ましい場合があります。{{ic|/etc/NetworkManager/conf.d/unmanaged.conf}} で以下のオプションを使うことで、MAC またはインターフェイス名によって特定のデバイスを無視することができます:<br />
<br />
[keyfile]<br />
unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0<br />
<br />
ファイルを編集したら、{{ic|nmcli general reload}} を root として実行してください。その後、NetworkManager があなたの設定を変更することなく、インターフェイスを構成できるようになっているはずです。<br />
<br />
=== MAC アドレスのランダム化を設定する ===<br />
<br />
{{Note|1=(安定した) リンク接続[https://bbs.archlinux.org/viewtopic.php?id=220101]や、MAC アドレスに基づいてデバイスを制限したりネットワーク容量に制限を設けているネットワークへの接続には、MAC アドレスのランダム化を無効化する必要がある場合があります。}}<br />
<br />
MAC アドレスのランダム化は、本物の MAC アドレスをネットワークに開示しないことで、プライバシーを向上させることができます。<br />
<br />
NetworkManager は2種類の MAC アドレスランダム化をサポートしています: スキャン中のランダム化とネットワーク接続におけるランダム化です。どちらのモードも、{{ic|/etc/NetworkManager/NetworkManager.conf}} を変更するか、{{ic|/etc/NetworkManager/conf.d/}} 内に別の設定ファイルを作成することで設定できます (前者は NetworkManager によって上書きされる場合があるので、後者が推奨されます)。<br />
<br />
Wi-Fi スキャン中のランダム化はデフォルトで有効化されていますが、以下の行を {{ic|/etc/NetworkManager/NetworkManager.conf}} か {{ic|/etc/NetworkManager/conf.d}} 内の別の設定ファイルに追加することで無効化することができます:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=<br />
[device]<br />
wifi.scan-rand-mac-address=no<br />
}}<br />
<br />
ネットワーク接続における MAC アドレスランダム化は、無線インターフェイスとイーサネットインターフェイスで別々のモードを設定することができます。モードに関する詳細は [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ GNOME のブログ記事]を参照してください。<br />
<br />
MAC アドレスランダム化に関して、最も重要なモードは {{ic|stable}} と {{ic|random}} です。{{ic|stable}} は、新しいネットワークに接続した時にランダムな MAC アドレスを生成し、そのネットワークと MAC アドレスを永続的に関連付けます。これはつまり、そのネットワークに接続すると毎回同じ MAC アドレスが使用されることを意味します。それとは対照的に、{{ic|random}} は、ネットワークに接続する度に、そのネットワークが新しかろうが既知であろうが、新しい MAC アドレスを生成します。{{ic|/etc/NetworkManager/conf.d}} 内に設定ファイルを追加してこの MAC アドレスランダム化を設定することができます:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=<br />
[device-mac-randomization]<br />
# "yes" は既にスキャンにおけるデフォルトです。<br />
wifi.scan-rand-mac-address=yes<br />
<br />
[connection-mac-randomization]<br />
# 全てのイーサネット接続に対して MAC をランダム化する<br />
ethernet.cloned-mac-address=random<br />
# 各 Wi-Fi に対してランダムな MAC を生成し、それらを関連付ける。<br />
wifi.cloned-mac-address=stable<br />
}}<br />
<br />
詳細は [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ GNOME ブログ記事]を参照してください。<br />
<br />
=== IPv6 プライバシー拡張を有効にする ===<br />
<br />
[[IPv6#NetworkManager]] を参照してください。<br />
<br />
=== 接続ごとに一意の DUID を設定する ===<br />
<br />
DHCPv6 Unique Identifier (DUID) は、DHCPv6 クライアントが DHCPv6 サーバに対して自身を識別するために使用する値です。NetworkManager は3種類の DUID をサポートしています:<br />
<br />
* DUID-UUID ([[RFC:6355|RFC 6355]]): Universally Unique IDentifier (UUID) から生成されます。<br />
* DUID-LL ([[RFC:3315|RFC 3315]]): リンク層アドレス (別名 MAC アドレス) から生成されます。<br />
* DUID-LLT ([[RFC:3315|RFC 3315]]): リンク層アドレスとタイムスタンプから生成されます。<br />
<br />
NetworkManager の内部 DHCP クライアントが使用されている場合 (デフォルト)、machine-id ({{ic|/etc/machine-id}}) から生成されたグローバルで永続的な DUID-UUID で自身を識別します。これは、すべての接続が同じ UUID を共有することを意味し、プライバシーの侵害となる可能性があります。<br />
<br />
幸いなことに、NetworkManager は、接続の stable-id とホストごとの一意のキーから派生した、接続ごとの一意の DUID を提供できます。{{ic|/etc/NetworkManager/conf.d}} 内に次の設定を追加することで、これを有効にすることができます:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/duid.conf|2=<br />
[connection]<br />
ipv6.dhcp-duid=stable-uuid<br />
}}<br />
<br />
{{ic|stable-ll}} および {{ic|stable-llt}} の値もサポートされています。詳細については、{{man|5|nm-settings|ipv6 setting}} の {{ic|dhcp-duid}} の説明を参照してください。<br />
<br />
=== 有線接続の操作 ===<br />
<br />
NetworkManager は、デフォルトで、有線イーサネット接続を検出するたびにそれぞれに対して接続プロファイルを生成します。接続を生成する時点では、利用可能なイーサネットアダプターがさらにあるかどうかはわかりません。そのため、最初の有線接続は "有線接続 1" となります。{{ic|no-auto-default}} ({{man|5|NetworkManager.conf}} を参照) を設定するか、単に削除することで、この接続を生成しないようにできます。そうすれば、NetworkManager はこのインターフェイスの接続を二度と生成しないように記憶します。<br />
<br />
また、接続を編集 (およびディスクに永続化) したり、削除したりすることもできます。NetworkManager は新しい接続を再生成することはありません。それから、名前を好きなものに変更することができます。この作業には {{Pkg|nm-connection-editor}} などを使うことができます。<br />
<br />
=== Wi-Fi バックエンドとして iwd を使用する ===<br />
<br />
{{Note|1=<nowiki/><br />
* {{ic|iwd.service}} を有効化したり、[[iwd]] を手動で構成したりしないでください。NetworkManager は自身で iwd を開始し、管理します。<br />
* ''iwd'' に切り替える前に、[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues?scope=all&utf8=%E2%9C%93&state=opened&search=iwd 既知の問題]を考慮してください。}}<br />
<br />
[https://iwd.wiki.kernel.org/networkmanager 実験的な iwd バックエンド]を有効化するには、{{Pkg|iwd}} を[[インストール]]してから、以下の設定ファイルを作成してください:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/wifi_backend.conf|2=<br />
[device]<br />
wifi.backend=iwd<br />
}}<br />
<br />
または、{{AUR|networkmanager-iwd}} をインストールすることもできます。これは、''iwd'' のみで動作する ''NetworkManager'' をビルドするように設定された修正パッケージです。主な違いは、''iwd'' が必要であり、''wpa_supplicant'' はビルド後にアンインストールできることです。<br />
<br />
{{Note|1=''iwd'' に切り替えた後、[https://iwd.wiki.kernel.org/networkmanager#converting_network_profiles 既存の NetworkManager ネットワークプロファイルを変換する]必要がある場合があります。}}<br />
<br />
=== ネットワーク名前空間内で実行する ===<br />
<br />
ネットワーク名前空間内で NetworkManager を実行する場合 (たとえば、選択したアプリケーションで使用する必要がある特定のデバイスを管理する場合)、その名前空間に移動させる前にデバイスを落としてください:<br />
<br />
$ ip link set dev ''MY_DEVICE'' down<br />
$ ip link set dev ''MY_DEVICE'' netns ''MY_NAMESPACE''<br />
$ ip netns exec ''MY_NAMESPACE'' NetworkManager<br />
...<br />
$ ip netns exec ''MY_NAMESPACE'' killall NetworkManager<br />
<br />
そうしないと、NetworkManager は後で {{ic|device is strictly unmanaged}} エラーにより接続の確立に失敗します。<br />
<br />
=== VPN に自動的に接続する ===<br />
<br />
NetworkManager は、インターネットへの接続時に VPN に自動的に接続するように (ネットワーク毎に) 設定できます。VPN 接続自体は、GNOME の NetworkManager フロントエンドで追加できますが、VPN を自動的に使用するようにするには、{{ic|nmcli}} を使用しなければなりません。他のフロントエンドにはこの制限はない場合があります。<br />
<br />
まず、対象の VPN が全ユーザで利用可能であることを確認してください。GNOME では、{{ic|details}} タブ内のあるボックスにチェックを入れれば良いです。{{ic|Identity}} タブのパスワード入力欄内の右側にあるアイコンをクリックし、{{ic|Store the password for all users}} を選択してください。<br />
<br />
そして、VPN 接続の UUID を見つけ、インターネット接続の {{ic|connection.secondaries}} にその UUID を追加してください:<br />
<br />
# UUID=$(nmcli --get-values connection.uuid connection show ''VPN接続の名前'')<br />
# nmcli connection modify ''インターネット接続の名前'' connection.secondaries "$UUID"<br />
<br />
NetworkManager を再起動して、設定したインターネット接続に接続したら、自動的に VPN に接続されるようになっているはずです。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== セキュアな Wi-Fi ネットワークのパスワードプロンプトが表示されない ===<br />
<br />
セキュアな Wi-Fi ネットワークに接続しようとすると、パスワードのプロンプトが表示されず、接続が確立されません。これは、キーリングのパッケージがインストールされていない時に起こります。簡単な解決法は、{{Pkg|gnome-keyring}} をインストールすることです。パスワードを暗号化して保存したい場合は、[[GNOME Keyring]] に書かれてある指示に従い、''gnome-keyring-daemon'' をセットアップしてください。<br />
<br />
=== Network management disabled ===<br />
<br />
時々、NetworkManager を終了したときに pid (state) ファイルが削除されずに {{ic|Network management disabled}} というメッセージが表示されることがあります。これが発生した場合は、そのファイルを手動で削除してください:<br />
<br />
# rm /var/lib/NetworkManager/NetworkManager.state<br />
<br />
=== 内蔵 DHCP クライアントに関する問題 ===<br />
<br />
内臓の DHCP クライアントを使用すると IP アドレスの取得に問題が発生する場合、他の DHCP クライアントを使用することを検討してください (手順は [[#DHCP クライアント]] を見てください)。この回避策は、eduroam などの巨大なワイヤレスネットワークにおける問題を解決するかもしれません。<br />
<br />
=== dhclient における DHCP の問題 ===<br />
<br />
DHCP での IP アドレス取得に問題が発生する場合、以下を {{ic|/etc/dhclient.conf}} に追加してみてください:<br />
<br />
interface "eth0" {<br />
send dhcp-client-identifier 01:''aa:bb:cc:dd:ee:ff'';<br />
}<br />
<br />
{{ic|''aa:bb:cc:dd:ee:ff''}} は NIC の MAC アドレスです。この MAC アドレスは {{Pkg|iproute2}} パッケージの {{ic|ip link show ''インターフェイス''}} コマンドを使って確認できます。<br />
<br />
=== 3G モデムが検知されない ===<br />
<br />
[[USB 3G モデム#NetworkManager]] を参照してください。<br />
<br />
=== ノートパソコンで WLAN をオフにする ===<br />
<br />
時々、ノートパソコンに付いているスイッチを使って Wi-Fi アダプタを無効化し、再び有効化しようとすると NetworkManager が機能しなくなることがあります。これは、しばしば ''rfkill'' の問題であることがあります。ドライバが ''rfkill'' にワイヤレスアダプタの状態について通知しているかどうか確認するには、以下のコマンドを使ってください:<br />
<br />
$ watch -n1 rfkill list all<br />
<br />
アダプタを切り替えた後にどれかの識別子がブロックされたままになる場合、手動でアンロックしてみることができます (X の部分は、上記のコマンドで得られた識別子の番号です):<br />
<br />
# rfkill event unblock X<br />
<br />
=== 固定 IP アドレスの設定が DHCP に戻る ===<br />
<br />
とある未解決のバグにより、デフォルトの接続を固定 IP アドレスに変更すると、{{ic|nm-applet}} が設定の変更を適切に保存せずに、自動 DHCP に戻ってしまいます。<br />
<br />
この問題を回避するには、{{ic|nm-applet}} でデフォルトの設定 (例: "Auto eth0") を編集し、接続名を変更 (例: "my eth0") し、"Available to all users" チェックボックスのチェックを外し、固定 IP アドレスの設定を好きに変更し、'''Apply''' をクリックしてください。これで、指定した名前で新しい接続が保存されます。<br />
<br />
そうしたら、デフォルトの接続に自動的に接続しないようにしたいと思うでしょう。そうするには、まず {{ic|nm-connection-editor}} を実行してください (root としてでは'''ありません''')。接続エディタで、デフォルトの接続 (例: "Auto eth0") を編集し、"Connect automatically" のチェックを外してください。'''Apply''' をクリックし、接続エディタを閉じてください。<br />
<br />
=== 通常ユーザとして接続を編集できない ===<br />
<br />
[[#PolicyKit のパーミッションをセットアップする]] を参照してください。<br />
<br />
=== 隠されたワイヤレスネットワークを削除する ===<br />
<br />
隠されたネットワークはワイヤレスの選択リストに表示されないので、GUI から削除することができません。以下のコマンドでそのようなネットワークを削除できます:<br />
<br />
# rm /etc/NetworkManager/system-connections/''SSID''<br />
<br />
これは、他の接続でも使えます。<br />
<br />
=== VPN が GNOME で動作しない ===<br />
<br />
GNOME を使用している時に NetworkManager で OpenConnect や vpnc の接続をセットアップすると、ダイアログボックスが表示されず、以下のエラーが {{ic|/var/log/errors.log}} に現れることがあります:<br />
<br />
localhost NetworkManager[399]: <error> [1361719690.10506] [nm-vpn-connection.c:1405] get_secrets_cb(): Failed to request VPN secrets #3: (6) No agents were available for this request.<br />
<br />
これは、GNOME NetworkManager Applet が、ダイアログスクリプトが {{ic|/usr/lib/gnome-shell}} にあると想定していることが原因です (NetworkManager のパッケージはダイアログスクリプトを {{ic|/usr/lib/networkmanager}} 内に置きます)。"一時的な" 修正として (このバグはしばらく前から存在しています)、以下のシンボリックリンクを作成してください:<br />
<br />
* OpenConnect の場合: {{ic|ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/}}<br />
* VPNC (つまり Cisco VPN) の場合: {{ic|ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/}}<br />
<br />
これは、他の NetworkManager VPN プラグインでも行う必要がある場合がありますが、上記が最も一般的です。<br />
<br />
=== ヨーロッパの可視的なワイヤレスネットワークに接続できない ===<br />
<br />
WLAN チップにはデフォルトの[[ネットワーク設定/ワイヤレス#規制範囲に従う|規制範囲]]が設定されています。アクセスポイントがその規制内で動作しない場合、そのネットワークに接続することはできません。これは簡単に解決できます:<br />
<br />
# {{Pkg|wireless-regdb}} を[[インストール]]してください。<br />
# {{ic|/etc/conf.d/wireless-regdom}} で適切な国名コードをアンコメントしてください。<br />
# システムを再起動してください。この設定はブート時にしか読み込まれないからです。<br />
<br />
=== ブート時の VPN への自動接続が機能しない ===<br />
<br />
この問題は、システム (つまり、root ユーザとして動作している NetworkManager) が VPN 接続を確立しようと試みたが、パスワードが特定のユーザの GNOME Keyring 内に保存されているためにアクセスできなかった場合に発生します。<br />
<br />
解決策は、[[#ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する]] の手順 2 で説明されている通りに、VPN のパスワードを平文で保存することです。<br />
<br />
{{ic|nm-applet}} GUI で新しい "auto-connect VPN" オプションを使用している場合は、自動接続するために 手順 1 で説明されているディスパッチャを使用する必要はありません。<br />
<br />
=== Systemd のボトルネック ===<br />
<br />
時が立つにつれてログファイル ({{ic|/var/log/journal}}) が膨大になってしまうことがあります。そうすると NetworkManager を使う場合にブートパフォーマンスに大きな影響を与えます。参照: [[systemd#少しづつ起動時間が長くなっている]]。<br />
<br />
=== 定期的なネットワーク接続断、遅延、パケットロス (WiFi) ===<br />
<br />
NetworkManager は2分ごとにスキャンを行います。<br />
<br />
一部の WiFi ドライバは、接続/アソシエーション中にベースステーションのスキャンを行うと問題が発生します。症状としては、VPN 接続断/再接続、パケットロス、ウェブページのロードに失敗してリフレッシュすると良くなるなどがあります。<br />
<br />
{{ic|journalctl -f}} を root として実行すると、スキャンが行われていることがわかります。以下のようなメッセージが定期的にログに現れます:<br />
<br />
NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))<br />
<br />
ローミングが重要でないならば、WiFi 接続プロファイルでアクセスポイントの BSSID をロックすることにより、定期的なスキャンの挙動を無効化することができます。<br />
<br />
=== Lenovo ラップトップ (IdeaPad、Legion など) で Wi-Fi をオンにできない ===<br />
<br />
これは、Wi-Fi ドライバがソフトブロックを誤って報告することによる、一部の Lenovo モデルにおける {{ic|ideapad_laptop}} モジュールの問題です。カードは依然として {{ic|netctl}} で操作できますが、NetworkManager などのマネージャーは機能しません。この問題が発生しているかどうかを確認するには、ハードウェアのスイッチをオンオフしたあとで {{ic|rfkill list}} の出力を確認し、ソフトブロックされ続けるかどうか確認してください。<br />
<br />
{{Accuracy|rfkill の問題を解決するには、{{ic|rfkill.default_state}} と {{ic|rfkill.master_switch_mode}} を使用してみてください ([https://docs.kernel.org/admin-guide/kernel-parameters.html kernel-parameters.html] を参照))。}}<br />
<br />
{{ic|ideapad_laptop}} モジュールを[[modprobe|アンロード]]すれば、この問題は解決するはずです。('''警告''': これにより、ラップトップのキーボードとタッチパッドも無効になる可能性があります!)<br />
<br />
=== ホスト名の送信をオフにする ===<br />
<br />
NetworkManager はデフォルトでホスト名を DHCP サーバに送信します。ホスト名の送信は、グローバルには無効化できず、接続毎にしか無効化できません ([https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/584 Issue #584])。<br />
<br />
特定の接続で DHCP サーバへのホスト名の送信を無効化するには、以下をネットワークの設定ファイルに追加してください:<br />
<br />
{{hc|/etc/NetworkManager/system-connections/''your_connection_file''|2=<br />
...<br />
[ipv4]<br />
dhcp-send-hostname=false<br />
...<br />
[ipv6]<br />
dhcp-send-hostname=false<br />
...<br />
}}<br />
<br />
=== nm-applet が i3wm で消える ===<br />
<br />
通知に {{ic|xfce4-notifyd.service}} を使用する場合は、そのユニットを[[編集]]して、以下を追加する必要があります:<br />
<br />
{{hc|/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf|2=<br />
[Service]<br />
Environment="DISPLAY=:0.0"<br />
}}<br />
<br />
デーモンをロードし直したら、{{ic|xfce4-notifyd.service}} を[[再起動]]してください。i3 を終了し、再び起動すると、アプレットがトレイに表示されているはずです。<br />
<br />
=== Unit dbus-org.freedesktop.resolve1.service not found ===<br />
<br />
{{ic|systemd-resolved.service}} が開始されていない場合、NetworkManager は D-Bus を使用して開始しようとし、失敗します:<br />
<br />
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")<br />
dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.<br />
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")<br />
<br />
これは、NetworkManager が {{man|5|NetworkManager.conf}} の {{ic|1=main.dns=}} 設定に関係なく、DNS 情報を [[systemd-resolved]] に送信しようとするためです。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/d4eb4cb45f41b1751cacf71da558bf8f0988f383]<br />
<br />
これは、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで無効にできます:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/no-systemd-resolved.conf|2=<br />
[main]<br />
systemd-resolved=false<br />
}}<br />
<br />
{{Bug|62138}} を参照してください。<br />
<br />
=== Secrets were required, but not provided ===<br />
<br />
ネットワークに接続しようとして以下のエラーが発生する場合:<br />
<br />
{{hc|$ nmcli device wifi connect ''SSID'' password ''パスワード''|<br />
Error: Connection activation failed: (7) Secrets were required, but not provided<br />
}}<br />
<br />
このエラーの原因となりうるものはたくさんあり、[[journal]] を読む必要があります ({{ic|-u NetworkManager}} で出力をフィルタしてください)。例えば、接続の確立に時間がかかりすぎると、NetworkManager はパスワードが正しくなかったと結論づけます:<br />
<br />
{{bc|<br />
NetworkManager[1372]: <warn> [1643991888.3808] device (wlan0): Activation: (wifi) association took too long<br />
NetworkManager[1372]: <info> [1643991888.3809] device (wlan0): state change: config -> need-auth (reason 'none', sys-iface-state: 'managed')<br />
NetworkManager[1372]: <warn> [1643991888.3838] device (wlan0): Activation: (wifi) asking for new secrets<br />
}}<br />
<br />
接続プロファイルを削除し、新しいプロファイルを作成してみてください:<br />
<br />
$ nmcli connection delete ''SSID''<br />
$ nmcli device wifi connect ''SSID'' password ''パスワード''<br />
<br />
また、MAC アドレスランダム化を無効化してみるのも良いでしょう:<br />
<br />
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=<br />
[device]<br />
wifi.scan-rand-mac-address=no<br />
}}<br />
<br />
=== iwd での WPA Enterprise 接続 ===<br />
<br />
[[#Wi-Fi バックエンドとして iwd を使用する|iwd バックエンド]]と NetworkManager で 'eduroam' などの WPA Enterprise ネットワークに接続しようとした際に、NetworkManager sで以下のエラーが発生します:<br />
<br />
Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connections must have IWD provisioning files)<br />
<br />
NetworkManager は WPA Enterprise ネットワークを設定できないことが原因です。なので、[[iwd#WPA Enterprise]] で説明されているように iwd の設定ファイル {{ic|/var/lib/iwd/''essid''.8021x}} を使って設定する必要があります。<br />
<br />
=== Failed to request VPN secrets ===<br />
<br />
以下のエラーが発生する場合:<br />
<br />
Failed to request VPN secrets #1: No agents were available for this request.<br />
<br />
パスワードが空であるか、[[#PolicyKit のパーミッションをセットアップする|PolicyKit のパーミッションをセットアップする]]必要があるかのどちらかです。<br />
<br />
=== OpenSSL の "ca md too weak" エラーで OpenVPN の接続に失敗する ===<br />
<br />
{{Pkg|openssl}} がバージョン3に更新されたため、レガシーな暗号化アルゴリズムで生成された証明書はデフォルトで拒否されます。このような設定で {{Pkg|networkmanager-openvpn}} を使用しようとすると、ログに次のエラーが記録される可能性があります:<br />
<br />
{{bc|<br />
nm-openvpn[14359]: OpenSSL: error:0A00018E:SSL routines::ca md too weak<br />
nm-openvpn[14359]: Cannot load certificate file /home/archie/.local/share/networkmanagement/certificates/my_issued_cert.crt<br />
nm-openvpn[14359]: Exiting due to fatal error<br />
}}<br />
<br />
正しいアプローチは、OpenVPN サーバの管理者に、より安全な証明書を生成して再発行してもらうことです。ただし、当面の回避策として、OpenVPN には {{ic|1=tls-cipher "DEFAULT:@SECLEVEL=0"}} が必要です。この設定は、プラグイン GUI からでは無理かもしれませんが、''nmcli'' からなら可能です。これとは別に、OpenSSL で''レガシー''なプロバイダを有効化する必要もあります。<br />
<br />
まず、以下のコマンドの出力から、問題のある VPN 接続の名前を取得してください:<br />
<br />
$ nmcli connection show<br />
<br />
接続の名前は ''vpn.example.com'' であると仮定します。以下のように ''nmcli'' を使ってください:<br />
<br />
$ nmcli connection modify vpn.example.com +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0<br />
<br />
変更は即座に {{ic|/etc/NetworkManager/system-connections/vpn.example.com.nmconnection}} に反映されるはずです。<br />
<br />
OpenSSL に関しては、[https://wiki.openssl.org/index.php/OpenSSL_3.0#Providers OpenSSL wiki] で説明されている通りに {{ic|/etc/ssl/openssl.cnf}} を編集してください。<br />
<br />
具体的には、{{ic|[provider_sect]}} セクションの最後に {{ic|1=legacy = legacy_sect}} を追加してください。{{ic|[default_sect]}} で {{ic|1=activate = 1}} のコメントを外してください。最後に、{{ic|1=activate = 1}} という行も含む新しいセクション {{ic|[legacy_sect]}} を追加してください。他のほとんどの既存の構成セクションを除外すると、最終結果は次のようになります:<br />
<br />
{{hc|/etc/ssl/openssl.cnf|2=<br />
openssl_conf = openssl_init<br />
<br />
[openssl_init]<br />
providers = provider_sect<br />
<br />
[provider_sect]<br />
default = default_sect<br />
legacy = legacy_sect<br />
<br />
[default_sect]<br />
activate = 1<br />
<br />
[legacy_sect]<br />
activate = 1<br />
}}<br />
<br />
最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL 設定を有効化してください。<br />
<br />
=== OpenSSL の "unsupported protocol" エラーで WPA Enterprise の接続の認証に失敗する ===<br />
<br />
{{Pkg|openssl}} がバージョン 3 に更新されたため、デフォルトで ''SSL 3、TLS 1.0、TLS 1.1、そして DTLS 1.0 はセキュリティレベル 0 でのみ動作する''ようになりました。それよりも低い標準しかサポートしていない Wi-Fi での認証は、ログに以下のエラーを吐いて失敗します:<br />
<br />
{{bc|<br />
wpa_supplicant[3320]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version<br />
wpa_supplicant[3320]: OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol<br />
wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed<br />
}}<br />
<br />
正しいアプローチは、WiFi の管理者に TLS 1.3 をサポートしてもらい、さらにオプションで TLS 1.0/1.1、DTLS 1.0、SSL 1-3 を含む低いセキュリティ標準のサポートを落としてもらうことです。しかし、当面の回避策として、TLS 1.0 をデフォルトで許可する方法は複数あります。一つは、手動で OpenSSL にパッチを当てるか、破壊的な変更をもとに戻すことです ([https://github.com/openssl/openssl/commit/7bf2e4d7f0c7ae19b7a8c416910886a7171e9820])。これは、OpenSSL レベル 1 を使用する他の全てのプログラムのセキュリティも低下してしまうため、推奨されません。代わりに、([https://bbs.archlinux.org/viewtopic.php?id=286417#p2104492 BBS#286417] で説明されているように) wpa_supplicant によって使用されるレベルを直接設定することができます。問題のある接続の {{ic|1=[802-1x]}} セクションで {{ic|1=phase1-auth-flags=32}} を設定することで、その接続のみを変更できます。これは GUI からは無理かもしれませんが、''nmcli'' でなら可能です。<br />
<br />
まず、以下のコマンドの出力から、問題のある Wi-Fi 接続の名前を手に入れてください:<br />
<br />
$ nmcli connection show<br />
<br />
接続名は ''Example WiFi'' であると仮定します。以下のように ''nmcli'' を使用してください:<br />
<br />
$ nmcli connection modify Example\ WiFi 802-1x.phase1-auth-flags 32<br />
<br />
変更は即座に {{ic|/etc/NetworkManager/system-connections/Example\ WiFi.nmconnection}} に反映されるはずです。<br />
<br />
最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL の設定を有効化してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://blogs.gnome.org/dcbw/2015/02/16/networkmanager-for-administrators-part-1/ NetworkManager for Administrators Part 1]<br />
* [[Wikipedia:ja:NetworkManager]]<br />
* [https://networkmanager.dev/ NetworkManager 公式ウェブサイト]<br />
<br />
{{TranslationStatus|NetworkManager|2023-08-18|785663}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A/%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9&diff=36657
ネットワーク設定/ワイヤレス
2024-03-27T22:50:35Z
<p>AshMyzk: /* LED の点滅を無効化する */ 訳を修正</p>
<hr />
<div>[[Category:無線ネットワーク]]<br />
[[Category:ネットワーク設定]]<br />
[[de:(W)LAN und Arch Linux]]<br />
[[en:Network configuration/Wireless]]<br />
[[pt:Network configuration (Português)/Wireless]]<br />
[[ru:Network configuration (Русский)/Wireless]]<br />
[[zh-hans:网络配置/无线网络配置]]<br />
{{Related articles start}}<br />
{{Related|ソフトウェアアクセスポイント}}<br />
{{Related|アドホックネットワーク}}<br />
{{Related|インターネット共有}}<br />
{{Related|ワイヤレスボンディング}}<br />
{{Related|ネットワークデバッグ}}<br />
{{Related|Bluetooth}}<br />
{{Related articles end}}<br />
<br />
ネットワーク設定に関するメインの記事は [[ネットワーク設定]] です。<br />
<br />
ワイヤレスネットワークの設定は2段階で行います; まずワイヤレスデバイスを使うために正しいドライバがインストールされているか確認し(インストールメディア上では利用できても、明示的にインストールする必要があります)、インターフェースを設定します。次に、ワイヤレス接続を管理する方法を選びます。この記事では両方をカバーしています。また、ワイヤレス管理ツールへの追加リンクもあります。<br />
<br />
[[#iw]] セクションでは {{Pkg|iw}} を使ってワイヤレスネットワークインターフェイス/ワイヤレス LAN を手動で管理する方法を説明しています。[[ネットワーク設定#ネットワークマネージャ]] セクションでは、ワイヤレスインターフェイスを自動的に管理する際に使用できるいくつかのプログラムについて説明しています。それらはすべてネットワークプロファイルのサポートを含んでおり(ノート PC のようにワイヤレスネットワークを頻繁に切り替える際に便利です)、それらのうち一部は GUI を含んでいます。<br />
<br />
== デバイスドライバ ==<br />
<br />
デフォルトの Arch Linux カーネルは''モジュール式''です、つまり、マシンハードウェアに必要なドライバの多くはハードドライブに置かれ、[[カーネルモジュール|モジュール]]として利用可能となります。起動時に、[[udev]] がハードウェアの一覧を作成し、対応するハードウェア用の適切なモジュール(ドライバ)をロードします。これにより、ネットワーク''インターフェイス''の作成が可能になります。<br />
<br />
一部のワイヤレスチップセットは、対応するドライバに加えてファームウェアも必要とします。多くのファームウェアイメージは、{{Pkg|linux-firmware}} パッケージによって提供されますが、プロプライエタリなファームウェアイメージは含まれていないため別途インストールする必要があります。[[#ドライバー・ファームウェアをインストールする]]で説明されています。<br />
<br />
{{Note|適切なモジュールが起動時に udev によって読み込まれない場合、[[カーネルモジュール#手動でモジュールを扱う|手動でロードしてください]]。udev がひとつのデバイスに対して2つ以上のドライバをロードしてしまうと、競合が起こり、設定に失敗してしまう場合があります。望まないモジュールを[[ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ドライバーの状態を確認する ===<br />
<br />
あなたのカード用のドライバーがロードされていることを確認するには、{{ic|lspci -k}} か {{ic|lsusb -v}} の出力を見てください (カードが PCI(e) と USB のどちらに接続されているかに依存します)。カーネルドライバーが使われているなら、例えば以下のように表示されるはずです:<br />
<br />
{{hc|$ lspci -k|<br />
06:00.0 Network controller: Intel Corporation WiFi Link 5100<br />
Subsystem: Intel Corporation WiFi Link 5100 AGN<br />
Kernel driver in use: iwlwifi<br />
Kernel modules: iwlwifi<br />
}}<br />
<br />
{{Note|カードが USB デバイスの場合、{{ic|<nowiki>dmesg | grep usbcore</nowiki>}} を実行すると {{ic|usbcore: registered new interface driver rtl8187}} のように表示されるはずです。}}<br />
<br />
また、{{ic|ip link}} コマンドの出力を確認し、ワイヤレスインターフェイスが作成されたことを確認してください。通常、ワイヤレス[[ネットワークインターフェイス]]の名前は "w" で始まります (例: {{ic|wlan0}}、{{ic|wlp2s0}})。そして、以下のコマンドでそのインターフェイスを up 状態にしてください:<br />
<br />
# ip link set ''interface'' up<br />
<br />
例えば、インターフェイスが {{ic|wlan0}} である場合、実行すべきコマンドは {{ic|ip link set wlan0 up}} となります。<br />
<br />
{{Note|<br />
* {{ic|RTNETLINK answers: Operation not possible due to RF-kill}} のようなエラーが発生する場合、デバイスがハードロックまたはソフトロックされていないことを確認してください。詳細は [[#Rfkill の注意点]] を参照してください。<br />
* {{ic|SIOCSIFFLAGS: No such file or directory}} というエラーメッセージが発生する場合、ほぼ確実に、あなたのワイヤレスチップセットが機能するにはファームウェアが必要であることを意味します。<br />
}}<br />
<br />
ファームウェアがロードされたことを示すカーネルメッセージを確認してください:<br />
<br />
{{hc|# dmesg {{!}} grep firmware|<br />
[ 7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm<br />
}}<br />
<br />
関連する出力がない場合、先ほど特定したモジュール (この例では {{ic|iwlwifi}}) の完全な出力メッセージを確認して、関連するメッセージやさらなる問題を見つけてください:<br />
<br />
{{hc|# dmesg {{!}} grep iwlwifi|2=<br />
[ 12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X<br />
[ 12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm<br />
[ 12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled<br />
...<br />
[ 12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B<br />
}}<br />
<br />
カーネルモジュールのロードに成功し、インターフェイスが up 状態になっている場合、次のセクションはスキップすることができます。<br />
<br />
=== ドライバー・ファームウェアをインストールする ===<br />
<br />
以下のリストを確認し、あなたのカードがサポートされているか確認してください:<br />
<br />
* [https://wireless.wiki.kernel.org/en/users/drivers 既存の Linux ワイヤレスドライバー]の表を参照し、サポートされているデバイスのリストを含む特定のドライバーのページにアクセスしてください。[https://wikidevi.wi-cat.ru/List_of_Wi-Fi_Device_IDs_in_Linux List of Wi-Fi Device IDs in Linux] もあります。<br />
* [https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported Ubuntu Wiki] には、ワイヤレスカードと、そのカードが Linux カーネルかユーザ空間のドライバによってサポートされているかどうかの良質な一覧が (ドライバ名も含めて) あります。<br />
* [http://linux-wless.passys.nl/ Linux Wireless Support] と Linux Questions の [https://web.archive.org/web/20110711100256/http://www.linuxquestions.org/hcl/index.php?cat=10 Hardware Compatibility List] (HCL) にも、カーネルフレンドリーなハードウェアの良質なデータベースがあります。<br />
<br />
注意点として、一部のベンダーは、異なるチップセットを含む製品を出荷しています (その製品の識別子が同じであるとしてもです)。(USB デバイスの場合) usb-id や (PCI デバイスの場合) pci-id のみが信頼できます。<br />
<br />
あなたのワイヤレスカードが上記のリストにあった場合、このページの [[#ドライバとファームウェアのトラブルシューティング]] サブセクションを見て下さい、特定のワイヤレスカードのドライバーやファームウェアのインストール情報が載っています。その後、また[[#ドライバーの状態を確認する|ドライバーの状態を確認]]してください。<br />
<br />
ワイヤレスハードウェアが上記のリストになかった場合、おそらくサポートしているのが Windows のみだと思われます (一部の Broadcom、3com など)。その場合、[[#ndiswrapper]] を使用してみてください。<br />
<br />
== ユーティリティ ==<br />
<br />
他のネットワークインターフェイスと同じように、ワイヤレスインターフェイスも {{Pkg|iproute2}} パッケージの ''ip'' でコントロールします。<br />
<br />
ワイヤレス接続は、ワイヤレス認証に [[wpa_supplicant]] や [[iwd]] を使用する[[ネットワークマネージャ]]を使うか、''wpa_supplicant'' や ''iwd'' を直接使うことによって、管理することができます。より低レベルな設定を行いたい場合や、レガシーなドライバやレガシーな認証方式を使用している場合には、{{Pkg|iw}} や非推奨の {{Pkg|wireless_tools}} を使用できます。<br />
<br />
=== iw と wireless_tools の比較 ===<br />
<br />
{| class="wikitable"<br />
! ソフトウェア !! パッケージ !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA/WPA2/WPA3 !! [[Archiso]] [https://gitlab.archlinux.org/archlinux/archiso/-/blob/master/configs/releng/packages.x86_64]<br />
|-<br />
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools]<sup>1</sup> || {{Pkg|wireless_tools}} || {{Yes}} || {{no}} || {{Yes}} || {{No}} || {{Yes}}<br />
|-<br />
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || {{Pkg|iw}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}}<br />
|}<br />
<br />
# 非推奨<br />
<br />
一部の古いドライバは WEXT しかサポートしていないことに注意してください。<br />
<br />
以下の表は ''iw'' と ''wireless_tools'' の比較可能なコマンドの概要です。さらなる例は [https://wireless.wiki.kernel.org/en/users/Documentation/iw/replace-iwconfig iw replaces iwconfig] を見てください。<br />
<br />
{| class="wikitable"<br />
! ''iw'' コマンド<br />
! ''wireless_tools'' コマンド<br />
! 説明<br />
|-<br />
| iw dev ''wlan0'' link<br />
| iwconfig ''wlan0''<br />
| リンクの状態を取得。<br />
|-<br />
| iw dev ''wlan0'' scan<br />
| iwlist ''wlan0'' scan<br />
| 利用可能なアクセスポイントをスキャン。<br />
|-<br />
| iw dev ''wlan0'' set type ibss<br />
| iwconfig ''wlan0'' mode ad-hoc<br />
| 動作モードを ''ad-hoc'' に設定。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid''<br />
| iwconfig ''wlan0'' essid ''your_essid''<br />
| 接続してネットワークを開く。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid'' 2432<br />
| iwconfig ''wlan0'' essid ''your_essid'' freq 2432M<br />
| 接続して指定したチャンネルのネットワークを開く。<br />
|-<br />
| rowspan="2" | iw dev ''wlan0'' connect ''your_essid'' key 0:''your_key''<br />
| iwconfig ''wlan0'' essid ''your_essid'' key ''your_key''<br />
| 16進数のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iwconfig ''wlan0'' essid ''your_essid'' key s:''your_key''<br />
| ASCII 文字のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iw dev ''wlan0'' set power_save on<br />
| iwconfig ''wlan0'' power on<br />
| 省電力機能を有効にする。<br />
|}<br />
<br />
== iw ==<br />
<br />
{{Note|<br />
* ほとんどのコマンドは [[ユーザーとグループ|root 権限]]で実行する必要があることに注意してください。通常ユーザーで実行すると、コマンドによっては (例: ''iwlist'') エラーを出さずに終了して正しい出力をしないため、混乱をきたすおそれが有ります。<br />
* ハードウェアや暗号化方式によっては、手順のいくつかは必要ありません。カードによってはアクセスポイントに関連付けをして IP アドレスを取得する前に、インターフェースの有効化やアクセスポイントのスキャニングが必要なことがあります。実験が必要かもしれません。例えば、WPA/WPA2 ユーザーは [[#関連付け]] の手順から直接ワイヤレスネットワークを有効化できます。}}<br />
<br />
このセクションに出てくる例ではあなたのワイヤレスデバイスを {{ic|''interface''}}、wifi のアクセスポイントを {{ic|''your_essid''}} と仮定しています。それぞれ適切な文字列に置き換えて下さい。<br />
<br />
=== インターフェイス名の取得 ===<br />
<br />
{{Tip|''iw'' ツールの [https://wireless.wiki.kernel.org/en/users/documentation/iw 公式ドキュメント] により多くのサンプルがあります。}}<br />
<br />
ワイヤレスインターフェイスの名前を取得するには:<br />
<br />
$ iw dev<br />
<br />
インターフェイス名は "Interface" という単語のあとに出力されます。例えば、インターフェイス名は {{ic|wlan0}} が一般的です。<br />
<br />
=== インターフェイスの状態の取得 ===<br />
<br />
リンクの状態を確認するには、次のコマンドを使ってください。<br />
<br />
$ iw dev ''interface'' link<br />
<br />
次のコマンドで tx/rx バイトの総量やシグナルの強さといった統計値をを取得することができます:<br />
<br />
$ iw dev ''interface'' station dump<br />
<br />
=== インターフェイスの有効化 ===<br />
<br />
{{Tip| 通常、この手順は不要です。}}<br />
<br />
カードによっては ''iw'' や ''wireless_tools'' を使う前にカーネルインターフェースをアクティブ化する必要があります:<br />
<br />
# ip link set ''interface'' up<br />
<br />
{{Note|{{ic|RTNETLINK answers: Operation not possible due to RF-kill}}のようなエラーが表示される場合、ハードウェアのスイッチが''オン''になっているか確認してください。詳細は [[#Rfkill の注意点]] を見てください。}}<br />
<br />
インターフェイスが立ち上がっているか確認するには、次のコマンドの出力を見て下さい:<br />
<br />
{{hc|$ ip link show ''interface''|<br />
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000<br />
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff<br />
}}<br />
<br />
{{ic|<BROADCAST,MULTICAST,UP,LOWER_UP>}} にある {{ic|UP}} がインターフェイスが立ち上がっていることを示しています。後ろにある {{ic|state DOWN}} は関係ありません。<br />
<br />
=== アクセスポイント検索 ===<br />
<br />
利用できるアクセスポイントを見るには:<br />
<br />
# iw dev ''interface'' scan | less<br />
<br />
{{Note|{{ic|Interface does not support scanning}} と表示される場合、おそらくファームウェアのインストールを忘れているはずです。''iw'' が root 権限で実行されていない時にもこのメッセージが表示されることがあります。}}<br />
<br />
{{Tip|住んでいる地域によっては、利用できるネットワークを全て表示するために[[#規制範囲に従う|規制範囲]]を正しく設定する必要があります。}}<br />
<br />
チェックするべきポイント:<br />
<br />
* '''SSID:''' ネットワークの名前。<br />
* '''Signal:''' は dBm 単位でワイヤレスの信号強度を報告します(例: -100 から 0)。負の数が 0 に近づくほど、信号の品質が良いことを表します。良質なリンクや低品質なリンクで報告された強度を観察することで、それぞれの範囲を知ることができます。<br />
* '''Security:''' 直接は報告されません、{{ic|capability}} から始まる行を見て下さい。{{ic|capability: ESS Privacy ShortSlotTime (0x0411)}} のように {{ic|Privacy}} が含まれている場合、そのネットワークは保護されています。<br />
** {{ic|RSN}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:IEEE 802.11i-2004|Robust Security Network]] プロトコル、別名 WPA2 によって保護されています。<br />
** {{ic|WPA}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:Wi-Fi Protected Access|Wi-Fi Protected Access]] プロトコルによって保護されています。<br />
** {{ic|RSN}} や {{ic|WPA}} ブロックには以下の情報が含まれていることがあります:<br />
*** '''Group cipher:''' 値は TKIP, CCMP, その両方, もしくはその他。<br />
*** '''Pairwise ciphers:''' 値は TKIP, CCMP その両方, もしくはその他。Group cipher と同じ値である必要はありません。<br />
*** '''Authentication Suites:''' 値は PSK, 802.1x, もしくはその他。家庭用ルーターでは、一般的に PSK になるでしょう (''つまり''パスフレーズ)。大学などでは、ログインとパスワードが必要な 802.1x スイートになると思われます。利用するためにはどのキーマネージメント (例: EAP) とカプセル化 (例: PEAP) が使われているか知る必要があります。詳しくは [[Wikipedia:Authentication protocol]] と関連記事を見て下さい。<br />
** {{ic|Privacy}} があるのに {{ic|RSN}} や {{ic|WPA}} ブロックがない場合、WEP が使われています。<br />
<br />
=== 動作モードの設定 ===<br />
<br />
ワイヤレスカードの正しい動作モードを設定する必要があるかもしれません。具体的に言うと、[[アドホックネットワーク|アドホック]]ネットワークに接続したい場合、動作モードを {{ic|ibss}} に設定する必要があります:<br />
<br />
# iw dev ''interface'' set type ibss<br />
<br />
{{Note|カードによっては、動作モードを変更するためにワイヤレスインターフェースを ''down'' させておく必要があるかもしれません ({{ic|ip link set ''interface'' down}})。}}<br />
<br />
{{Note|動作モードを AP に変更する間 ({{ic|iw ''interface'' set type ap}})、以下のようなエラーが発生するでしょう:<br />
You need to run a management daemon, e.g. hostapd,<br />
see https://wireless.wiki.kernel.org/en/users/documentation/hostapd<br />
for more information on how to do that.<br />
<br />
これは、動作モードを {{ic|__ap}} に変更することによりバイパス可能です ({{ic|iw ''interface'' set type __ap}})。<br />
}}<br />
<br />
=== アクセスポイントへの接続 ===<br />
<br />
暗号化方式によっては、使用するワイヤレスデバイスをアクセスポイントと関連付けて、暗号化キーを渡す必要があります:<br />
<br />
* '''暗号化なし''' {{bc|# iw dev ''interface'' connect "''your_essid''"}}<br />
* '''WEP'''<br />
** 16進数、または ASCII キーを使用する(WEP のキーは固定長なので、キーの形式は自動的に判別されます): {{bc|# iw dev ''interface'' connect "''your_essid''" key 0:''your_key''}}<br />
** 16進数、または ASCII キーを使用し、3番目に設定したキーをデフォルトとして指定する(キーは 0 からカウントされます。4 つまで可能です): {{bc|# iw dev ''interface'' connect "''your_essid''" key d:2:''your_key''}}<br />
* '''その他'''<br />
** ''iw'' は WEP のみを扱えます。他の暗号化スキームを使用して接続する場合、下記の [[#認証]] を見てください。<br />
<br />
どの方法を使用しても、正しく関連付けできたかどうかは以下で確認できます:<br />
<br />
# iw dev ''interface'' link<br />
<br />
== 認証 ==<br />
<br />
Linux で Wi-Fi 認証を行う方法としては主に [[wpa_supplicant]] と [[iwd]] があります。<br />
<br />
=== WPA2 Personal ===<br />
<br />
WPA2 Personal(別名: WPA2-PSK)は [[Wikipedia:Wi-Fi Protected_Access|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] や [[iwd]] を用いて WPA2 Personal ネットワークに認証したり、[[ネットワークマネージャ]]を用いて接続したりできます。ネットワークに認証しただけの場合、接続はまだ完全には機能せず、[[ネットワーク設定#固定 IP アドレス|手動]]または[[DHCP]]クライアントを用いて IP アドレスとルートを割り当てる必要があります。<br />
<br />
=== WPA2 Enterprise ===<br />
<br />
''WPA2 Enterprise'' は [[Wikipedia:Wi-Fi_Protected_Access|Wi-Fi Protected Access]] のモードの1つです。''WPA2 Personal'' よりも優れたセキュリティとキー管理を提供し、VLAN や [[wikipedia:Network Access Protection|NAP]] といった他のエンタープライズタイプの機能を提供します。しかし、ユーザの認証を処理するために [[wikipedia:RADIUS|RADIUS]] サーバと呼ばれる外部の認証サーバを必要とします。これは、ワイヤレスルータとアクセスポイント(AP)の他に何も必要とせず、すべてのユーザに対して1つのパスフレーズかパスワードを使用する Personal モードとは対照的です。<br />
<br />
Enterprise モードでは、ユーザはユーザ名とパスワード、もしくはデジタル証明書、もしくはその両方を用いて Wi-Fi ネットワークにログインできます。それぞれのユーザは動的でユニークな暗号鍵を持っているため、ワイヤレスネットワーク上のユーザからユーザへの盗聴防止や暗号強度の向上に役立ちます。<br />
<br />
このセクションでは、WPA2 Enterprise モードを用いてワイヤレスアクセスポイントに接続するための[[ネットワーク設定#ネットワークマネージャ|ネットワーククライアント]]の設定について説明します。アクセスポイントそのもののセットアップに関する情報は [[ソフトウェアアクセスポイント#RADIUS]] を見てください。<br />
<br />
{{Note|Personal モードでは要求された時に単にパスフレーズを入力する必要があるだけですが、Enterprise モードではより複雑なクライアントの設定が必要です。クライアントはおそらくサーバの CA 証明書を(EAP-TLS を使用する場合はユーザごとの証明書も)インストールし、手動でワイヤレスセキュリティと 802.1X 認証を設定する必要があるでしょう。}}<br />
<br />
プロトコル間の比較は[http://deployingradius.com/documents/protocols/compatibility.html この表]を見てください。<br />
<br />
{{Warning|クライアントがサーバの CA 証明書を確認せずに WPA2 Enterprise を使用することは可能ですが、常に確認すべきです。なぜなら、アクセスポイントの認証なしでは、接続が中間者攻撃の対象となる可能性があるからです。このようなことが起こりうる理由は、接続のハンドシェイク自体を暗号化することはできる一方、広く使用されているセットアップでは平文または簡単に破れる [[#MS-CHAPv2]] を使用してパスワード自体を送信するからです。ゆえに、クライアントはパスワードを悪意のあるアクセスポイントに送信するかもしれません。その結果、そのアクセスポイントは接続をプロキシすることができてしまいます。}}<br />
<br />
==== MS-CHAPv2 ====<br />
<br />
PEAP の MSCHAPv2 type-2 認証を要求する WPA2-Enterprise ワイヤレスネットワークは時々、{{Pkg|ppp}} パッケージに加えて {{Pkg|pptpclient}} パッケージを必要とします。しかし、[[netctl]] は ppp-mppe 無しでも動作するようです。いずれの場合でも、MSCHAPv2 は非常に脆弱であるため、使用は推奨されません。しかし、他の手段は通常選択肢になりません。<br />
<br />
==== eduroam ====<br />
<br />
[[Wikipedia:eduroam|eduroam]] は研究、高等教育、継続教育のユーザー向けの、WPA2 Enterprise ベースの国際ローミングサービスです。<br />
<br />
{{Note|1=<nowiki/><br />
* このセクションにある如何なるプロファイルを適用する前に'''始めに'''機関の接続の詳細を確認してください。プロファイル例は機能することもセキュリティ要件を満たすことも保証されません。<br />
* 接続プロファイルを暗号化せずに保存する場合、root として {{ic|chmod 600 ''profile''}} を実行して、ファイルへの読み込みアクセスを root アカウントに制限することを推奨します。<br />
<br />
* NetworkManager での認証が失敗し続ける場合、[https://bbs.archlinux.org/viewtopic.php?pid=2104709#p2104709] で説明されているように {{ic|1=phase1-auth-flags=32}} を設定してみてください。<br />
* eduroam における接続問題が回避策と共に [[wpa_supplicant#eduroam などの MSCHAPv2 接続の問題]] 章で説明されています。<br />
<br />
}}<br />
<br />
{{Tip|[[NetworkManager]] 向けの設定は [https://cat.eduroam.org/ eduroam Configuration Assistant Tool] で生成できます。このツールは、{{Pkg|python}} と {{Pkg|dbus-python}} を必要とします。}}<br />
<br />
==== 手動/自動 セットアップ ====<br />
<br />
* [[wpa_supplicant#高度な使用方法|wpa_supplicant]] は、設定ファイルを直接編集するか CLI/GUI フロントエンドを使用することで設定できます。また、DHCP クライアントと組み合わせて使うことができます。接続の詳細を設定するには {{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} の例を見てください。<br />
* [[iwd#WPA Enterprise]]<br />
* [[NetworkManager]] は、''nmcli'' や ''nmtui''、[[NetworkManager#フロントエンド|グラフィカルなフロントエンド]]を使用して WPA2 Enterprise プロファイルを作成できます。<br />
* [[ConnMan]] は、ネットワークに[[ConnMan#Wi-Fi|接続]]する前に、別の設定ファイルを必要とします。詳細は {{man|5|connman-service.config}} と [[ConnMan#eduroam に接続]] を見てください。<br />
* [[netctl]] は、{{ic|1=WPAConfigSection=}} に含まれるブロックを通して wpa_supplicant の設定をサポートします。詳細は {{man|5|netctl.profile}} を見てください。<br />
: {{Note|特殊な引用符の規則が適用されます。{{man|5|netctl.profile|SPECIAL QUOTING RULES}} を見てください。}}<br />
: {{Tip|{{ic|WPAConfigSection}} に {{ic|1='ca_cert="/path/to/special/certificate.cer"'}} の行を追加することでカスタムの証明書を指定できます。}}<br />
<br />
=== WPA3 Personal ===<br />
<br />
WPA3 Personal (別名 WPA3-SAE) は、[[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] と [[iwd]] の両方が WPA3 Personal をサポートしています。<br />
<br />
=== WPA3 Enterprise ===<br />
<br />
WPA3 Enterprise は [[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] (バージョン 2:2.10-8 以降) は、WPA3 Enterprise をサポートしています。{{Bug|65314}} を参照してください。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 規制範囲に従う ===<br />
<br />
[[wikipedia:IEEE_802.11#Regulatory_domains_and_legal_compliance|規制範囲(regdomain)]] は、ワイヤレスハードウェアの動作が FCC や ETSI、他の組織により定められた地域の法律に準拠するようにワイヤレスドライバを設定する際に用いられます。規制範囲では [[wikipedia:ISO_3166-1_alpha-2|ISO 3166-1 alpha-2 国名コード]]を使用します。例えば、米国は "US"、中国は "CN"、日本は "JP" となります。<br />
<br />
規制範囲は、どのワイヤレスチャネルが利用できるかに関与します。2.4GHz 帯で許可されているチャネルは、米国では 1~11、日本では 1~14、他の殆どの国では 1~13 です。5Ghz 帯では、許可されるチャネルの規則は非常に複雑です。どちらの場合でも、より詳細な情報は[[wikipedia:List_of_WLAN_channels|この WLAN チャネルのリスト]]を見てください。<br />
<br />
規制範囲はまた、ワイヤレスデバイスから放射される電波の[[wikipedia:Equivalent_isotropically_radiated_power|実効輻射電力(EIRP)]]の制限にも関与します。これは送信パワー(Tx Power)から算出され、[[wikipedia:DBm|dBm/mBm (1dBm=100mBm) または mW (対数スケール)]]により測られます。2.4Ghz 帯では、米国とカナダでは最大が 30dBm、ヨーロッパのほとんどの地域では 20dBm、その他の地域では 20dBm~30dBm です。通常、5Ghz 帯では、最大値はより低く規定されます。より詳細な情報は [https://git.kernel.org/cgit/linux/kernel/git/linville/wireless-regdb.git/tree/db.txt wireless-regdb] を見てください(EIRP の dBm 値はそれぞれの行の2番めのカッコの中にあります)。<br />
<br />
規制範囲の設定を誤ると便利である場合があります(例えば、チャネルが混雑している時に未使用のチャネルを利用できたり、送信パワーを増やして送信範囲を広げたり)。しかし、地域の法律に違反したり、他の無線機器と干渉する可能性があるので、'''推奨されません'''。<br />
<br />
{{Pkg|wireless-regdb}} が[[インストール]]されていれば、カーネルは規制範囲のデータベースを直接読み込みます。直接読み込むため、セキュリティ上の理由により、カーネルは {{ic|CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS}} を yes に設定して、データベースの暗号検証を有効化してあるべきです。これは Arch のカーネルには有効化されていますが、他のカーネルを使用していたり自分でコンパイルしている場合、これを確認するべきです。さらなる情報は[http://docker.hd-wireless.com/Support/WifiRegulatoryDomainsinLinux このガイド]{{Dead link|2023|05|06|status=401}}で見られます。<br />
<br />
regdomain を設定するには、{{Pkg|wireless-regdb}} をインストールし、再起動してください。そして、{{ic|/etc/conf.d/wireless-regdom}} を編集し、適切なドメインをアンコメントしてください。<br />
<br />
現在の規制範囲を一時的に日本に設定するには:<br />
<br />
# iw reg set JP<br />
<br />
情報を見るには:<br />
<br />
$ iw reg get<br />
<br />
{{Note|デバイスが国名コード "00" に設定されている場合があります(これは "world regulatory domain" で、一般的な設定が含まれています)。この設定を解除できない場合、以下で説明されているように設定を確認してください。}}<br />
<br />
しかし、規制範囲を設定しても設定が変わらない場合があります。一部のデバイスは、デバイスの制限を規定する firmware/EEPROM で規制範囲が設定されています。これは、ソフトウェアでは[https://wiki.openwrt.org/doc/howto/wireless.utilities#iw 制限を増やすことしかできず]、制限を減らすことができないことを意味します。例えば、中国のデバイスはソフトウェアで米国の規制範囲に設定できるでしょうが、中国では EIRP の最大値が 20dBm と規定されているので、デバイスは米国の最大 EIRP である 30dBm で送信を行うことはできません。<br />
<br />
例えば、Atheros デバイスのファームウェアで規制範囲が設定されているかどうか確認するには:<br />
<br />
# dmesg | grep ath:<br />
<br />
他のチップセットの場合、"EEPROM" や "regdomain"、デバイスドライバの名前で検索すると良いかもしれません。<br />
<br />
規制範囲が正しく変更されたかどうかを確認し、利用可能なチャネル数や許可されている送信パワーを確認するには:<br />
<br />
$ iw list | grep -A 15 Frequencies:<br />
<br />
[[wpa_supplicant]] でも、{{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} の {{ic|1=country=}} 行で規制範囲を設定できます。<br />
<br />
[https://wireless.wiki.kernel.org/en/developers/documentation/cfg80211 cfg80211] カーネルモジュールでも[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を追加することで特定の規制範囲を使用するように設定できます(例: {{ic|1=options cfg80211 ieee80211_regdom=JP}})。このモジュールオプションは [https://wireless.wiki.kernel.org/en/developers/regulatory#the_ieee80211_regdom_module_parameter 古い規制範囲の実装]から継承されたもので、最近のカーネルでは {{ic|iw}} や {{ic|wpa_supplicant}} のようなユーティリティから {{ic|nl80211}} を通して来たようなユーザスペースの規制ヒントとして振る舞います。<br />
<br />
=== Rfkill の注意点 ===<br />
<br />
多くのノート PC にはワイヤレスカードの電源を切るハードウェアボタン/スイッチがあります。しかし、カードがカーネルによってブロックされている場合があります。これは {{man|8|rfkill}} によって操作できます。現在の状態を確認するには以下のコマンドを使用してください:<br />
<br />
{{hc|$ rfkill|<br />
ID TYPE DEVICE SOFT HARD<br />
0 bluetooth hci0 unblocked unblocked<br />
1 wlan phy0 unblocked unblocked<br />
}}<br />
<br />
カードが ''hard-blocked'' である場合、ハードウェアボタン/スイッチを使ってカードをアンロックできます。カードが ''hard-blocked'' でなく、''soft-blocked'' である場合、以下のコマンドを使用してください:<br />
<br />
# rfkill unblock wlan<br />
<br />
{{Note|ハードウェアボタンを押すと、カードが ''hard-blocked'' と ''soft-unblocked'' の状態から ''hard-unblocked'' と ''soft-blocked'' の状態になることがあります(つまり、''soft-blocked'' のビットがなんであっても切り替わるということです)。これは {{ic|rfkill}} [[カーネルモジュール]]のいくつかのオプションを切り替えることで調整できます。}}<br />
<br />
ワイヤレスカードを切り替えるハードウェアボタンはベンダー固有の[[カーネルモジュール]]によって操作されます。これらは [https://lwn.net/Articles/391230/ WMI] モジュールであることが多いです。非常に新しいハードウェアモデルでは特に、最新の安定版カーネルでモデルが完全にサポートされていないことがあります。この場合、カーネルのバグトラッカーで情報を探し、まだ報告されていない場合は各ベンダーのカーネルモジュールのメンテナにモデルを報告することが役に立ちます。<br />
<br />
[https://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill] も参照してください。<br />
<br />
=== 省電力 ===<br />
<br />
[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==トラブルシューティング==<br />
<br />
このセクションには、ドライバやファームウェアに強く関連しない問題のトラブルシューティングの一般的なヒントを含んでいます。ドライバやファームウェアに関するトピックは次のセクション [[#ドライバとファームウェアのトラブルシューティング]] を見てください。<br />
<br />
=== 一時的にネットワークにアクセス ===<br />
<br />
ハードウェアに問題があるときに、インターネットに接続してソフトウェアをダウンロードしたりフォーラムでヘルプを得たい場合、Android に内蔵されている機能を使って USB ケーブルでインターネット共有をすることができます。詳しくは [[Android テザリング#USB テザリング]]を見て下さい。<br />
<br />
=== ログの取得 ===<br />
<br />
トラブルシューティングで一番初めにするべきなのはシステムのログファイルを解析することです。全部を手でパースしないために、新しいターミナル(コンソール)を開いて、接続を試行している間のカーネルメッセージを次のコマンドで見ると良いでしょう:<br />
<br />
$ dmesg -w<br />
<br />
ネットワーク管理にツールを使っている場合、systemd でも同じことができます:<br />
<br />
# journalctl -f<br />
<br />
特定の理由コードによる認証解除を伴うワイヤレスエラーがよく起こります。例えば:<br />
<br />
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)<br />
<br />
[http://www.aboutcher.co.uk/2012/07/linux-wifi-deauthenticated-reason-codes/ 理由コード]を見ることでヒントを得られるかもしれません。コントロールメッセージの [https://wireless.wiki.kernel.org/en/developers/documentation/mac80211/auth-assoc-deauth flowchart] を見ることも役に立つかもしれません。ジャーナルのメッセージはこれに従って出力されます。<br />
<br />
この記事にあるそれぞれのツールは詳細なデバッグ出力をするオプションを用意しているので、必要ならば、解析の第二段階としてそれを使うことができます。<br />
<br />
=== IP アドレスの取得に失敗する ===<br />
<br />
{{Out of date|''iwconfig'' は非推奨となりました。[[#iw と wireless_tools の比較]] を参照してください。}}<br />
<br />
* 有線インターフェイスでは IP アドレスを取得できるのに、無線インターフェイスでは出来ない場合、ワイヤレスカードの[[#省電力|省電力機能]]を無効にしてみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
* ''waiting for carrier'' の問題でタイムアウトエラーになる場合、特定のデバイスのチャンネルモードを {{ic|auto}} に設定する必要があるかもしれません:<br />
<br />
# iwconfig ''wlan0'' channel auto<br />
<br />
チャンネルを auto に変える前に、あなたのワイヤレスインターフェースが止まっていることを確認してください。変更が成功したら、インターフェースを立ち上げなおして次の手順に進んで下さい。<br />
<br />
=== IP アドレスは取得できるのにホスト解決ができない ===<br />
<br />
[[wikipedia:Captive_portal|Captive Portal]] が存在する可能性のある公共の無線ネットワークを使っている場合、Web ブラウザから(HTTPS ではなく)HTTP ページをクエリしていることを確認してください。一部の captive portal は HTTP のみをリダイレクトするためです。<br />
これが原因ではない場合、[[ドメイン名前解決|ドメイン名を解決できることを確認してください]]。DHCP を通して広告した DNS サーバを使用することが必須である場合があります。<br />
<br />
=== RTS や fragmentation のしきい値を設定する ===<br />
<br />
無線ハードウェアはデフォルトでは RTS と fragmentation を無効化しています。帯域幅を犠牲にスループットを高める方法は2つ存在します。近隣にアクセスポイントが多く存在する環境で、干渉によってタイムアウトが発生したり接続が途切れる場合、設定によって改善する可能性があります。<br />
<br />
パケットの断片化は fragmentation の閾値を越えたパケットを分割してスループットを改善します。最大値 (2346) にするとパケットが超過することはなくなるため断片化を無効化にするのと同義です。最低値 (256) にするとスループットは最大になりますが、かなり帯域幅を消費します。設定するには:<br />
<br />
# iw phy0 set frag 512<br />
<br />
[[Wikipedia:IEEE 802.11 RTS/CTS|RTS]] は RTS の閾値を越えるパケットを送信する前にアクセスポイントとハンドシェイクを実行することでスループットを改善します。最大値 (2347) にするとパケットが超過しなくなり RTS を無効化するのと同じになります。最低値 (0) では全てのパケットで RTS が有効になりますが、大抵の場合は無駄になります。<br />
<br />
# iw phy0 set rts 500<br />
<br />
{{Note|{{ic|phy0}} は {{ic|iw phy}} で確認できるワイヤレスデバイスの名前に置き換えてください。}}<br />
<br />
=== ランダムに切断する ===<br />
<br />
==== 原因 #1 ====<br />
<br />
[[Journal]] に {{ic|1=wlan0: deauthenticating from MAC by local choice (reason=3)}} と表示され Wi-Fi 接続が失われる場合は、おそらく Wi-Fi カードの省電力機能がアグレッシブすぎるのが原因です。無線カードの[[電源管理#ネットワークインターフェイス|省電力機能]]を無効化してみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
あなたのカードが {{ic|iwconfig wlan0 power off}} をサポートしていない場合は、BIOS の電源管理のオプションを確認してください。Lenovo W520 では BIOS にある PCI-Express の電源管理を無効化すると問題が解決します。<br />
<br />
==== 原因 #2 ====<br />
<br />
頻繁に切断が発生し、[[Journal]] で以下のようなメッセージが表示される場合:<br />
<br />
{{ic|1=ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting}}<br />
<br />
ルーターの設定でチャンネルの帯域を {{ic|20MHz}} に変更してみてください。<br />
<br />
==== 原因 #3 ====<br />
<br />
ノートパソコン (例: Thinkpad X200 シリーズ) に rfkill のハードウェアスイッチが付いている場合、スイッチの経年劣化や設計不良により、スイッチ (またはメインボードへの接続) がゆるくなってしまっている可能性があります。結果として、スイッチに触れたり、ノートパソコンをちょっと動かすだけで、ハードウェアによる無線のブロックが発生して、インターネットから切断されているのかもしれません。このような問題に対するソフトウェアによる解決方法は存在しません。電気仕掛けのスイッチなら、BIOS にスイッチを無効化するオプションが存在することがあります。機械式のスイッチの場合 (ほとんどのスイッチはそうです)、スイッチを壊してしまうというのが解決法になります: メインボードや wifi カードとの接触点をハンダ付けする、スイッチを糊で固める、塞ぐ、またはスクリューナットを使ってスイッチを固く締める、取り除いてしまう。<br />
<br />
==== 原因 #4 ====<br />
<br />
頻繁に切断したり接続が成功しない他の原因として、ルーターが仕様に合わない挙動をする、ルーターの設定が誤っている、他の無線デバイスによる干渉、などが考えられます。<br />
<br />
トラブルシューティングするには、まず認証なしでルーターに接続できないか試して下さい。<br />
<br />
それで動作する場合、WPA/WPA2 を再度有効にして、ルーターの設定を変更してみてください。例えば:<br />
* ルーターが(クライアントで使っている)無線デバイスと比べて相当に旧式である場合、ルーターを別のワイヤレスモードに設定して動作するかテストする<br />
* mixed-mode 認証を無効化 (例: WPA2 と AES、またはルーターが古い場合 TKIP)<br />
* "auto" チャンネル以外の固定/自由チャンネルを使ってみる (隣家のルーターが古くて干渉している可能性があります)<br />
* [[Wikipedia:Wi-Fi Protected Setup|WPS]] を無効化<br />
* ルータの 5Ghz チャネルから [[Wikipedia:List of WLAN channels#5 GHz (802.11a/h/j/n/ac/ax)|non-DFS (Dynamic Frequency Selection) チャネル]] に変更する。そのようなチャネルでは、近くの気象レーダとの干渉により接続が[https://wifinigel.blogspot.com/2018/05/the-5ghz-problem-for-wi-fi-networks-dfs.html 落ちたり、いきなり切り替わったり]する場合があります。<br />
* クライアントに 5Ghz と 2.4Ghz のどちらが良いかを選ばせるのではなく 2.4Ghz のみに設定してみる。(後者はスループットが低いですが、遠距離からの接続でも安定した接続を得られます)<br />
* {{ic|1=cfg80211.cfg80211_disable_40mhz_24ghz=1}} を指定して {{ic|40Mhz}} 周波数帯を無効化 (スループットは悪くなりますが衝突は起きにくくなります)<br />
* ルーターにサービス品質に関する設定がある場合、設定が完全であることを確認 (例: Wi-Fi Multimedia (WMM) は任意の QoS フロー制御の一部です。問題のあるルーターファームウェアは設定が有効になっていない場合も有効であるかのように見せかけてくることがあります)<br />
<br />
==== 原因 #5 ====<br />
<br />
一部のワイヤレスアダプタ(例: Qualcomm Atheros AR9485)では、DMA エラーによりランダムな接続断が起こる可能性があります:<br />
<br />
{{hc|# journalctl -xb|2=<br />
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400<br />
wlp1s0: authenticate with 56:e7:ee:7b:55:bc<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3)<br />
wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out<br />
}}<br />
<br />
可能な回避策は [https://docs.kernel.org/arch/x86/iommu.html Intel IOMMU driver (DMA)] を無効化することです。[[カーネルパラメータ]]に {{ic|1=intel_iommu=off}} を追加してください[https://bbs.archlinux.org/viewtopic.php?pid=1907446#p1907446]。<br />
<br />
{{Note|Intel IOMMU ドライバは一部の高度な仮想マシン機能において必要です。(例: PCI パススルー)}}<br />
<br />
==== 原因 #6 ====<br />
<br />
ワイヤレス接続のための {{ic|iwlwifi}} と {{ic|iwlmvm}} のあるデバイスを使用していて、Wi-Fi カードがバッテリー駆動時に消えたように見える場合、iwlmvm で省電力設定を変更することでこれを修正できます。<br />
<br />
{{ic|/etc/modprobe.d/iwlmvm.conf}} ファイルが存在しなければ作成し、以下の行を追加してください:<br />
<br />
{{hc|/etc/modprobe.d/iwlmvm.conf|2=<br />
options iwlmvm power_scheme=1<br />
}}<br />
<br />
{{ic|power_scheme}} の 1 という数値は iwlmvm が "常に有効" になります。利用可能なオプションは以下のとおりです:<br />
<br />
{| class="wikitable"<br />
! 値 !! 説明<br />
|-<br />
| 1 || 常に有効<br />
|-<br />
| 2 || バランス<br />
|-<br />
| 3 || 低パワー<br />
|}<br />
<br />
この修正法は [https://forums.debian.net/viewtopic.php?t=121696#p576208] で発見されました。<br />
<br />
==== 原因 #7 ====<br />
<br />
デバイスが長時間使用されなかった場合(例: ファイルサーバ)、省電力機能により接続断が発生する場合があります。これにより、受信トラフィックがブロックされ、接続が妨げられます。"interface" の省電力機能を無効化してみてください:<br />
<br />
# iw dev ''interface'' set power_save off<br />
<br />
udev ルールを作成してこれを起動時に行うこともできます。[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==== 原因 #8 ====<br />
<br />
メッシュネットワーク (WiFi6 など) に接続している時に接続が時々途切れ、以下のようなメッセージが出力される場合:<br />
<br />
{{hc|# journalctl -b|<br />
kernel: wlan0: disconnect from AP aa:bb:cc:dd:ee:ff for new auth to 11:22:33:44:55:66<br />
}}<br />
<br />
ローミングの問題が発生しています。接続の方法と実際の問題に応じて、以下のことができます:<br />
<br />
* ローミングが望ましくない場合、NetworkManager で BSSID (上記の {{ic|aa:bb:cc:dd:ee:ff}}) をロックする ([[NetworkManager#定期的なネットワーク接続断、遅延、パケットロス (WiFi)]] を参照)。<br />
* [[Wpa_supplicant#ローミング]] で {{ic|bgscan}} の設定を調整する。<br />
<br />
=== 規制範囲が間違っているために Wi-Fi ネットワークが認識されない ===<br />
<br />
コンピュータの Wi-Fi チャンネルがユーザーの居住国の規制範囲に一致していない場合、Wi-Fi ネットワークが認識されないことがあります。[[#規制範囲に従う]]を参照して設定を行ってください。<br />
<br />
==ドライバとファームウェアのトラブルシューティング==<br />
<br />
このセクションでは、一般的な方法とは異なる、特定のチップセットのカーネルモジュールと''ファームウェア''をインストールする方法を説明します。<br />
<br />
モジュールの動作についての一般的な情報は[[カーネルモジュール]]を見て下さい。<br />
<br />
=== Ralink/Mediatek ===<br />
<br />
==== rt2x00 ====<br />
<br />
Ralink のチップセット用の統合ドライバー ({{ic|rt2500}}, {{ic|rt61}}, {{ic|rt73}} などを置き換えます)。このドライバーは Linux カーネル 2.6.24 から含まれており、チップに合わせて適切なモジュールをロードするだけで問題なく使うことができます: {{ic|rt2400pci}}, {{ic|rt2500pci}}, {{ic|rt2500usb}}, {{ic|rt61pci}}, {{ic|rt73usb}} は {{ic|rt2x00}} モジュールもそれぞれ自動でロードします。<br />
<br />
このモジュールでサポートされているデバイスの一覧はプロジェクトの [https://web.archive.org/web/20150507023412/http://rt2x00.serialmonkey.com/wiki/index.php/Hardware ホームページ] で見ることができます。<br />
<br />
; 追加情報<br />
* カーネル 3.0 から、rt2x00 は次のドライバーを含んでいます: {{ic|rt2800pci}}, {{ic|rt2870usb}}。<br />
* カーネル 3.0 から、staging ドライバー {{ic|rt2860sta}} と {{ic|rt2870sta}} は mainline ドライバー {{ic|rt2800pci}} と {{ic|rt2800usb}} によって置き換えられました[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fefecc6989b4b24276797270c0e229c07be02ad3]。<br />
* デバイスによっては {{ic|iwpriv}} を使って様々なオプションを設定することができます。これらのオプションについては Ralink から入手できる [https://web.archive.org/web/20111105120212/http://web.ralinktech.com:80/ralink/Home/Support/Linux.html source tarballs] にまとめられています。<br />
<br />
==== rt3090 ====<br />
<br />
rt3090 を使っているデバイスには {{ic|rt2800pci}} ドライバを使うことができますが、うまく動作しないことがあります (例えば、時々 2Mb/s 以上の速度が出なくなります)。<br />
<br />
==== rt3290 ====<br />
<br />
rt3290 チップセットはカーネルの {{ic|rt2800pci}} モジュールによって認識されます。ただし、問題が起こることもあり、[https://bbs.archlinux.org/viewtopic.php?id=161952 そのような場合]はパッチがあてられた Ralink ドライバーに戻すと良いようです。<br />
<br />
==== rt3573 ====<br />
<br />
2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバが必要かもしれません。様々な製造会社がそれを使っています、[https://bbs.archlinux.org/viewtopic.php?pid=1164228#p1164228 Belkin N750 DB wireless 無線 USB アダプタ]のスレッドを見て下さい。<br />
<br />
==== mt7612u ====<br />
<br />
2014 年以降の新しい商号 Mediatek でリリースされている最新のチップセットです。AC1200 または AC1300 チップセットになります。[https://www.mediatek.com/products/broadbandWifi/mt7612u サポートページ] で Linux 用のドライバーがメーカーから公開されています。カーネル 5.5 より、同梱されている {{ic|mt76}} ドライバによりサポートされているはずです。<br />
<br />
=== Realtek ===<br />
<br />
Realtek のチップセットと仕様のリストは [https://wikidevi.wi-cat.ru/Realtek] で見られます。<br />
<br />
==== rtl8192cu ====<br />
<br />
このドライバーはカーネルに含まれていますが、多くのユーザーがネットワークのスキャンはできても接続が出来ないと報告しています。<br />
<br />
問題が起こる場合は {{AUR|8192cu-dkms}} パッケージで改善するかもしれません。<br />
<br />
==== rtl8723ae/rtl8723be ====<br />
<br />
メインラインの Linux カーネルには {{ic|rtl8723ae}} と {{ic|rtl8723be}} モジュールが含まれています。<br />
<br />
このカードの省電力機能についてエラーが発生することがあります。症状としては、ときどき上位のネットワークマネージャ ([[netctl]], [[NetworkManager]]) で認識されなくなり切断されます。このエラーは {{ic|dmesg -w}} や {{ic|journalctl -f}} を実行して省電力機能や {{ic|rtl8723ae}}/{{ic|rtl8723be}} モジュールに関連するメッセージを探すことで確認できます。この問題を解決するには、{{ic|1=fwlps=0}} [[カーネルモジュールパラメータ]]を使って、WiFi カードが自動的にスリープ状態にならないようにしてください。<br />
<br />
信号が弱い場合、デバイスにアンテナがひとつしか接続されておらず自動モードが機能していない可能性があります。{{ic|1=ant_sel=1}} や {{ic|1=ant_sel=2}} カーネルオプションでアンテナを強制的に設定することができます [https://bbs.archlinux.org/viewtopic.php?id=208472]。<br />
<br />
==== rtl88xxau ====<br />
<br />
Realtek の rtl8811au/rtl8812au/rtl8814au/rtl8821au チップセットは AC600 から AC1900 までの様々な USB アダプタ用に設計されています。いくつかのパッケージは様々なカーネルドライバを提供しており、これらは [[DKMS]]({{Pkg|dkms}} パッケージとインストールされているカーネルのヘッダファイル) を必要とします:<br />
<br />
{| class="wikitable"<br />
! チップセット || パッケージ || ノート<br />
|-<br />
| rtl8811au, rtl8812au, rtl8821au || {{AUR|rtl88xxau-aircrack-dkms-git}} || 8811au, 8812au, 8821au チップセット用の Aircrack-ng カーネルモジュール。モニタモードとインジェクションモードサポート。<br />
|-<br />
| rtl8812au || {{AUR|rtl8812au-dkms-git}} || rtl8812au '''のみ'''用の公式の最新 Realtek ドライババージョン。<br />
|-<br />
| rtl8811au, rtl8821au || {{AUR|rtl8821au-dkms-git}} || rtl8821au 用のより新しいドライババージョン。<br />
|-<br />
| rtl8814au || {{AUR|rtl8814au-dkms-git}} || おそらく rtl8813au に対しても機能する。<br />
|}<br />
<br />
==== rtl8811cu/rtl8821cu ====<br />
<br />
{{AUR|rtl8821cu-dkms-git}} は Realtek 8811cu と 8821cu チップセット用のカーネルモジュールを提供します。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{ic|8821cu}} がロードされていてもワイヤレスインターフェイスが見つからない場合、おそらく {{ic|rtw_RFE_type}} [[カーネルモジュールパラメータ]]を手動で指定する必要があります[https://forums.linuxmint.com/viewtopic.php?p=1913190&sid=68f2d6eff91cd47e184ae5a56385dc02#p1913190][https://github.com/brektrou/rtl8821CU/issues/83]。例えば {{ic|1=rtw_RFE_type=0x26}} や他の値を試してみると、機能するかもしれません。<br />
<br />
==== rtl8821ce ====<br />
<br />
{{AUR|rtl8821ce-dkms-git}} は Realtek 8821ce チップセット用のカーネルモジュールを提供します。このチップセットは Asus X543UA に搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{Note|1=Realtek により提供されているデフォルトの {{ic|rtl8821ce}} モジュールが Linux カーネル ≥ 5.9 で壊れており、接続品質が悪くなると報告されています[https://bbs.archlinux.org/viewtopic.php?id=273440]。上記の AUR バージョンを優先して使用するべきです。[https://github.com/tomaspinho/rtl8821ce#wi-fi-not-working-for-kernel--59 GitHub での文章] を見てください。デフォルトのカーネルドライバ ({{ic|rtw88_8821ce}}) が使用されているかどうかを確認するには {{ic|lspci -k}} を使用してください。もし使用されているのであれば、[[ブラックリスト]]にそれを追加し、システムを再起動してください。}}<br />
<br />
==== rtl8822bu ====<br />
<br />
{{AUR|rtl88x2bu-dkms-git}} は Realtek 8822bu チップセット用のカーネルモジュールを提供します。このチップセットは Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac、TP-Link Archer T3U アダプタに搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
==== rtl8xxxu ====<br />
<br />
サードパーティ製のモジュールをコンパイルすることでメインラインカーネルの {{ic|rtl8xxxu}} モジュールの問題を解決できる場合があります。ソースコードは [https://github.com/lwfinger?tab=repositories GitHub リポジトリ] に存在します。<br />
<br />
一部のドライバーは AUR の {{AUR|rtl8723bu-dkms-git}} パッケージなどでインストールできます。<br />
<br />
==== RTW88 ====<br />
<br />
RTW88 カーネルモジュールパッチセットは、最近カーネルメーリングリストに投稿されました。うまくいけば、メインストリームカーネルに導入されるでしょう。<br />
<br />
上流のカーネル、およびこのパッチセットが適用されたカーネルは、RTW88 チップセットのサポートを有効化するように設定・コンパイルされれば、ほとんどの RTW88 チップデバイスをサポートします。{{Pkg|linux-zen}} と {{AUR|linux-zen-git}} には両方このパッチが含まれており、パッケージングされたバージョンにはすでにビルド済みのモジュールが含まれています。<br />
<br />
このドライバは次をサポートします: 882BE, 8822BU, 8822CE, 8822CU, 8723DE, 8723DU, 8821CE, 8821CU。<br />
<br />
==== RTW89 ====<br />
<br />
RTW89 カーネルモジュールは、上流のカーネルにマージされており、新しい Realtek ワイヤレスチップセットのサポートを提供します。<br />
<br />
このドライバは次をサポートします: 8852AE, 8851BE, 8852BE, 8852CE。<br />
<br />
一部のコンピュータで接続が不安定になることがあります。特に最近の Lenovo と HP のモデルに多いようです。<br />
次の設定を用いて ASPM 関係の機能を無効にしてみてください。<br />
<br />
{{hc|/etc/modprobe.d/70-rtw89.conf|2=<br />
options rtw89_pci disable_aspm_l1=y disable_aspm_l1ss<br />
}}<br />
<br />
参考:<br />
* https://github.com/lwfinger/rtw89#option-configuration<br />
* https://github.com/lwfinger/rtw89/issues/275#issuecomment-1784155449<br />
<br />
=== Atheros ===<br />
<br />
[http://madwifi-project.org/ MadWifi チーム] によって、Atheros チップセットを使っているデバイス用に3つのモジュールがメンテナンスされています:<br />
<br />
* {{ic|madwifi}} は古い、旧式のドライバーです。2.6.39.1 から Arch のカーネルには含まれていません[https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/message/N5VBSKHSPV72HLNSZHPZXEBENOSB542C/]。<br />
* {{ic|ath5k}} はより新しいドライバーで {{ic|madwifi}} ドライバーを置き換えます。現在、チップセットによってはベターな選択肢ですが、全てのチップセットがサポートされているわけではありません(下を見て下さい)。<br />
* {{ic|ath9k}} はより新しいドライバです。より新しい Atheros チップセット用に作られています。802.11n 対応のチップは全てサポートしています。<br />
* {{ic|ath12k}} は最も新しいドライバです。Qualcomm Wi-Fi 7 (IEEE 802.11be) デバイス用の Linux ドライバです。ath12k は mac80211 を使用します。<br />
<br />
Atheros デバイス向けに他にも複数のドライバーが存在します。詳しくは [https://wireless.wiki.kernel.org/en/users/Drivers/Atheros#pcipci-eahb_driversrs Linux Wireless ドキュメント] を見て下さい。<br />
<br />
==== ath5k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath5k<br />
* [[Debian:ath5k]]<br />
<br />
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、{{ic|ath5k}} モジュールに {{ic|1=nohwcrypt=1}} オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくは[[カーネルモジュール#モジュールオプションを設定する]]を見て下さい。<br />
<br />
ラップトップによっては無線 LED インディケータが赤と青に点滅する問題が発生することがあります。この問題を解決するには、以下を実行して下さい:<br />
<br />
# echo none > /sys/class/leds/ath5k-phy0::tx/trigger<br />
# echo none > /sys/class/leds/ath5k-phy0::rx/trigger<br />
<br />
もしくは [https://bugzilla.redhat.com/show_bug.cgi?id=618232 このバグレポート] を見て下さい。<br />
<br />
==== ath9k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath9k<br />
* [[Debian:ath9k]]<br />
<br />
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。{{ic|ath9k}} モジュールに対して {{ic|1=nohwcrypt=1}} [[カーネルモジュールパラメータ]]を設定することでこれを修正することができる場合があります。<br />
<br />
{{Note|lsmod コマンドを使って使用しているモジュールの名前を確認して必要に応じて {{ic|ath9k}} を置き換えてください (例: ath9k_htc)。}}<br />
<br />
サポートと開発のための [https://web.archive.org/web/20201118232556/http://lists.ath9k.org/mailman/listinfo/ath9k-devel ath9k メーリングリスト] が存在します。<br />
<br />
==== ath12k ====<br />
<br />
参照:<br />
* https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/log/?h=ath-next<br />
* https://www.qualcomm.com/products/technology/wi-fi/fastconnect/fastconnect-7800<br />
<br />
# cd /lib/firmware/ath12k/WCN7850/hw2.0<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/board.bin<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/regdb.bin<br />
<br />
===== 省電力機能 =====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Documentation/dynamic-power-save Linux Wireless] には AR9280 よりも新しい Atheros 製の ath9k シングルチップでは動的な省電力機能が有効になると書かれていますが、一部のデバイス (例: AR9285) では {{Pkg|powertop}} を使って確認すると省電力機能が無効になっていることがわかります。そのような場合、手動で有効にしてください。<br />
<br />
ただし一部のデバイス (例: AR9285) では省電力機能を有効にすると以下のようなエラーが発生します:<br />
<br />
{{hc|# iw dev wlan0 set power_save on|<br />
command failed: Operation not supported (-95)<br />
}}<br />
<br />
解決策は、{{ic|ath9k}} モジュールに対して {{ic|1=ps_enable=1}} [[カーネルモジュールパラメータ]]を設定することです。<br />
<br />
=== Intel ===<br />
<br />
==== iwlegacy ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlegacy iwlegacy] は Intel の 3945, 4965 ワイヤレスチップのワイヤレスドライバーです。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。<br />
<br />
[[udev]] が自動でドライバーをロードするはずですが、ロードされないときは手動で {{ic|iwl3945}} か {{ic|iwl4965}} をロードしてください。詳しくは[[カーネルモジュール#ロード]]を見てください。<br />
<br />
信号品質が極端に悪い場合やネットワークに接続できない場合、802.11n を無効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwl4965.conf|2=<br />
options iwl4965 11n_disable=1<br />
}}<br />
<br />
==== iwlwifi ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi iwlwifi] は 5100AGN, 5300AGN, 5350AGN などの Intel の最新のワイヤレスチップのワイヤレスドライバーです。[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#Supported_Devices full list of supported devices] を見て下さい。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。{{AUR|linux-firmware-iwlwifi-git}}{{Broken package link|package not found}} パッケージをインストールすることで新しいバージョンを使用することができます。<br />
<br />
接続品質が悪いといった一般的なネットワーク接続の問題が起こる場合は、802.11n を無効にしてソフトウェア暗号を有効にしてみて下さい:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=1 swcrypto=1<br />
}}<br />
<br />
802.11n モードでアップリンクの速度が遅い (例: 20Mbps) 場合は、アンテナのアグリゲーションを有効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=8<br />
}}<br />
<br />
オプションの名前に惑わされてはいけません。値が {{ic|8}} に設定されている場合、無効化ではなくアンテナのアグリゲーションが再有効化されます [https://forums.gentoo.org/viewtopic-t-996692.html?sid=81bdfa435c089360bdfd9368fe0339a9] [https://bugzilla.kernel.org/show_bug.cgi?id=81571]。<br />
<br />
これで上手くいかない場合、無線アダプターの[[電源管理#ネットワークインターフェイス|省電力モード]]を切ってみて下さい。<br />
<br />
[https://ubuntuforums.org/showthread.php?t=2183486&p=12845473#post12845473 一部のユーザ]はこれでうまく行かないようです。[https://ubuntuforums.org/showthread.php?t=2205733&p=12935783#post12935783 あるユーザ]はルータの設定で N を無効化することにより解決しました。これが唯一の解決策であることは何度も知られています。上記の2つ目のリンクでは 5Ghz オプションに試す価値があると言及されています。<br />
<br />
802.11ax (WiFi 6) アクセスポイントがあり、ビーコンの検出や不安定な接続に関する問題がある場合、[https://www.intel.com/content/www/us/en/support/articles/000054799/network-and-i-o/wireless.html Intel Article 54799] を見てみてください。<br />
<br />
{{Note|{{ic|1=11n_disable=0}} を使うと 802.11ac も妨げられ、より遅いプロトコル(5Ghz 帯での 802.11a か 2.4Ghz 帯での 802.11b/g)での接続しかできなくなります。}}<br />
<br />
===== Bluetooth の共存 =====<br />
<br />
Bluetooth ヘッドセットを接続できない場合やダウンロード速度があまり出ない場合、Bluetooth の共存を無効化してみてください [https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#wi-fibluetooth_coexistence]:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi bt_coex_active=0<br />
}}<br />
<br />
{{Note|カーネルバージョン 5.8 より、{{ic|bt_coex_active}} と {{ic|sw_crypto}} モジュールオプションは、{{ic|iwlmvm}} カーネルモジュールにより操作されるハードウェアに対しては無効化されています。{{ic|iwldvm}} モジュールにより操作されるより古いハードウェアでは、上記のオプションはまだ有効です。<br />
}}<br />
<br />
===== ファームウェアの問題 =====<br />
<br />
ドライバがスタックトレースとエラーを出力する問題があり、これによりスタッタリングが発生する可能性があります。<br />
<br />
{{hc|# dmesg|2=<br />
Microcode SW error detected. Restarting 0x2000000.<br />
}}<br />
<br />
または、単に雑多な問題が発生する場合もあります (例: [https://web.archive.org/web/20221119172710/https://www.reddit.com/r/archlinux/comments/x0v5jj/rant_intel_wifi_firmwares_are_utter_garbage/ 5GHz での接続の問題、ランダムな接続断、復帰時に接続なし])。<br />
<br />
ファームウェアが問題の原因であることを確認するには、{{Pkg|linux-firmware}} パッケージを[[ダウングレード]]してみてください。<br />
<br />
確認が取れたら、バグのあるファームウェアファイルを移動して、古いバージョンが読み込まれるようにしてください (こうすることで、{{Pkg|linux-firmware}} を最新の状態にできます。{{Pkg|linux-firmware}} は Intel WiFi カード以外のファームウェアアップデートも提供するからです。):<br />
<br />
# for i in {64..73} ; do mv /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz.bak ; done<br />
<br />
アップデートのたびにこの手順を繰り返さないようにするために、{{ic|pacman.conf}} 内の {{ic|NoExtract}} 配列でワイルドカードを使って、該当するファイルのインストールをブロックしてください。[[pacman#インストールさせないファイルを設定]] を参照してください。<br />
<br />
===== Windows から起動するとアダプタが検出されない =====<br />
<br />
Windows のセッション終了後に Wifi アダプタが検出されない場合、Windows の'''高速スタートアップ'''機能が原因であるかもしれません(この機能はデフォルトで有効になっています)。[[Windows と Arch のデュアルブート#Windows 設定|高速スタートアップを無効化]]してみてください。[https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi#about_dual-boot_with_windows_and_fast-boot_enabled iwlwifi カーネルドライバ wiki にはこれのエントリがあります]。<br />
<br />
==== LED の点滅を無効化する ====<br />
<br />
{{Note|{{ic|iwlegacy}} ドライバと {{ic|iwlwifi}} ドライバの両方で以下のオプションは機能します。}}<br />
<br />
デフォルト設定ではモジュールの動作中 LED が点滅するようになっています。人によってはこれが鬱陶しく感じるかもしれません。Wi-Fi を使っている時に LED を固定するには、[[systemd-tmpfiles]] を使って下さい:<br />
<br />
{{hc|/etc/tmpfiles.d/phy0-led.conf|<br />
w /sys/class/leds/phy0-led/trigger - - - - phy0radio<br />
}}<br />
<br />
変更を適用するには、{{ic|systemd-tmpfiles --create phy0-led.conf}} を実行するか再起動してください。<br />
<br />
LED のトリガの全ての設定値を見るには:<br />
<br />
# cat /sys/class/leds/phy0-led/trigger<br />
<br />
{{Tip|{{ic|/sys/class/leds/phy0-led}} がない場合、{{ic|1=led_mode="1"}} [[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を使ってみて下さい。これは {{ic|iwlwifi}} と {{ic|iwlegacy}} ドライバの両方で有効なはずです。}}<br />
<br />
=== Broadcom ===<br />
<br />
[[Broadcom ワイヤレス]]を見て下さい。<br />
<br />
=== 他のドライバー・デバイス ===<br />
<br />
==== Tenda w322u ====<br />
この Tenda カードは {{ic|rt2870sta}} デバイスとして扱って下さい。[[#rt2x00]] を参照。<br />
<br />
==== orinoco ====<br />
カーネルパッケージの一部となっているので、別個インストールする必要はありません。<br />
<br />
いくつかの Orinoco チップセットは Hermes I/II です。{{ic|orinoco_cs}} の代わりに {{ic|wlags49_h1_cs}} を使うことで WPA サポートを得ることができます。このドライバーを使うには {{ic|orinoco_cs}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。<br />
<br />
==== prism54 ====<br />
<br />
このドライバー {{ic|p54}} はカーネルに含まれていますが、[https://wireless.wiki.kernel.org/en/users/drivers/p54#firmware このサイト] からあなたのカードに対応するファームウェアをダウンロードして {{ic|/usr/lib/firmware}} ディレクトリにインストールする必要があります。<br />
<br />
{{Note|古いドライバー {{ic|prism54}} が新しいドライバー ({{ic|p54pci}} や {{ic|p54usb}}) と衝突することがあります。{{ic|prism54}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。}}<br />
<br />
==== zd1211rw ====<br />
<br />
[https://sourceforge.net/projects/zd1211/ {{ic|zd1211rw}}] は ZyDAS ZD1211 802.11b/g USB WLAN チップセット用のドライバで、最近の Linux カーネルに含まれています。サポートされているドライバの一覧は [https://wireless.wiki.kernel.org/en/users/Drivers/zd1211rw/devices] を見て下さい。{{AUR|zd1211-firmware}} パッケージとして提供されているファームウェアを[[インストール]]することだけが必要です。<br />
<br />
==== hostap_cs ====<br />
<br />
[https://hostap.epitest.fi/ Host AP] は Intersil の Prism2/2.5/3 チップセットを使ったワイヤレス LAN カードの Linux ドライバです。ドライバは Linux カーネルに含まれています。<br />
<br />
{{Note|{{ic|orinico_cs}} と問題を発生することがあるので、[[カーネルモジュール#ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ndiswrapper ===<br />
<br />
Ndiswrapper は Linux で Windows のドライバーを使うためのラッパースクリプトです。Windows のドライバーに含まれる ''*.inf'' と ''.sys'' ファイルが必要です。<br />
<br />
{{Note|ドライバがあなたのアーキテクチャ (例: 32/64 ビット) に適合しているかも確認してください。}}<br />
<br />
{{Tip|''*.exe'' ファイルからこれらのファイルを展開する必要がある場合は、{{pkg|cabextract}} を使って下さい。}}<br />
<br />
ndiswrapper を設定するには以下の手順に従って下さい。<br />
<br />
# {{Pkg|ndiswrapper-dkms}} をインストールする。<br />
# ドライバを {{ic|/etc/ndiswrapper/}} にインストールする: {{bc|# ndiswrapper -i filename.inf}}<br />
# ndiswrapper にインストールされたドライバをすべて一覧表示する: {{bc|$ ndiswrapper -l}}<br />
# ndiswrapper に設定ファイルを {{ic|/etc/modprobe.d/ndiswrapper.conf}} に書き出させる: {{bc|# ndiswrapper -m<br># depmod -a}}<br />
<br />
ndiswrapper のインストールはほとんど終わりました。[[カーネルモジュール#モジュールの自動ロード|起動時にモジュールをロード]]できます。<br />
<br />
ndiswrapper がロードされるかテストしてください:<br />
<br />
# modprobe ndiswrapper<br />
# iwconfig<br />
<br />
''wlan0'' が表示されるはずです。問題が起こった場合は次のページを見て下さい:<br />
[https://sourceforge.net/p/ndiswrapper/ndiswrapper/HowTos/ ndiswrapper howto]、[https://sourceforge.net/p/ndiswrapper/ndiswrapper/FAQ/ ndiswrapper FAQ]。<br />
<br />
== 参照 ==<br />
<br />
* [https://wireless.wiki.kernel.org/ Linux Wireless プロジェクト]<br />
* [http://aircrack-ng.org/doku.php?id=install_drivers Aircrack-ng guide on installing drivers]<br />
* [https://wikidevi.wi-cat.ru Wireless Device Database Wiki] (このフォークは元の wiki が終了してから wi-cat.ru によってホストされています。これより完全ではないバージョンは: [http://en.techinfodepot.shoutwiki.com TechInfoDepot], [https://deviwiki.com/ deviwiki])<br />
* https://github.com/morrownr/USB-WiFi – 様々な Wi-Fi アダプタやチップセットに関する情報や、パフォーマンステスト、ドライバの情報、一般情報を含むサイト。<br />
<br />
{{TranslationStatus|Network configuration/Wireless|2024-02-22|800336}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88&diff=36656
Unified Extensible Firmware Interface/セキュアブート
2024-03-27T22:47:37Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ブートプロセス]]<br />
[[en:Unified Extensible Firmware Interface/Secure Boot]]<br />
[[zh-hans:Unified Extensible Firmware Interface (简体中文)/Secure Boot]]<br />
{{Related articles start}}<br />
{{Related|Arch ブートプロセス}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related|セキュリティ}}<br />
{{Related articles end}}<br />
<br />
[[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート|セキュアブート]]とは、[[UEFI]] 規格に含まれているセキュリティ機能であり、[[Arch ブートプロセス|プリブートプロセス]]に保護レイヤを追加するために設計されました。起動時の実行を許可/禁止されているバイナリの暗号署名されたリストを保持することにより、マシンのコアブートコンポーネント (ブートマネージャ、カーネル、initramfs) が改ざんされていないという信頼性を高めるのに役立ちます。<br />
<br />
なので、セキュアブートは、コンピュータ環境を[[セキュリティ|セキュアに保つ]]試みの一環、あるいはそれを補完するものであるとみなせます。[[dm-crypt/システム全体の暗号化|システムの暗号化]]のような他のソフトウェアのセキュリティ対策では簡単に[[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|カバー]]できない攻撃対象領域を減らしますが、完全に異なったものであり、それらに依存していません。セキュアブートは、独自の長所と[[wikipedia:Unified_Extensible_Firmware_Interface#Secure_Boot_2|短所]]を備えた、現在のセキュリティ慣例の一つの要素として独立しています。<br />
<br />
{{Note|Linux におけるセキュアブートについてのより詳細な概要は、[https://www.rodsbooks.com/efi-bootloaders/secureboot.html Rodsbooks' Secure Boot] の記事と[[#参照|他のオンライン上のリソース]] を参照してください。この記事では、Arch Linux でセキュアブートをセットアップする方法に焦点を置いています。}}<br />
<br />
== セキュアブートの状態を確認する ==<br />
<br />
=== OS の起動前 ===<br />
<br />
OS の起動前にセキュアブートの状態を確認するには、ファームウェアのセットアップ画面を見る必要があります。すでにマシンが起動済みであれば、ほとんどの場合再起動する必要があります。<br />
<br />
起動プロセス中に特別なキーを押すことでファームウェアのセットアップ画面にアクセスできます。それがどのキーかはファームウェアに依りますが、通常 {{ic|Esc}}、{{ic|F2}}、{{ic|Del}} のどれかです。もしかするとその他のファンクションキーかもしれません。ファームウェアによっては、どのキー押すべきかが起動プロセスの開始時に短い時間表示されます。通常、マザーボードのマニュアルにキーが記載されています。マシンの電源を入れたらすぐに(スクリーンが表示されるよりも前に)キーを押して、そのまま押し続ける必要があるかもしれません。<br />
<br />
ファームウェアのセットアップ画面に入ったら、意図せずに設定を変更してしまわないよう気をつけてください。通常、セットアップ画面の下部に案内指示や設定の短いヘルプがあります。セットアップ自体はいくつかのページから構成されているかもしれません。それらのページの中から正しい場所に移動する必要があります。設定は単に「セキュアブート」と表示されるかもしれません(これでオン/オフを設定できます)。<br />
<br />
=== OS の起動後 ===<br />
<br />
[[systemd]] を使用するシステム上では、[[systemd-boot]] でセキュアブートの状態を簡単に確認できます:<br />
<br />
{{Note|以下のコマンドを実行するために systemd-boot をブートマネージャとして使う必要はありません。これは他の *ctl systemd ユーティリティ (localectl, timedatectl...) と似たもので、設定に干渉しません。}}<br />
<br />
{{hc|$ bootctl|<br />
System:<br />
Firmware: UEFI 2.80 (American Megatrends 5.26)<br />
Firmware Arch: x64<br />
Secure Boot: enabled (user)<br />
TPM2 Support: yes<br />
Boot into FW: supported<br />
...<br />
}}<br />
<br />
ここでは、セキュアブートが (ユーザモードで) 有効化され強制されていることがわかります。他に取りうる値としては、Setup Mode の場合は {{ic|disabled (setup)}}、セキュアブートが無効化されている場合は {{ic|disabled (disabled)}}、ファームウェアにセキュアブートのサポートがない場合は {{ic|disabled (unsupported)}} があります。<br />
<br />
マシンがセキュアブートで起動されているかどうかを調べる他の方法は、以下のコマンドを使用することです:<br />
<br />
$ od --address-radix=n --format=u1 /sys/firmware/efi/efivars/SecureBoot*<br />
<br />
セキュアブートが有効化されている場合、このコマンドは5桁の数値を出力し、最後の値が {{ic|1}} となります。例えば:<br />
<br />
6 0 0 0 1<br />
<br />
しかし、機能が不十分なブートローダを使用している場合、(ファームウェアで有効になっている場合でも) カーネルがセキュアブートを検出できない場合があります。これは、システムの起動直後にカーネルのメッセージを確認することで確認できます:<br />
<br />
{{hc|# dmesg {{!}} grep -i secure|<br />
[ 0.013442] Secure boot disabled<br />
[ 0.013442] Secure boot could not be determined<br />
}}<br />
<br />
セキュアブートが検出された場合、カーネルメッセージは {{ic|Secure boot enabled}} となります。<br />
<br />
== インストールメディアを起動する ==<br />
<br />
公式の Arch インストールイメージはセキュアブートをサポートしていません ({{Bug|53864}})。Arch インストールメディアのセキュアブートサポートは {{ic|archlinux-2013.07.01-dual.iso}} で初めて追加されました。しかし、その後 {{ic|archlinux-2016.06.01-dual.iso}} で削除されました。その時、''prebootloader'' は、未署名の EFI バイナリを使用する {{pkg|efitools}} に置き換えられました。それ以降、公式のインストールメディアにセキュアブートのサポートが追加されることはありませんでした。<br />
<br />
インストールメディアをセキュアブートのシステムでブートするには、セキュアブートを無効化するか、イメージを変更して署名されたブートローダを追加する必要があります。<br />
<br />
[https://gitlab.archlinux.org/tpowa/archboot/-/wikis/Archboot-Homepage Archboot] イメージはインストールメディアでセキュアブートを使用する手段を提供します。<br />
<br />
=== セキュアブートを無効化する ===<br />
<br />
セキュアブートの機能は UEFI インターフェイスを通して無効化できます。ファームウェアの設定画面にアクセスする方法は [[#OS の起動前]] で説明されています。<br />
<br />
ホットキーが使用できず Windows が起動する場合、次の方法で強制的にファームウェア設定を開くように再起動できます (Windows 10 の場合): ''Settings > Update & Security > Recovery > Advanced startup (Restart now) > Troubleshoot > Advanced options > UEFI Firmware settings > restart''。<br />
<br />
一部のマザーボード (例: Packard Bell 製ノートパソコンや最近の Xiaomi ノートパソコン) では、管理者パスワードを設定しないとセキュアブートを無効化できません (無効化した後に管理者パスワードは消去できます)。[https://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable Rod Smith の Secure Boot 無効化に関する記事] も参照。<br />
<br />
=== インストールイメージを再パックする ===<br />
<br />
[[#ISO の再パック]] を見てください。<br />
<br />
=== インストールメディアを編集する ===<br />
<br />
[[USB インストールメディア]]を使用している場合、そのメディア上の [[EFI システムパーティション]]を手動で編集してセキュアブートのサポートを追加することが可能です。<br />
<br />
USB ドライブを挿入し、EFI システムパーティションを[[マウント]]してください:<br />
<br />
# mount /dev/disk/by-label/ARCHISO_EFI /mnt<br />
<br />
そして、[[#署名済みのブートローダを使う]] の指示に従って、署名済みのブートローダをインストールしてください。例えば、[[#PreLoader]] をインストールするには:<br />
<br />
{{bc|<br />
# mv /mnt/EFI/BOOT/BOOTx64.EFI /mnt/EFI/BOOT/loader.efi<br />
# cp /usr/share/preloader-signed/PreLoader.efi /mnt/EFI/BOOT/BOOTx64.EFI<br />
# cp /usr/share/preloader-signed/HashTool.efi /mnt/EFI/BOOT/HashTool.efi<br />
}}<br />
<br />
== セキュアブートを実現する ==<br />
<br />
''セキュアブート''の理想的なセットアップを実現するにはいくつか条件があります:<br />
<br />
# UEFI がほぼ信頼されていて(しかし、いくつかのよく知られた[[Wikipedia:Unified_Extensible_Firmware_Interface#Criticism|批判]]と脆弱性[https://www.uefi.org/sites/default/files/resources/UEFI%20Firmware%20-%20Security%20Concerns%20and%20Best%20Practices.pdf]がある)、必ず[[#セキュアブートを保護する|強力なパスワードで保護されている]]こと。<br />
# メーカー/サードパーティーのデフォルトの鍵は、セキュアブートのセキュリティモデルを大幅に弱化させることが判明しているので、使用しないこと。[https://habr.com/ru/post/446238/]<br />
# セキュアブートによって確立された信頼の鎖をブート中に維持して攻撃面を減らすために、マイクロコード(必要な場合)と initramfs を含む、ユーザ署名済み結合 [[EFISTUB]] カーネルイメージ(ブートマネージャ無し)を UEFI が直接ロードすること。<br />
# マシンへ物理的にアクセスできる誰かが、カーネルイメージの作成と署名プロセスで使用されるツールとファイルにアクセスしたり改ざんしたりできないようにするために、[[dm-crypt/システム全体の暗号化|ドライブの完全暗号化]]を使用すること。<br />
# [[TPM]] を使うことでさらに改善することができるかもしれませんが、ツールやサポートの問題がこれを難しくしています。<br />
<br />
シンプルかつ完全に自立したセットアップは [[#自分の鍵を使う]] で説明されています。一方、[[#署名済みのブートローダを使う]] では、サードパーティにより署名された中間ツールを使用します。<br />
<br />
[[GRUB]] ブートローダを使うには、セキュアブートを有効化する前に追加の手順が必要になります。詳細は [[GRUB#セキュアブートサポート]] を参照してください。<br />
<br />
=== 自分の鍵を使う ===<br />
<br />
{{Warning|プラットフォームの鍵をあなたの鍵で置き換えると、一部のマシン(ノート PC を含む)でハードウェアを文鎮化してしまう可能性があります。そうなると、修正するためにファームウェアの設定画面に入ることが不可能になります。これは、一部のデバイス (GPU など) の (ブート中に実行される) ファームウェア([[Wikipedia:OpROM|OpROMs]])が [[#Microsoft Windows|Microsoft 3rd Party UEFI CA 証明書を使って署名されている]]ためです。}}<br />
<br />
セキュアブートでは以下の鍵が使われます:<br />
<br />
; Platform Key (PK): トップレベル鍵<br />
; Key Exchange Key (KEK): Signature Database や Forbidden Signatures Database の更新に署名するのに使われる鍵<br />
; Signature Database (db): EFI バイナリに署名するのに使われる鍵やハッシュが含まれます<br />
; Forbidden Signatures Database (dbx): EFI バイナリを拒否リストに追加するために使われる鍵やハッシュが含まれます<br />
<br />
より詳細な説明は [https://blog.hansenpartnership.com/the-meaning-of-all-the-uefi-keys/ The Meaning of all the UEFI Keys] を見てください。<br />
<br />
セキュアブートをを使用するには最低でも '''PK''', '''KEK''', '''db''' 鍵が必要です。KEK, db, dbx 証明書は複数追加できますが、Platform Key はひとつしか使えません。<br />
<br />
Secure Boot を "User Mode" にすると、上位の鍵を使用してアップデートに署名しないかぎり鍵を更新できなくなります (''sign-efi-sig-list'' を使用)。Platform key は自分自身で署名することができます。<br />
<br />
==== 現在の変数をバックアップする ====<br />
<br />
新しい鍵を作成したり EFI 変数を変更したりする前に、現在の変数をバックアップしておくことを推奨します。そうすれば、エラーが発生した場合に変数を復元できます。<br />
<br />
主要なセキュアブートの変数4つを全てバックアップするには、{{Pkg|efitools}} パッケージを[[インストール]]し、以下のコマンドを実行してください:<br />
<br />
$ for var in PK KEK db dbx ; do efi-readvar -v $var -o old_${var}.esl ; done<br />
<br />
新しいコンピュータやマザーボードでこれらのコマンドを実行する場合、抽出される変数はおそらくマイクロソフトにより提供されたものでしょう。<br />
<br />
==== ファームウェアを "Setup Mode" にする ====<br />
<br />
Platform Key が削除されると、セキュアブートは Setup Mode になります。ファームウェアを Setup Mode にするには、ファームウェア設定ユーティリティに入り、証明書を削除/クリアするオプションを探してください。設定ユーティリティに入る方法は [[#OS の起動前]] で説明されています。<br />
<br />
==== sbctl でより簡単に行う ====<br />
<br />
[https://github.com/Foxboron/sbctl sbctl] は、セキュアブートをセットアップしたりファイルを署名したりするユーザーフレンドリーな方法です。<br />
<br />
{{Note|sbctl はすべてのハードウェアで動作するわけではありません。このツールがうまく動作するかはハードウェアの製造元に掛かっています。}}<br />
<br />
使用するには {{Pkg|sbctl}} を[[インストール]]してください。[https://github.com/Foxboron/sbctl#sbctl---secure-boot-manager upstream README] と {{man|8|sbctl}} も参照してください。<br />
<br />
===== キーを作成・登録する =====<br />
<br />
始める前に、ファームウェアの設定画面に行き、セキュアブートのモードを '''Setup mode''' にしてください。これはデバイスごとに異なります。<br />
<br />
ログインし直したら、セキュアブートの状態を確認してください:<br />
<br />
$ sbctl status<br />
<br />
sbctl がインストールされておらず、セキュアブートが無効化されていることを確認できるはずです。<br />
<br />
次に、カスタムのセキュアブート鍵を作成してください:<br />
<br />
# sbctl create-keys<br />
<br />
あなたの鍵を Microsoft の鍵と一緒に UEFI に登録してください:<br />
<br />
# sbctl enroll-keys -m<br />
<br />
{{Warning|一部のファームウェアは Microsoft の鍵で署名されており、セキュアブートが有効化されると Microsoft の鍵によって検証されます。デバイスが検証できないと、そのデバイスが文鎮化してしまう可能性があります。Microsoft の鍵抜きであなたの鍵を登録するには、{{ic|# sbctl enroll-keys}} を実行してください。ただし、あなたが何をしようとしているのか理解している場合に限り、これを行ってください。}}<br />
<br />
セキュアブートの状態を再び確認してください:<br />
<br />
$ sbctl status<br />
<br />
sbctl がインストールされているはずです。しかし、あなたの鍵でブートファイルを署名するまで、セキュアブートは動作しません。<br />
<br />
===== 署名 =====<br />
<br />
セキュアブートを動作させるために署名が必要なファイルを確認します:<br />
<br />
# sbctl verify<br />
<br />
次に、署名されていないすべてのファイルに署名します。通常、[[カーネル]]と[[ブートローダー]]には署名が必要です。例えば:<br />
<br />
# sbctl sign -s /boot/vmlinuz-linux<br />
# sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI<br />
<br />
署名が必要なファイルは、システムのレイアウト、カーネル、ブートローダーによって異なります。<br />
<br />
{{Tip|特に Windows とデュアルブートしている場合は、署名する必要のあるファイルが多い場合があります。[[sed]] を使えば、sbctl によるファイルの署名を全て済ませることができます:<br />
<br />
# sbctl verify {{!}} sed 's/✗ /sbctl sign -s /e'<br />
<br />
この例では、出力されたファイルのパスが {{ic|/boot}} からの相対パスであると仮定しています。<br />
}}<br />
<br />
これで完了です! システムを再起動し、ファームウェアの設定でセキュアブートをオンに戻してください。ブートローダーとOSがロードされれば、セキュアブートは機能しているはずです。以下のコマンドで確認してください:<br />
<br />
$ sbctl status<br />
<br />
===== pacman フックを使って自動的に署名する =====<br />
<br />
sbctl には、[[カーネル|Linux カーネル]]、[[systemd]]、[[ブートローダー]]がアップデートされたときに自動的にすべての新規ファイルを署名する [[pacman フック]]が同梱されています。<br />
<br />
{{Tip|[[Systemd-boot]] と {{ic|systemd-boot-update.service}} を使用している場合、[[ブートローダー]]は再起動後にしかアップデートされないので、sbctl の [[pacman フック]]はその新しいファイルを署名しません。回避策としては、{{ic|/usr/lib/}} 内の[[ブートローダー]]を直接署名すると良いかもしれません。{{ic|bootctl install}} と {{ic|update}} は自動的に、通常の ''.efi'' ではなく ''.efi.signed'' ファイルを認識し、[[ESP]] にコピーします。{{man|1|bootctl}} を参照してください。<br />
<br />
# sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi<br />
<br />
}}<br />
<br />
==== 手動による手順 ====<br />
<br />
===== efitools をインストールする =====<br />
<br />
以下のほぼ全てのセクションで、{{Pkg|efitools}} パッケージが[[インストール]]されている必要があります。<br />
<br />
===== 鍵の生成 =====<br />
<br />
鍵を生成するには以下の手順を行ってください:<br />
<br />
秘密鍵と複数の形式の証明書を作成する必要があります:<br />
<br />
; {{ic|.key}}: EFI バイナリと EFI 署名リストの署名に必要な PEM 形式の''秘密''鍵。<br />
; {{ic|.crt}}: {{man|1|sbsign}}、{{man|1|sbvarsign}}、{{man|1|sign-efi-sig-list}} で必要な PEM 形式の証明書。<br />
; {{ic|.cer}}: ファームウェアが使用する DER 形式の証明書。<br />
; {{ic|.esl}}: {{man|1|sbvarsign}} や {{man|1|efi-updatevar}}、''KeyTool''、ファームウェアのための EFI 署名リストの証明書。<br />
; {{ic|.auth}}: {{man|1|efi-updatevar}} や ''sbkeysync''、''KeyTool''、ファームウェアのための認証ヘッダが付いた EFI 署名リストの証明書 (つまり、署名済みの証明書アップデートファイル)。<br />
<br />
所有者を識別する [[Wikipedia:Globally unique identifier|GUID]] を作成してください:<br />
<br />
$ uuidgen --random > GUID.txt<br />
<br />
Platform key:<br />
<br />
$ openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days ''3650'' -subj "/CN=''my Platform Key''/" -out PK.crt<br />
$ openssl x509 -outform DER -in PK.crt -out PK.cer<br />
$ cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl<br />
$ sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth<br />
<br />
"User Mode" で Platform Key を削除できるようにするために空のファイルを署名してください:<br />
<br />
$ sign-efi-sig-list -g "$(< GUID.txt)" -c PK.crt -k PK.key PK /dev/null noPK.auth<br />
<br />
Key Exchange Key:<br />
<br />
$ openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days ''3650'' -subj "/CN=''my Key Exchange Key''/" -out KEK.crt<br />
$ openssl x509 -outform DER -in KEK.crt -out KEK.cer<br />
$ cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl<br />
$ sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth<br />
<br />
Signature Database key:<br />
<br />
$ openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days ''3650'' -subj "/CN=''my Signature Database key''/" -out db.crt<br />
$ openssl x509 -outform DER -in db.crt -out db.cer<br />
$ cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl<br />
$ sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth<br />
<br />
====== ヘルパースクリプト ======<br />
<br />
便利なヘルパースクリプトがこのトピックの参照メージの著者により提供されています[https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#creatingkeys]([[python]] が必要です)。簡単に編集されたバージョンも {{AUR|sbkeys}} としてパッケージングされています。<br />
<br />
スクリプトを使うには、安全な場所にフォルダを作成し(例えば、後で {{AUR|sbupdate-git}} を使って unified カーネルイメージを作成し署名する予定なのであれば {{ic|/etc/efi-keys/}})、スクリプトを実行してください:<br />
<br />
# mkdir /etc/efi-keys<br />
# cd !$<br />
# curl -L -O https://www.rodsbooks.com/efi-bootloaders/mkkeys.sh<br />
# chmod +x mkkeys.sh<br />
# ./mkkeys.sh<br />
''鍵に埋め込む Common Name を入力 (例: "Secure Boot")''<br />
<br />
これは様々な形式で必要なファイルを生成します。<br />
<br />
===== ファームウェアに鍵を登録する =====<br />
<br />
'''db'''、'''KEK'''、'''PK''' 証明書を登録するには、以下に述べる方法のうち1つを使ってください。<br />
<br />
{{Tip|'''dbx''' (forbidden signatures db) は空なので、以下の手順では省いても安全です。}}<br />
<br />
{{Warning|Platform Key を登録するとセキュアブートは "Setup Mode" から "User Mode" になります。なので、Platform Key は最後に登録する必要があります。}}<br />
<br />
====== sbkeysync を使う ======<br />
<br />
{{Pkg|sbsigntools}} をインストールしてください。そして、以下のディレクトリ構造を持つ {{ic|/etc/secureboot/keys}} ディレクトリを作成してください:<br />
<br />
/etc/secureboot/keys<br />
├── db<br />
├── dbx<br />
├── KEK<br />
└── PK<br />
<br />
例えば、以下のように:<br />
<br />
# mkdir -p /etc/secureboot/keys/{db,dbx,KEK,PK}<br />
<br />
そして、先程生成した ''.auth'' ファイルをそれぞれの場所にコピーしてください(例えば、{{ic|PK.auth}} は {{ic|/etc/secureboot/keys/PK}} へといった感じです)。<br />
<br />
{{ic|sbkeysync}} がシステムの UEFI に加える変更を確認したい場合は、以下を使用してください:<br />
<br />
# sbkeysync --keystore /etc/secureboot/keys --pk --dry-run --verbose<br />
<br />
最後に、{{ic|sbkeysync}} を使って鍵を登録してください。<br />
<br />
# sbkeysync --keystore /etc/secureboot/keys --verbose<br />
# sbkeysync --keystore /etc/secureboot/keys --verbose --pk<br />
<br />
{{Tip|<br />
* {{ic|sbkeysync}} で書き込みエラーが発生した場合、{{ic|sbkeysync}} のコマンドの前にまず {{ic|1=chattr -i /sys/firmware/efi/efivars/{PK,KEK,db}*}} を実行して、ファイルの属性を一時的に変更してください。これで、{{ic|efivars}} ディレクトリ内の EFI 鍵を書き込むことができます。{{man|1|chattr}} を参照してください。<br />
* {{ic|PK.auth}} で {{ic|permission denied}} エラーが発生する場合、次のコマンドでその鍵を登録できます: {{ic|efi-updatevar -f /etc/secureboot/keys/PK/PK.auth PK}}<br />
}}<br />
<br />
次の起動時に、UEFI は User Mode に戻り、セキュアブートポリシーを強制するはずです。<br />
<br />
====== ファームウェアのセットアップユーティリティを使う ======<br />
<br />
[[FAT]] でフォーマットされたファイルシステム ([[EFI システムパーティション]] が使えます) に '''{{ic|noPK.auth}} ファイルを除いて''' {{ic|*.cer}}、{{ic|*.esl}}、{{ic|*.auth}} をすべてコピーしてください。<br />
<br />
{{Warning|'''{{ic|noPK.auth}} を [[EFI システムパーティション]] (ESP) にコピーしないでください!''' そうしてしまうと、例えば誰かがあなたの PC を盗んだ場合に、その人が EFI セキュアブートファームウェア内のあなたの Platform Key を削除し、"Setup Mode" を有効化して、セキュアブート鍵(PK, KEK, db, dbx)をその人のものに置き換えることができてしまいます。これでは UEFI セキュアブートの意味がありません。あなただけが Platform Key を置き換えられるようにするべきです。なので、あなたの以外の人が {{ic|noPK.auth}} ファイルにアクセスできないようにするべきなのです。以上の理由から、{{ic|noPK.auth}} ファイルは、あなただけがアクセスできる秘密の安全な場所に保管してください。{{ic|noPK.auth}} ファイルの保管場所として安全なのは:<br />
<br />
* {{ic|KeyTool}} を使用している場合は、'''[[EFI システムパーティション]]のある外部 USB スティック'''。残念ながら、{{ic|KeyTool}} は、暗号化されていないストレージからしかファイルを読み出すことができません。<br />
* {{ic|sbkeysync}} を使っている場合は、[[保存データ暗号化|PC 上の暗号化されているストレージ]]。<br />
UEFI 仕様に従って PC 上の [[EFI システムパーティション]]は暗号化されていてはならず、(あなたの PC が盗まれた場合や、ハードドライブが抜き取られて他の PC に接続された場合に)他の PC 上でマウントかつ読み込み可能です。また、{{ic|noPK.auth}} ファイルをあなたの PC の [[ESP]] にコピーして、後で削除することも推奨されません。なぜなら、FAT32 の [[EFI システムパーティション]]上で削除されたファイルは、[[ファイルリカバリ#Testdisk と PhotoRec|PhotoRec のようなツールで復元できてしまう]]からです。<br />
}}<br />
<br />
ファームウェアのセットアップユーティリティを起動し、'''db'''、'''KEK'''、'''PK''' 証明書を登録してください。ファームウェアのインターフェイスは様々です。鍵を登録する方法の例は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#setuputil Replacing Keys Using Your Firmware's Setup Utility] を見てください。<br />
<br />
使用するツールがサポートしていれば、''.cer'' よりも ''.auth'' と ''.esl'' を使用することを推奨します。<br />
<br />
====== KeyTool を使う ======<br />
<br />
{{ic|KeyTool.efi}} は {{Pkg|efitools}} パッケージに含まれています。それを ESP にコピーしてください。鍵を登録した後にこのツールを使うには、{{ic|sbsign}} で署名してください。<br />
<br />
# sbsign --key db.key --cert db.crt --output ''esp''/KeyTool-signed.efi /usr/share/efitools/efi/KeyTool.efi<br />
<br />
ファームウェアのセットアップユーティリティかブートローダか [[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]]を使って {{ic|KeyTool-signed.efi}} を起動して、鍵を登録してください。<br />
<br />
KeyTool メニューオプションの説明は [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html#keytool Replacing Keys Using KeyTool] を見てください。<br />
<br />
===== EFI バイナリに署名する =====<br />
<br />
''セキュアブート''を有効化(つまり "User Mode" に)すると、署名した EFI バイナリ(例: アプリケーション、[[Unified Extensible Firmware Interface#UEFI ドライバ|ドライバ]]、[[Unified カーネルイメージ]])しか起動できなくなります。<br />
<br />
====== sbsigntools を使う ======<br />
<br />
{{Pkg|sbsigntools}} を[[インストール]]して、{{man|1|sbsign}} で EFI バイナリに署名してください。<br />
<br />
{{Tip|<br />
* バイナリが署名されたかどうか確認したり署名を一覧表示したりするには: {{ic|$ sbverify --list ''/path/to/binary''}}。<br />
* [[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトで rEFInd EFI バイナリを署名し、[[ESP]] へ db 証明書と一緒にコピーできます。手順は [[rEFInd#自分の鍵を使う]] を見てください。<br />
}}<br />
<br />
{{Note|''sbsign'' を {{ic|--output}} 無しで実行すると、出力されるファイルは {{ic|''filename''.signed}} となります。詳細は {{man|1|sbsign}} を見てください。}}<br />
<br />
カーネルとブートマネージャに署名するには、''sbsign'' を使用してください。例えば:<br />
<br />
# sbsign --key db.key --cert db.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux<br />
# sbsign --key db.key --cert db.crt --output ''esp''/EFI/BOOT/BOOTx64.EFI ''esp''/EFI/BOOT/BOOTx64.EFI<br />
<br />
{{Warning|カーネル以外を署名しなかったら initramfs を改ざんから守ることはできません。''sbsign'' で手動で署名できる結合イメージを生成する方法は [[Unified カーネルイメージ]] を見てください。}}<br />
<br />
====== mkinitcpio のポストフックでカーネルに署名する ======<br />
<br />
[[mkinitcpio]] のポストフックを使って、initramfs の生成時にカーネルイメージに署名することもできます。<br />
<br />
以下のファイルを[[作成]]し、[[実行可能属性]]を付与してください:<br />
<br />
{{hc|/etc/initcpio/post/kernel-sbsign|2=<br />
#!/usr/bin/env bash<br />
<br />
kernel="$1"<br />
<nowiki>[[ -n "$kernel" ]] || exit 0<br />
<br />
# use already installed kernel if it exists<br />
[[ ! -f "$KERNELDESTINATION" ]] || kernel="$KERNELDESTINATION"</nowiki><br />
<br />
keypairs=(''/path/to/''db.key ''/path/to/''db.crt)<br />
<br />
for (( i=0; i<${#keypairs[@]}; i+=2 )); do<br />
key="${keypairs[$i]}" cert="${keypairs[(( i + 1 ))]}"<br />
if ! sbverify --cert "$cert" "$kernel" &>/dev/null; then<br />
sbsign --key "$key" --cert "$cert" --output "$kernel" "$kernel"<br />
fi<br />
done<br />
}}<br />
<br />
{{ic|''/path/to/''db.key}} と {{ic|''/path/to/''db.crt}} の部分は、カーネルの署名に使用するキーペアへのパスに置き換えてください。<br />
<br />
systemd-boot を使用する場合、この手順を半自動的に行う[[systemd-boot#自動で更新|専用の pacman フック]]が存在します。<br />
<br />
====== mkinitcpio のポストフックで unified カーネルイメージに署名する ======<br />
<br />
[[Unified カーネルイメージ#セキュアブート用の UKI への署名]] 章を参照してください。<br />
<br />
===== sbupdate による完全に自動化された unified カーネルの生成と署名 =====<br />
<br />
{{Note|''sbupdate'' が作成されたのは、[[mkinitcpio]] やその他の [[initramfs]] ジェネレータに [[unified カーネルイメージ]]の生成機能が追加されて以前は面倒であった作業が非常に簡単になる前です。今日では、[[#sbctl でより簡単に行う]] にあるように sbctl を使用することを検討してください。}}<br />
<br />
[https://github.com/andreyv/sbupdate sbupdate] は、Arch Linux で unified カーネルイメージの生成と署名を自動化するために特別に作られたツールです。このツールは、[[pacman フック]]を通してカーネルのインストール・削除・アップデートを処理します。<br />
<br />
{{AUR|sbupdate-git}} をインストールして、プロジェクトのホームページにある手順に従って設定してください。[https://github.com/andreyv/sbupdate#sbupdate]<br />
<br />
{{Tip|[[systemd-boot]] を使用している場合、設定の必要とせずにに署名済みのカーネルイメージを直接認識させるために {{ic|1=OUT_DIR="EFI/Linux"}} を設定してください。{{man|7|systemd-boot|FILES}} と [[Systemd-boot#ローダーの追加]] を参照してください。}}<br />
<br />
設定したら、イメージを生成するために {{ic|sbupdate}} を root として実行してください。<br />
<br />
{{Note|''sbupdate'' の出力にはしばしばエラーを含んでいます(例えば {{ic|warning: data remaining[26413568 vs 26423180]: gaps between PE/COFF sections?}})。これらは無害で、安全に無視できます。[https://github.com/andreyv/sbupdate/issues/30]}}<br />
<br />
==== 鍵をアップデートする ====<br />
<br />
一度セキュアブートを "User Mode" にしたら、KEK, db, dbx を変更するには上位の鍵による署名が必要です。<br />
<br />
例えば、db 鍵を新しいものに置き換えたい場合:<br />
<br />
# [[#鍵を作成する|新しい鍵を作成]]<br />
# EFI 署名リストに変換<br />
# EFI 署名リストに署名<br />
# 署名された証明書アップデートファイルを登録<br />
<br />
$ cert-to-efi-sig-list -g "$(< GUID.txt)" ''new_db''.crt ''new_db''.esl<br />
$ sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db ''new_db''.esl ''new_db''.auth<br />
<br />
db 鍵を置き換えるかわりに Signature Database に別の鍵を'''追加'''したい場合、{{ic|-a}} オプションを使う必要があります ({{man|1|sign-efi-sig-list}} を参照):<br />
<br />
$ sign-efi-sig-list '''-a''' -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db ''new_db''.esl ''new_db''.auth<br />
<br />
{{ic|''new_db''.auth}} が作成されたら[[#ファームウェアに鍵を登録する|登録]]してください。<br />
<br />
==== 他のオペレーティングシステムとデュアルブートする ====<br />
<br />
===== Microsoft Windows =====<br />
<br />
"Microsoft Windows Production PCA 2011" 鍵を UEFI セキュアブート変数に登録しない場合、[[#鍵を作成する|カスタム、個人の鍵]]で Windows のブートローダー ({{ic|EFI/Microsoft/Boot/bootmgfw.efi}}) を署名しても、Windows を起動することは通常'''不可能'''です:<br />
<br />
* {{ic|bootmgfw.efi}} に "Microsoft Windows Production PCA 2011" とあなたの独自のセキュアブート db 鍵の'''両方'''の署名 (つまり、'''2つの署名''') が含まれている場合、''INSYDE Corp. 4096.01 (UEFI Version 2.31, Version F.70, Release Date: 07/18/2016, BIOS Revision 15.112, Firmware Revision: 29.66)'' のような UEFI ファームウェア実装は、{{ic|bootmgfw.efi}} を起動せず、セキュリティ違反エラー ('''{{ic|Selected boot image did not authenticate. Press ENTER to continue.}}''') を発生させます: このような UEFI ファームウェア実装は、おそらく'''1番目'''の署名だけは読み込むことができるでしょうが、'''2番目'''の署名は無理でしょう。2番目の署名の証明書だけが UEFI セキュアブート変数に登録されているので、セキュアブートの検証が失敗するのです。<br />
* {{ic|bootmgfw.efi}} ファイルの "Microsoft Windows Production PCA 2011" 証明書が strip/削除されていて、さらにあなたの独自のセキュアブート db 鍵の署名だけがそのファイルに追加されている場合、UEFI はそのファイルを起動するでしょう。しかし、Windows はリカバリ/回復環境を起動してしまいます: Windows は Windows 環境が破損していると報告するでしょう ({{ic|bootmgfw.efi}} ファイルの "Microsoft Windows Production PCA 2011" 署名が存在しないからです)。<br />
<br />
なので、[[Windows と Arch のデュアルブート|Windows とデュアルブート]]するには<br />
<br />
* 選択肢1: {{ic|bootmgfw.efi}} のハッシュを {{ic|db}} 変数の許可ハッシュリストに追加する必要があります。そして、Windows アップデートが {{ic|bootmgfw.efi}} を変更するたびに毎回 {{ic|db}} 変数をアップデートする必要があります。これはかなり面倒くさいうえ、エラーが発生しやすく、Microsoft によってサポートされている方法ではありません。さらに、このようなセットアップでは Bitlocker は正しく動作しないでしょう (Windows パーティションを復号化するために毎回 Bitlocker が回復パスワードを尋ねてきます)。<br />
* 選択肢2: Micosoft の証明書を UEFI セキュアブート変数に追加する必要があります。[https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance#14-signature-databases-db-and-dbx Microsoft は4つの db 証明書と2つの KEK 証明書を持っています] ([https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11#14-signature-databases-db-and-dbx 日本語訳ページ]):<br />
<br />
** The [https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt Microsoft Windows Production PCA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/windows%20uefi%20ca%202023.crt Windows UEFI CA 2023] は、Windows OS をロードできるようにするために、{{ic|db}} 変数に含めなければなりません。<br />
** The [https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt Microsoft Corporation UEFI CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20uefi%20ca%202023.crt Microsoft UEFI CA 2023] (別名、Microsoft 3rd Party UEFI CA 証明書) は、UEFI ドライバやオプションの ROM、{{Pkg|shim}} などのサードパーティのバイナリを使用するために、{{ic|DB}} 変数に含める必要があります。<br />
** [https://www.microsoft.com/pkiops/certs/MicCorKEKCA2011_2011-06-24.crt Microsoft Corporation KEK CA 2011 証明書]と[https://www.microsoft.com/pkiops/certs/microsoft%20corporation%20kek%202k%20ca%202023.crt Microsoft Corporation KEK 2K CA 2023] は、「{{ic|dbx}} の更新による不良イメージの失効の有効化と、新しい署名済み Windows イメージの準備のために {{ic|db}} を更新するために」、{{ic|KEK}} 変数に含める必要があります。しかし、Windows はこれらの証明書無しでも起動します。<br />
<br />
Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使用して Microsoft の DER 形式 {{ic|db}} 証明書の EFI Signature Lists を作成し、それらのリストを1つのファイルにまとめてください:<br />
<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2011.esl MicWinProPCA2011_2011-10-19.crt<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db_2023.esl 'windows uefi ca 2023.crt'<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2011.esl MicCorUEFCA2011_2011-06-27.crt<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db_2023.esl 'microsoft uefi ca 2023.crt'<br />
$ cat MS_Win_db_2011.esl MS_Win_db_2023.esl MS_UEFI_db_2011.esl MS_UEFI_db_2023.esl > MS_db.esl<br />
<br />
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): Microsoft の GUID ({{ic|77fa9abd-0359-4d32-bd60-28f4e78f784b}}) を使って Microsoft の DER 形式 {{ic|KEK}} 証明書の EFI Signature List を作成してください:<br />
<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2011.esl MicCorKEKCA2011_2011-06-24.crt<br />
$ sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK_2023.esl 'microsoft corporation kek 2k ca 2023.crt'<br />
$ cat MS_Win_KEK_2011.esl MS_Win_KEK_2023.esl > MS_Win_KEK.esl<br />
<br />
{{ic|db}} 変数のアップデートを {{ic|KEK}} を使って署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|db}} 証明書を置き換えるのではなく '''追加''' します):<br />
<br />
$ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth<br />
<br />
任意 (Microsoft の UEFI セキュアブート要件を厳密に満たすために): {{ic|KEK}} 変数のアップデートを {{ic|PK}} で署名してください。{{ic|sign-efi-sig-list}} を {{ic|-a}} オプションで使用してください ({{ic|-a}} オプションは {{ic|KEK}} 証明書を置き換えるのではなく '''追加''' します):<br />
<br />
$ sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k PK.key -c PK.crt KEK MS_Win_KEK.esl add_MS_Win_KEK.auth<br />
<br />
[[#ファームウェアに鍵を登録する]] に従い、UEFI セキュアブートデータベース変数に {{ic|add_MS_db.auth}} を登録してください。Microsoft の UEFI セキュアブート要件を厳密に満たしたい場合は、{{ic|add_MS_Win_KEK.auth}} も登録してください。<br />
<br />
=== 署名済みのブートローダを使う ===<br />
<br />
署名済みのブートローダーを使うというのは Microsoft の鍵で署名されたブートローダーを使うということです。署名済みのブートローダーとしては PreLoader と shim が存在します。どちらも他の EFI バイナリ (通常の[[ブートローダー]]) をチェインロードします。Microsoft は未署名のあらゆるバイナリを自動起動するブートローダーに署名しないことになっているため、PreLoader と shim は Machine Owner Key リストと呼ばれるホワイトリストを使っています。バイナリの SHA256 ハッシュあるいはバイナリの署名鍵が MokList に存在する場合、バイナリが起動されますが、存在しない場合はハッシュや鍵を登録するための鍵管理ユーティリティが起動します。<br />
<br />
{{Warning|Microsoft が "Secured-core PC" と呼ぶものには Microsoft 3rd Party UEFI CA 証明書 (Microsoft Corporation UEFI CA 2011 または Microsoft UEFI CA 2023) が登録されていません。[https://docs.microsoft.com/en-us/windows/security/information-protection/secure-the-windows-10-boot-process#secure-boot] ([https://learn.microsoft.com/ja-jp/windows/security/information-protection/secure-the-windows-10-boot-process#%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2-%E3%83%96%E3%83%BC%E3%83%88 日本語訳ページ])。唯一登録されている DB 証明書は Microsoft Windows Production PCA 2011 証明書で、これは Windows ブートローダーを署名するためだけに使用されます。<br />
<br />
Microsoft 3rd Party UEFI CA 証明書で署名された EFI バイナリや OpROM を起動するには、Microsoft 3rd Party UEFI CA 証明書の登録をファームウェアの設定で有効化する必要があります。<br />
}}<br />
<br />
==== PreLoader ====<br />
<br />
起動時に PreLoader は {{ic|loader.efi}} を実行しようとします。MokList に {{ic|loader.efi}} のハッシュが存在しない場合、PreLoader は {{ic|HashTool.efi}} を起動します。HashTool で起動したい EFI バイナリのハッシュ、つまり[[ブートローダー]] ({{ic|loader.efi}}) とカーネルを登録する必要があります。<br />
<br />
{{Note|バイナリ (ブートローダーやカーネル) をアップデートするたびに新しいハッシュの登録が必要です。}}<br />
<br />
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd と PreLoader EFI バイナリを ESP にコピーできます。手順は [[rEFInd#PreLoader を使う]] を見てください。}}<br />
<br />
===== PreLoader をセットアップする =====<br />
<br />
{{Note|{{Pkg|efitools}} パッケージに含まれている {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} は署名されていないため、使い道は限られています。署名済みの {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を入手するには {{AUR|preloader-signed}} をインストールするか [https://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/ 手動でダウンロード] します。}}<br />
<br />
{{AUR|preloader-signed}} パッケージを[[インストール]]して {{ic|PreLoader.efi}} と {{ic|HashTool.efi}} を[[ブートローダー]]のディレクトリにコピーしてください。[[systemd-boot]] の場合、以下を実行:<br />
<br />
# cp /usr/share/preloader-signed/{PreLoader,HashTool}.efi ''esp''/EFI/systemd<br />
<br />
そしてブートローダーのバイナリをコピーして {{ic|loader.efi}} に名前を変更します。[[systemd-boot]] の場合、以下を実行:<br />
<br />
# cp ''esp''/EFI/systemd/systemd-bootx64.efi ''esp''/EFI/systemd/loader.efi<br />
<br />
最後に、{{ic|PreLoader.efi}} を起動する NVRAM エントリを新しく作成してください:<br />
<br />
# efibootmgr --unicode --disk /dev/sd'''''X''''' --part '''''Y''''' --create --label "PreLoader" --loader /EFI/systemd/PreLoader.efi<br />
<br />
{{ic|X}} は [[EFI システムパーティション]]のドライブ文字に、{{ic|Y}} は同じくパーティション番号に置き換えてください。<br />
<br />
上記のエントリは起動リストの一番最初に追加する必要があります。{{ic|efibootmgr}} コマンドで確認して、必要であればブートローダーの設定を変更してください。<br />
<br />
====== フォールバック ======<br />
<br />
カスタム NVRAM エントリの起動に問題が発生する場合、{{ic|HashTool.efi}} と {{ic|loader.efi}} を UEFI によって自動的に起動されるデフォルトのブートローダーの場所にコピーしてください:<br />
<br />
# cp /usr/share/preloader-signed/HashTool.efi ''esp''/EFI/BOOT/<br />
# cp ''esp''/EFI/systemd/systemd-bootx64.efi ''esp''/EFI/BOOT/loader.efi<br />
<br />
{{ic|PreLoader.efi}} を上書きコピーして、名前を変更します:<br />
<br />
# cp /usr/share/preloader-signed/PreLoader.efi ''esp''/EFI/BOOT/BOOTx64.EFI<br />
<br />
Windows にしか対応しない非協力的な UEFI 実装の場合、{{ic|PreLoader.efi}} を Windows で使用されるデフォルトローダーの場所にコピーしてください:<br />
<br />
# mkdir -p ''esp''/EFI/Microsoft/Boot<br />
# cp /usr/share/preloader-signed/PreLoader.efi ''esp''/EFI/Microsoft/Boot/bootmgfw.efi<br />
<br />
{{Note|Windows とデュアルブートする場合、元の {{ic|bootmgfw.efi}} はバックアップしておいてください。ファイルを置き換えると Windows のアップデートで問題が発生する可能性があります。}}<br />
<br />
上と同じように、{{ic|HashTool.efi}} と {{ic|loader.efi}} を {{ic|''esp''/EFI/Microsoft/Boot}} にコピーしてください。<br />
<br />
セキュアブートを有効にした状態でシステムを起動したら、上のセクションの手順に従って {{ic|loader.efi}} と {{ic|/vmlinuz-linux}} (あるいは使用している他のカーネルイメージ) を登録します。<br />
<br />
===== 起動途中で使用するには? =====<br />
<br />
{{ic|Failed to Start loader... I will now execute HashTool.}} というメッセージが表示されるでしょう。{{ic|loader.efi}} と {{ic|vmlinuz.efi}} のハッシュを登録するために HashTool を使用するには、以下の手順を踏んでください。以下の手順では、リマスタリングされた archiso インストールメディアのタイトルについて仮定をおいています。実際のタイトルはブートローダのセットアップに依存します。<br />
<br />
* ''OK'' を選択してください<br />
* HashTool のメインメニューで、''Enroll Hash'' を選択し、{{ic|\loader.efi}} を選んで ''Yes'' で確定してください。再び ''Enroll Hash'' と {{ic|archiso}} を選択し archiso のディレクトリに入って、{{ic|vmlinuz.efi}} を選択し、''Yes'' で確定してください。そして、''Exit'' を選択してブートデバイスの選択メニューに戻ってください。<br />
* ブートデバイスの選択メニューで、''Arch Linux archiso x86_64 UEFI CD'' を選んでください。<br />
<br />
===== PreLoader を除去する =====<br />
<br />
{{Note|以下を実行する前にバックアップを作成すると良いでしょう。}}<br />
<br />
{{AUR|preloader-signed}} を[[アンインストール]]し、コピーしたファイルを削除して、設定を元に戻します。[[systemd-boot]] の場合、以下を実行:<br />
<br />
# rm ''esp''/EFI/systemd/{PreLoader,HashTool}.efi<br />
# rm ''esp''/EFI/systemd/loader.efi<br />
# efibootmgr --unicode --bootnum ''N'' --delete-bootnum<br />
# bootctl update<br />
<br />
{{ic|N}} は {{ic|PreLoader.efi}} を起動するために作成した NVRAM のブートエントリに置き換えてください。{{ic|efibootmgr}} コマンドで確認を行なって、必要に応じてブート順序を修正してください。<br />
<br />
{{Note|上記のコマンドは一番簡単な場合です。他にもファイルを作成したり、コピーしたり、ファイル名を変更したり、編集したりした場合、おそらくそれらも処理する必要があります。PreLoader をブートエントリとして使用していた場合、明らかに[[#セキュアブートを無効化する]]必要もあります。<br />
}}<br />
<br />
===== 登録したハッシュを削除する =====<br />
<br />
MOK データベースに登録されたハッシュのエントリは NVRAM の容量を少し圧迫します。空き容量を増やしたり、時代遅れなプログラムが起動しないようにしたりするために、場合によっては使用しないハッシュを削除する必要があるでしょう。<br />
<br />
{{Pkg|efitools}} を[[インストール]]し、{{ic|KeyTool.efi}} をコピーしてください:<br />
<br />
# cp /usr/share/efitools/efi/KeyTool.efi ''esp''/EFI/systemd/KeyTool.efi<br />
<br />
PreLoader を起動するよう設定すれば、KeyTool のエントリが現れます。これで、MOK データベース内のハッシュを編集することができます。<br />
<br />
==== shim ====<br />
<br />
起動時に shim は {{ic|grubx64.efi}} を実行しようとします。MokList に {{ic|grubx64.efi}} のハッシュあるいは署名鍵が存在しない場合、shim は {{ic|mmx64.efi}} を起動します。MokManager で起動したい EFI バイナリ ([[ブートローダー]] ({{ic|grubx64.efi}}) とカーネル) のハッシュか署名鍵を登録する必要があります。<br />
<br />
{{Note|<br />
* [[#shim でハッシュを使う]] を使う場合、バイナリ(例: ブートローダやカーネル)を更新するたびに、新しいハッシュをを登録する必要があります。<br />
* バージョン 15.3 以降、shim は、有効な {{ic|.sbat}} セクションが無いと EFI バイナリを起動しません。EFI バイナリが {{ic|.sbat}} セクションを持っているか確認するには、{{ic|objdump -j .sbat -s ''/path/to/binary.efi''}} を実行してください。詳細は [https://github.com/rhboot/shim/blob/main/SBAT.md SBAT ドキュメント] を見てください。<br />
* セキュアブートがもたらすセキュリティには興味がなく、Windows 11 の要件のためだけにセキュアブートを有効化する場合、{{ic|mokutil --disable-validation}} で shim の認証プロセスを無効化すると良いかもしれません。その場合、grub(sbat は依然として必要でしょう)やカーネルイメージを署名する必要はありません。それと同時に、grub の {{ic|chainloader}} で Windows を起動することができます。<br />
}}<br />
<br />
===== shim をセットアップする =====<br />
<br />
{{Tip|[[rEFInd]] ブートマネージャの {{ic|refind-install}} スクリプトは rEFInd EFI バイナリを署名することができ、shim や MOK 証明書と一緒にバイナリを ESP にコピーできます。手順は [[rEFInd#shim を使う]] を見てください。}}<br />
<br />
{{AUR|shim-signed}} を[[インストール]]してください。<br />
<br />
現在の[[ブートローダー]]の名前を {{ic|grubx64.efi}} に変更してください:<br />
<br />
# mv ''esp''/EFI/BOOT/BOOTx64.EFI ''esp''/EFI/BOOT/grubx64.efi<br />
<br />
''shim'' と ''MokManager'' を ESP 上のブートローダーのディレクトリにコピーしてください; {{ic|shimx64.efi}} はブートローダの以前のファイル名を使ってください:<br />
<br />
{{Note|有効な {{ic|bootx64.csv}} が存在しない限り、{{ic|fbx64.efi}} (同じディレクトリ内にあります) はコピー'''しない'''でください。さもないと、shim は {{ic|grubx64.efi}} を'''実行せず'''、動作に失敗してマシンをリセットします。}}<br />
<br />
# cp /usr/share/shim-signed/shimx64.efi ''esp''/EFI/BOOT/BOOTx64.EFI<br />
# cp /usr/share/shim-signed/mmx64.efi ''esp''/EFI/BOOT/<br />
<br />
最後に、{{ic|BOOTx64.EFI}} を起動する新しい NVRAM エントリを作成してください:<br />
<br />
# efibootmgr --unicode --disk /dev/sd'''''X''''' --part '''''Y''''' --create --label "Shim" --loader /EFI/BOOT/BOOTx64.EFI<br />
<br />
''shim'' は、MokList に格納されている Machine Owner Key やハッシュによってバイナリを認証することができます。<br />
<br />
; Machine Owner Key (MOK): EFI バイナリに署名するためにユーザが生成し利用する鍵<br />
; hash: EFI バイナリの SHA256 ハッシュ<br />
<br />
ハッシュを用いるのは単純ですが、ブートローダやカーネルをアップデートするたびに、MokManager 内のそれらのハッシュを追加する必要があります。MOK では鍵を一度追加するだけで済みますが、ブートローダとカーネルをアップデートするたびに、それらに署名する必要があります。<br />
<br />
====== shim でハッシュを使う ======<br />
<br />
''shim'' は、MokList に {{ic|grubx64.efi}} の SHA256 ハッシュが存在しない場合、{{ic|mmx64.efi}} を起動します。<br />
<br />
''MokManager'' で ''Enroll hash from disk'' を選択してから {{ic|grubx64.efi}} を探して MokList に追加してください。同じようにカーネルの {{ic|vmlinuz-linux}} も追加してください。完了したら ''Continue boot'' を選択してください。ブートローダーが起動してカーネルが起動します。<br />
<br />
====== shim で鍵を使う ======<br />
<br />
{{Pkg|sbsigntools}} をインストールしてください。<br />
<br />
以下のファイルが必要です:<br />
<br />
; {{ic|.key}}: EFI バイナリに署名するための PEM 形式の''秘密''鍵。<br />
; {{ic|.crt}}: ''sbsign'' で使うための PEM 形式の証明書。<br />
; {{ic|.cer}}: ''MokManager'' で使うための DER 形式の証明書。<br />
<br />
Machine Owner Key を作成:<br />
<br />
$ openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days ''3650'' -subj "/CN=''my Machine Owner Key''/" -out MOK.crt<br />
$ openssl x509 -outform DER -in MOK.crt -out MOK.cer<br />
<br />
{{Note|shim は 4096 RSA キーを MokList に追加できないようです ({{ic|grubx64.efi}} バイナリをロードして検証する際にフリーズするかもしれません)。なので、今の時点では 2048 キーを使用してください。[[Debian:SecureBoot#Generating a new key]] を参照してください。}}<br />
<br />
({{ic|grubx64.efi}} という名前の) ブートローダーとカーネルに署名:<br />
<br />
# sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux<br />
# sbsign --key MOK.key --cert MOK.crt --output ''esp''/EFI/BOOT/grubx64.efi ''esp''/EFI/BOOT/grubx64.efi<br />
<br />
ブートローダーとカーネルをアップデートするたびに上記の署名が必要です。カーネルの署名は [[mkinitpcio]] のポストフックで自動化できます。以下のファイルを[[作成]]し、[[実行可能属性|実行可能]]にしてください:<br />
<br />
{{hc|/etc/initcpio/post/kernel-sbsign|2=<br />
#!/usr/bin/env bash<br />
<br />
kernel="$1"<br />
<nowiki>[[ -n "$kernel" ]] || exit 0<br />
<br />
# use already installed kernel if it exists<br />
[[ ! -f "$KERNELDESTINATION" ]] || kernel="$KERNELDESTINATION"</nowiki><br />
<br />
keypairs=(''/path/to/''MOK.key ''/path/to/''MOK.crt)<br />
<br />
for (( i=0; i<${#keypairs[@]}; i+=2 )); do<br />
key="${keypairs[$i]}" cert="${keypairs[(( i + 1 ))]}"<br />
if ! sbverify --cert "$cert" "$kernel" &>/dev/null; then<br />
sbsign --key "$key" --cert "$cert" --output "$kernel" "$kernel"<br />
fi<br />
done<br />
}}<br />
<br />
{{ic|MOK.cer}} を FAT でフォーマットされたファイルシステムにコピーしてください ([[EFI システムパーティション]] を使うことができます)。<br />
<br />
再起動してセキュアブートを有効にしてください。''shim'' は MokList に {{ic|grubx64.efi}} を署名するときに使った証明書がない場合、{{ic|mmx64.efi}} を起動します。<br />
<br />
''MokManager'' で ''Enroll key from disk'' を選択してから {{ic|MOK.cer}} を探して MokList に追加してください。完了したら ''Continue boot'' を選択してください。ブートローダーが起動して、Machine Owner Key で署名されたバイナリを起動できるようになります。<br />
<br />
====== shim で鍵と GRUB を使う ======<br />
<br />
手順は [[GRUB#Shim-lock]] を見てください。<br />
<br />
===== 登録されたハッシュ/鍵を削除する =====<br />
<br />
MOK データベースに登録されたハッシュ/鍵のエントリは、NVRAM の領域を少しずつ圧迫していきます。領域を節約し、古いプログラムがブートされないようにするために、使っていないハッシュ/鍵は削除すると良いかもしれません。<br />
<br />
MOK データベースは {{Pkg|mokutil}} で管理できます。<br />
<br />
登録された鍵とハッシュを一覧表示する:<br />
<br />
# mokutil --list-enrolled<br />
<br />
データベースからハッシュを削除する。ここで入力するパスワードは、MOK マネージャで削除の確認を行う際に再び尋ねられます。<br />
<br />
# mokutil --delete-hash <削除するハッシュ><br />
Input password:<br />
<br />
データベースから鍵を削除する:<br />
<br />
# mokutil --delete MOK.cer<br />
<br />
次回のブート時に削除されるハッシュ/鍵を一覧表示する:<br />
<br />
# mokutil --list-delete<br />
<br />
次回のブート時に、登録/削除するハッシュ/鍵のオプション付きで MOK マネージャが初期化されます。詳細は {{man|1|mokutil}} を参照してください。<br />
<br />
===== shim を除去する =====<br />
<br />
{{AUR|shim-signed}} を[[アンインストール]]して、コピーした ''shim'' と ''MokManager'' のファイルを削除してブートローダーを元の名前に戻してください。<br />
<br />
== セキュアブートを保護する ==<br />
<br />
マシンに物理アクセスできる者がセキュアブートを無効化してしまうことを阻止する唯一の方法は、ファームウェアの設定をパスワードで保護することです。<br />
<br />
ほとんどの UEFI ファームウェアはそのような機能を提供します。通常、ファームウェア設定の「セキュリティ」セクションにその項目があるはずです。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== ISO の再パック ===<br />
<br />
{{Pkg|libisoburn}} と {{Pkg|mtools}} を使うことで、公式のインストールイメージを展開したり、再パックしたりできます。この方法で、カスタムの鍵か署名済みのブートローダを使ってセキュアブートをサポートするイメージを作成することができます。<br />
<br />
==== 公式の ISO をカスタムの鍵で署名する ====<br />
<br />
ブートローダー ({{ic|BOOTx64.EFI}} と {{ic|BOOTIA32.EFI}})、カーネル、UEFI シェルを ISO から抽出し、それらを署名し、署名済みファイルを ISO に再パックすることで、カスタムの鍵で公式の ISO にセキュアブートサポートを追加できます。<br />
<br />
まず、関連するファイルと El Torito ブートイメージを抽出してください:<br />
<br />
{{bc|<br />
$ osirrox -indev archlinux-''YYYY.MM.DD''-x86_64.iso \<br />
-extract_boot_images ./ \<br />
-extract /EFI/BOOT/BOOTx64.EFI BOOTx64.EFI \<br />
-extract /EFI/BOOT/BOOTIA32.EFI BOOTIA32.EFI \<br />
-extract /shellx64.efi shellx64.efi \<br />
-extract /shellia32.efi shellia32.efi \<br />
-extract /arch/boot/x86_64/vmlinuz-linux vmlinuz-linux<br />
}}<br />
<br />
''mkarchiso'' によって使用されている {{man|1|xorrisofs}} のオプション {{ic|-rational-rock}} は、ISO 9660 のファイルを読み取り専用にし、これは抽出後も維持されます。ファイルを書き込み可能にし、変更できるようにしましょう:<br />
<br />
$ chmod +w BOOTx64.EFI BOOTIA32.EFI shellx64.efi shellia32.efi vmlinuz-linux<br />
<br />
ファイルを署名してください。{{Pkg|sbsigntools}} を使って署名する場合、以下のようにできます:<br />
<br />
$ sbsign --key db.key --cert db.crt --output BOOTx64.EFI BOOTx64.EFI<br />
$ sbsign --key db.key --cert db.crt --output BOOTIA32.EFI BOOTIA32.EFI<br />
$ sbsign --key db.key --cert db.crt --output shellx64.efi shellx64.efi<br />
$ sbsign --key db.key --cert db.crt --output shellia32.efi shellia32.efi<br />
$ sbsign --key db.key --cert db.crt --output vmlinuz-linux vmlinuz-linux<br />
<br />
ブートローダーと UEFI シェルを {{ic|eltorito_img2_uefi.img}} にコピーしてください。これは EFI システムパーティションとして使用され、El Torito UEFI ブートイメージとしてリストアップされます。{{ic|eltorito_img2_uefi.img}} のサイズは固定されていますが、丸め/アライメントのためや予約済みセクタに対処するために ''mkarchiso'' によって 1 MiB の空き領域が追加されています。なので、署名によるサイズ増は問題にはならないはずです。<br />
<br />
$ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI BOOTIA32.EFI ::/EFI/BOOT/<br />
$ mcopy -D oO -i eltorito_img2_uefi.img shellx64.efi shellia32.efi ::/<br />
<br />
変更された El Torito UEFI ブートイメージを使って ISO を再パックし、署名されたブートローダーのファイル、UEFI シェル、カーネルを ISO 9660 に追加してください:<br />
<br />
{{bc|<br />
$ xorriso -indev archlinux-''YYYY.MM.DD''-x86_64.iso \<br />
-outdev archlinux-''YYYY.MM.DD''-x86_64-Secure_Boot.iso \<br />
-map vmlinuz-linux /arch/boot/x86_64/vmlinuz-linux \<br />
-map_l ./ /EFI/BOOT/ BOOTx64.EFI BOOTIA32.EFI -- \<br />
-map_l ./ / shellx64.efi shellia32.efi -- \<br />
-boot_image any replay \<br />
-append_partition 2 0xef eltorito_img2_uefi.img<br />
}}<br />
<br />
完成した {{ic|archlinux-''YYYY.MM.DD''-x86_64-Secure_Boot.iso}} を起動してみてください。<br />
<br />
==== ブートローダを PreLoader に置き換える ====<br />
<br />
公式の ISO イメージにセキュアブートのサポートを追加するもう一つの方法は、ブートローダを抽出し、それを [[#PreLoader]] で置き換えることです。<br />
<br />
{{Note|ISO の GRUB EFI バイナリ ({{ic|EFI/BOOT/BOOTx64.EFI}}) は {{ic|--disable-shim-lock}} でビルドされているため、shim で使用することはできません。これは GRUB の制限であり、GRUB に shim かカスタムの署名のどちらか一方との互換性を持たせることはできますが、同時に両方との互換性を持たせることはできません。}}<br />
<br />
まず、ブートローダと El Torito ブートイメージを抽出してください。<br />
<br />
{{bc|<br />
$ osirrox -indev archlinux-''YYYY.MM.DD''-x86_64.iso \<br />
-extract_boot_images ./ \<br />
-cpx /EFI/BOOT/BOOTx64.EFI ./<br />
}}<br />
<br />
{{ic|BOOTx64.efi}} ファイルを PreLoader に置き換えてください:<br />
<br />
{{bc|<br />
$ mv BOOTx64.EFI loader.efi<br />
$ cp /usr/share/preloader-signed/PreLoader.efi BOOTx64.EFI<br />
$ cp /usr/share/preloader-signed/HashTool.efi HashTool.efi<br />
}}<br />
<br />
新しいファイルをブートイメージに追加してください:<br />
<br />
$ mcopy -D oO -i eltorito_img2_uefi.img BOOTx64.EFI loader.efi HashTool.efi ::/EFI/BOOT/<br />
<br />
最後に、変更されたブートイメージと新しいブートローダファイルを使って ISO を再パックしてください。<br />
<br />
{{bc|<br />
$ xorriso -indev archlinux-''YYYY.MM.DD''-x86_64.iso \<br />
-outdev archlinux-''YYYY.MM.DD''-x86_64-Secure_Boot.iso \<br />
-map_l ./ /EFI/BOOT/ BOOTx64.EFI loader.efi HashTool.efi -- \<br />
-boot_image any replay \<br />
-append_partition 2 0xef eltorito_img2_uefi.img<br />
}}<br />
<br />
=== オプション ROM のダイジェスト値を登録する ===<br />
<br />
[[Wikipedia:Option ROM|オプション ROM]] (OpROM: ブート中に実行されるデバイスファームウェア) は、セキュアブートのために署名されている必要があります。さもないと、デバイスが初期化されません。たいてい、OpROM は Microsoft 3rd Party UEFI CA 証明書で署名されています。このせいで、あなた独自の鍵のみによるセキュアブートができないことがあります。代わりに、OpROM の SHA256 ダイジェスト値 (ハッシュ値) を登録することで、この問題を解決できます。<br />
<br />
{{Warning|Microsoft 3rd Party UEFI CA 証明書を削除して必須のデバイスが初期化されなくなってしまうと、一部のデバイス (ノート PC も含む) においてはハードウェアが文鎮化してしまい、ファームウェアの設定画面にすら入れなくなって問題解決が不可能になる恐れがあります。}}<br />
<br />
[[TPM]] のあるシステムでは、[https://docs.kernel.org/security/tpm/tpm_event_log.html TPM イベントログ]からオプション ROM の SHA256 ダイジェスト値を得ることができます。<br />
<br />
{{Pkg|tpm2-tools}} と {{AUR|digest-to-efi-sig-list}} を[[インストール]]してください。<br />
<br />
{{man|1|tpm2_eventlog}} を使い、{{ic|/sys/kernel/security/tpm0/binary_bios_measurements}} から {{ic|BOOT_SERVICES_DRIVER}} のダイジェスト値を探してください。[https://github.com/Foxboron/sbctl/wiki/FAQ#option-rom]<br />
<br />
例えば:<br />
<br />
{{hc|# tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements|<br />
...<br />
- EventNum: 9<br />
PCRIndex: 2<br />
EventType: EV_EFI_BOOT_SERVICES_DRIVER<br />
DigestCount: 1<br />
Digests:<br />
- AlgorithmId: sha256<br />
Digest: "'''''0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'''''"<br />
...<br />
- EventNum: 10<br />
PCRIndex: 2<br />
EventType: EV_EFI_BOOT_SERVICES_DRIVER<br />
DigestCount: 1<br />
Digests:<br />
- AlgorithmId: sha256<br />
Digest: "'''''fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210'''''"<br />
...<br />
}}<br />
<br />
探し出したそれぞれの OpROM ダイジェスト値に対する EFI 署名リストを作成するには、''digest-to-efi-sig-list'' を使用してください:<br />
<br />
$ digest-to-efi-sig-list ''0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'' OpROM1.esl<br />
$ digest-to-efi-sig-list ''fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210'' OpROM2.esl<br />
<br />
複数の OpROM がある場合は、それぞれの EFI 署名リストを1つにまとめて、単一のファイルとして署名できるようにしてください:<br />
<br />
$ cat OpROM1.esl OpROM2.esl > OpROM.esl<br />
<br />
EFI 署名リストに署名して、Signature Database に追加してください:<br />
<br />
$ sign-efi-sig-list -a -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db OpROM.esl OpROM.auth<br />
<br />
そして、[[#ファームウェアに鍵を登録する|登録してください]]。<br />
<br />
最も危険な最後のステップは、Microsoft 3rd Party UEFI CA 証明書を Signature Database から削除することです。削除後もシステムが起動し、全てのデバイスが機能することを確認してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/ Understanding the UEFI Secure Boot Chain] tianocore による<br />
* [[Wikipedia:ja:Unified Extensible Firmware Interface#セキュアブート]]<br />
* [https://www.rodsbooks.com/efi-bootloaders/secureboot.html Dealing with Secure Boot] Rod Smith による<br />
* [https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html Controlling Secure Boot] Rod Smith による<br />
* [https://mjg59.dreamwidth.org/5850.html UEFI secure booting (part 2)] Matthew Garrett による<br />
* [https://blog.hansenpartnership.com/uefi-secure-boot/ UEFI Secure Boot] James Bottomley による<br />
* [https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git/tree/README efitools README]<br />
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot Will your computer's "Secure Boot" turn out to be "Restricted Boot"?] — Free Software Foundation<br />
* [https://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement/campaigns/secure-boot-vs-restricted-boot/whitepaper-web フリーなオペレーティングシステムディストリビューションにおけるセキュアブートに関する Free Software Foundation による推奨事項]<br />
* [https://web.archive.org/web/20150928202110/https://firmware.intel.com/messages/219 Intel の UEFI セキュアブートチュートリアル]<br />
* [https://web.archive.org/web/20200205044007/http://dreamhack.it/linux/2015/12/03/secure-boot-signed-modules-and-signed-elf-binaries.html Secure Boot, Signed Modules and Signed ELF Binaries]<br />
* 米国家安全保障局のドキュメント: [https://www.nsa.gov/Portals/70/documents/what-we-do/cybersecurity/professional-resources/ctr-uefi-defensive-practices-guidance.pdf UEFI Defensive Practices Guidance] 及び機密解除された [https://media.defense.gov/2020/Sep/15/2002497594/-1/-1/0/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF/CTR-UEFI-SECURE-BOOT-CUSTOMIZATION-20200915.PDF UEFI Secure Boot customization]<br />
* [http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases/ sbkeysync & maintaining uefi key databases] Jeremy Kerr による<br />
* [https://nwildner.com/posts/2020-07-04-secure-your-boot-process/ Secure your boot process: UEFI + Secureboot + EFISTUB + Luks2 + lvm + Arch Linux] (2020-07)<br />
* [https://security.stackexchange.com/questions/29122/how-is-hibernation-supported-on-machines-with-uefi-secure-boot How is hibernation supported, on machines with UEFI Secure Boot?] (Security StackExchange)<br />
* [https://0pointer.net/blog/authenticated-boot-and-disk-encryption-on-linux.html Authenticated Boot and Disk Encryption on Linux] Lennart Poettering による (2021-09-23)<br />
* {{AUR|cryptboot}} ツールは、(セキュアブートのための) プロセス全体を簡略化し、簡単に使えるようにします。<br />
<br />
{{TranslationStatus|Unified Extensible Firmware Interface/Secure Boot|2024-03-28|804762}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%BC%E3%83%89&diff=36655
マイクロコード
2024-03-27T21:53:48Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:CPU]]<br />
[[Category:セキュリティ]]<br />
[[de:Microcode]]<br />
[[en:Microcode]]<br />
[[es:Microcode]]<br />
[[ru:Microcode]]<br />
[[zh-hans:Microcode]]<br />
プロセッサの製造者はプロセッサ[[Wikipedia:ja:マイクロプログラム方式|マイクロコード]]に安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。<br />
<br />
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。<br />
<br />
== マイクロコードをロードする ==<br />
<br />
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:<br />
<br />
# '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。<br />
# '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。<br />
# '''遅延ロード''' ([https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください:<br />
* {{Pkg|amd-ucode}} : AMD プロセッサ<br />
* {{Pkg|intel-ucode}} : Intel プロセッサ<br />
<br />
=== 早期ロード ===<br />
<br />
マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) によって読み込む必要があります。<br />
<br />
早期ローダは、マイクロコードのアップデートファイルが未圧縮 CPIO アーカイブ (initramfs イメージ) 内の {{ic|/kernel/x86/microcode/GenuineIntel.bin}} または {{ic|/kernel/x86/microcode/AuthenticAMD.bin}} として存在していることを期待します。<br />
<br />
早期 initramfs イメージ (マイクロコードのアップデートファイル) は、メインの initramfs イメージと合体して1つのファイルにし、(ブートローダーで {{ic|1=initrd=}} カーネルコマンドラインオプションを使うか、unified カーネルイメージ内にパックして) 単一の initramfs ファイルとしてカーネルに渡すこともできますし、個別のファイルとして使用することもできます (この場合、{{ic|1=initrd=}} カーネルコマンドラインオプションを複数回使用する必要があります)。いずれにせよ、マイクロコードを含んでいる未圧縮 CPIO アーカイブはメインの initramfs より前に配置'''しなければなりません'''。<br />
<br />
注意点として、ユーザーの初期ブート構成は多様なので、Arch のデフォルトの設定ではマイクロコードのアップデートは自動的にトリガーされません。<br />
<br />
==== カスタムビルドされたカーネル ====<br />
<br />
早期ローダーを[[カーネル/Arch build system|カスタムカーネル]]で動作させるには、"CPU microcode loading support" を、モジュールとしてコンパイルせずに、カーネルに組み込む必要があります。これにより "Early load microcode" プロンプトが有効化され、これを {{ic|Y}} に設定する必要があります。<br />
<br />
CONFIG_BLK_DEV_INITRD=Y<br />
CONFIG_MICROCODE=y<br />
CONFIG_MICROCODE_INTEL=Y<br />
CONFIG_MICROCODE_AMD=y<br />
<br />
==== Unified カーネルイメージ ====<br />
<br />
[[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。<br />
<br />
==== マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする ====<br />
<br />
未圧縮のマイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に追加する]ことが可能であり、単一の initramfs ファイルとして利用できるようになります。この方法は、追加のブートパラメータの設定が必要ないため、[[#別個のマイクロコード initramfs ファイルを使う]] の方法よりも推奨されます。<br />
<br />
[[mkinitcpio]] と [[dracut]] は、このような複数のファイルが混合された initramfs ファイルの生成をサポートしており、この動作がデフォルトです。しかし、[[Booster]] は[https://github.com/anatol/booster/issues/40 複数のファイルが混合された initramfs ファイルの生成をサポートしていません]。<br />
<br />
===== mkinitcpio =====<br />
<br />
[[mkinitcpio]] でマイクロコードを含んでいる initramfs ファイルを生成するには、{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|microcode}} フックが含まれていることを確認してください。<br />
<br />
{{ic|autodetect}} フックが {{ic|microcode}} フックよりも前にある場合、現在使用している CPU のマイクロコードのみが追加されます。システム上に存在する全ての CPU マイクロコードファイルを追加するには、{{ic|microcode}} フックを {{ic|autodetect}} フックより前に移動するか、{{ic|autodetect}} フックを削除してください。<br />
<br />
Initramfs の生成時に ''mkinitcpio'' は以下のようなメッセージを表示します:<br />
<br />
-> Early uncompressed CPIO image generation successful<br />
<br />
{{man|1|lsinitcpio}} コマンドを使えば、マイクロコードのアップデートファイルが initramfs 内に存在していることを確認できます。例えば:<br />
<br />
{{hc|# lsinitcpio --early /boot/initramfs-linux.img|<br />
early_cpio<br />
kernel/<br />
kernel/x86/<br />
kernel/x86/microcode/<br />
kernel/x86/microcode/AuthenticAMD.bin<br />
}}<br />
<br />
===== dracut =====<br />
<br />
[[dracut]] に関しては {{man|5|dracut.conf|DESCRIPTION}} を見てください。<br />
<br />
==== 別個のマイクロコード initramfs ファイルを使う ====<br />
<br />
先の方法を用いない場合、マイクロコードの早期アップデートは {{ic|/boot/amd-ucode.img}} や {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルで最初の initrd''' として追加することで有効化する必要があります。マイクロコードの initrd は通常の initrd ファイルよりも前に来る必要があります。一般的なブートローダーにおける手順は以下を参照してください。<br />
<br />
以下の章では、{{ic|''cpu_manufacturer''}} という記述はあなたの CPU の製造業者名 (つまり、{{ic|amd}} か {{ic|intel}}) に置き換えてください。<br />
<br />
===== GRUB =====<br />
<br />
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように {{ic|/boot/''cpu_manufacturer''-ucode.img}} を追加できます(別のパーティションに {{ic|/boot}} がある場合は {{ic|/''cpu_manufacturer''-ucode.img}}):<br />
<br />
{{hc|/boot/grub/grub.cfg|<br />
...<br />
echo 'Loading initial ramdisk'<br />
initrd '''/boot/''cpu_manufacturer''-ucode.img''' /boot/initramfs-linux.img<br />
...<br />
}}<br />
<br />
それぞれのメニュエントリに対してこれを行ってください。<br />
<br />
===== systemd-boot =====<br />
<br />
以下のように、マイクロコードを読み込むオプションを初期 RAM ディスクより前に使用してください:<br />
<br />
{{hc|/boot/loader/entries/''entry''.conf|<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
'''initrd /''cpu_manufacturer''-ucode.img'''<br />
initrd /initramfs-linux.img<br />
...<br />
}}<br />
<br />
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。<br />
<br />
===== EFISTUB =====<br />
<br />
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:<br />
<br />
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img<br />
<br />
===== rEFInd =====<br />
<br />
{{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡せるようにするために [[rEFInd#設定]] で説明されている手順に従う必要があります。}}<br />
<br />
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、マイクロコードイメージをロードするための {{ic|1=initrd=}} オプションを最初の {{ic|initrd}} 引数として追加してください。{{ic|/boot}} 内のファイルが別のパーティションの直下にあるかどうかに応じて、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} か {{ic|1=initrd=''cpu_manufacturer''-ucode.img}} のどちらかを使ってください。<br />
<br />
マイクロコードは、ブートオプションのリストの中で最初に宣言された initramfs でなければなりません。例えば:<br />
<br />
"Boot using default options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap initrd=boot\''cpu_manufacturer''-ucode.img initrd=boot\initramfs-%v.img"<br />
<br />
====== 手動でブートオプションを記述する ======<br />
<br />
[[rEFInd#手動でブートエントリを記述する|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合は、{{ic|1=initrd=}} パラメータを追加して、ブートパーティション内の適切なパスに設定する必要があります。このパラメータは options 行の一部である必要があり、設定のメインの部分ではありません。例:<br />
<br />
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"<br />
<br />
===== Syslinux =====<br />
<br />
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}<br />
<br />
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます:<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
INITRD '''../''cpu_manufacturer''-ucode.img''',../initramfs-linux.img<br />
...<br />
<br />
===== LILO =====<br />
<br />
[[LILO]] は複数の初期 RAM ディスクイメージの読み込みをサポートしておらず、他の古いブートローダーも同じくサポートしていない可能性があります。代わりに [[#マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする]] で説明されている方法に従ってください。<br />
<br />
===== Limine =====<br />
<br />
[[Limine]] においては、[[Limine#設定|limine.cfg]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です:<br />
<br />
{{hc|limine.cfg|2=<br />
DEFAULT_ENTRY=1<br />
TIMEOUT=3<br />
<br />
:Arch<br />
COMMENT=Arch Linux<br />
<br />
PROTOCOL=linux<br />
KERNEL_PATH=boot:///vmlinuz-linux<br />
CMDLINE=root=UUID=c0748521-eca9-4f38-989c-43811b6e39a1 rw loglevel=3<br />
'''MODULE_PATH=boot:///''cpu_manufacturer-ucode''.img'''<br />
MODULE_PATH=boot:///initramfs-linux.img<br />
}}<br />
<br />
=== 遅延ロード ===<br />
<br />
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 以降で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}<br />
<br />
マイクロコードアップデートの遅延ロードは、システムが起動し終わった後に行われます。その時、{{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるファイルが使用されます。AMD CPU と Intel CPU のマイクロコードのアップデートファイルは、それぞれ {{Pkg|amd-ucode}} と {{Pkg|intel-ucode}} によって提供されています。<br />
<br />
遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462]<br />
<br />
==== マイクロコードのアップデートの遅延ロード ====<br />
<br />
実行中のシステムで手動でマイクロコードをアップデートするには (例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後に):<br />
<br />
# echo 1 > /sys/devices/system/cpu/microcode/reload<br />
<br />
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
== 起動時にマイクロコードのアップデートがされたか確認する ==<br />
<br />
マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください:<br />
<br />
# journalctl -k --grep='microcode:'<br />
<br />
ブート時に毎回以下のような出力がなされるはずです (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています):<br />
<br />
kernel: microcode: Current revision: 0x00000012<br />
kernel: microcode: Updated early from: 0x0000000e<br />
<br />
場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。<br />
<br />
AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。<br />
<br />
== マイクロコードのアップデートができる CPU ==<br />
<br />
特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます:<br />
<br />
* [[Gentoo:AMD microcode#Microcode firmware files]]。<br />
* [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。<br />
<br />
=== マイクロコードのアップデートが必要かどうか確認する ===<br />
<br />
Intel CPU の場合は、{{man|8|iucode_tool}} コマンドを使うことで、現在使用中の CPU 向けのマイクロコードが {{ic|/usr/lib/firmware/intel-ucode/}} に含まれているかどうかを確認することができます。<br />
<br />
# {{Pkg|intel-ucode}} と {{Pkg|iucode-tool}} を[[インストール]]してください。<br />
# {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}}<br />
# 該当する cpuid を検索: {{bc|$ iucode_tool -lS /usr/lib/firmware/intel-ucode/}}<br />
# アップデートが存在する場合は、''selected microcodes'' の下に表示されます。<br />
# メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。<br />
<br />
AMD CPU の場合、手動により確認することができます。<br />
<br />
# {{man|1|lscpu}} か {{ic|/proc/cpuinfo}} の出力を見る。<br />
# CPU のファミリ、モデル、ステッピングを確認する。これらの値を16進数に変更する。<br />
# {{ic|/usr/lib/firmware/amd-ucode/README}} に書かれてあるリストにそれらの値とマッチするものを見つける。<br />
# 見つかった場合は、現在使用中のマイクロコードのバージョンとリストにある {{ic|Patch}} の値を比較する。<br />
<br />
== マイクロコードローダーを無効化する ==<br />
<br />
更新後の CPU マイクロコードが問題を引き起こす場合、一時的にマイクロコードローダーを無効化してブートできるようにし、パッケージをダウングレードする必要がある場合があります。カーネルのマイクロコードローダーを無効化するには、{{ic|dis_ucode_ldr}} [[カーネルパラメータ]]を指定してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes – Experiences in the community]<br />
* [http://inertiawar.com/microcode/ Intel マイクロコードアップデートのノート – Ben Hawkes]<br />
* [https://docs.kernel.org/arch/x86/microcode.html カーネルマイクロコードローダ – カーネルドキュメント]<br />
* [https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ – AnandTech]<br />
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]<br />
<br />
{{TranslationStatus|Microcode|2024-03-28|804655}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A/%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9&diff=36645
ネットワーク設定/ワイヤレス
2024-03-27T02:35:07Z
<p>AshMyzk: /* 手動/自動 セットアップ */ リンクを修正</p>
<hr />
<div>[[Category:無線ネットワーク]]<br />
[[Category:ネットワーク設定]]<br />
[[de:(W)LAN und Arch Linux]]<br />
[[en:Network configuration/Wireless]]<br />
[[pt:Network configuration (Português)/Wireless]]<br />
[[ru:Network configuration (Русский)/Wireless]]<br />
[[zh-hans:网络配置/无线网络配置]]<br />
{{Related articles start}}<br />
{{Related|ソフトウェアアクセスポイント}}<br />
{{Related|アドホックネットワーク}}<br />
{{Related|インターネット共有}}<br />
{{Related|ワイヤレスボンディング}}<br />
{{Related|ネットワークデバッグ}}<br />
{{Related|Bluetooth}}<br />
{{Related articles end}}<br />
<br />
ネットワーク設定に関するメインの記事は [[ネットワーク設定]] です。<br />
<br />
ワイヤレスネットワークの設定は2段階で行います; まずワイヤレスデバイスを使うために正しいドライバがインストールされているか確認し(インストールメディア上では利用できても、明示的にインストールする必要があります)、インターフェースを設定します。次に、ワイヤレス接続を管理する方法を選びます。この記事では両方をカバーしています。また、ワイヤレス管理ツールへの追加リンクもあります。<br />
<br />
[[#iw]] セクションでは {{Pkg|iw}} を使ってワイヤレスネットワークインターフェイス/ワイヤレス LAN を手動で管理する方法を説明しています。[[ネットワーク設定#ネットワークマネージャ]] セクションでは、ワイヤレスインターフェイスを自動的に管理する際に使用できるいくつかのプログラムについて説明しています。それらはすべてネットワークプロファイルのサポートを含んでおり(ノート PC のようにワイヤレスネットワークを頻繁に切り替える際に便利です)、それらのうち一部は GUI を含んでいます。<br />
<br />
== デバイスドライバ ==<br />
<br />
デフォルトの Arch Linux カーネルは''モジュール式''です、つまり、マシンハードウェアに必要なドライバの多くはハードドライブに置かれ、[[カーネルモジュール|モジュール]]として利用可能となります。起動時に、[[udev]] がハードウェアの一覧を作成し、対応するハードウェア用の適切なモジュール(ドライバ)をロードします。これにより、ネットワーク''インターフェイス''の作成が可能になります。<br />
<br />
一部のワイヤレスチップセットは、対応するドライバに加えてファームウェアも必要とします。多くのファームウェアイメージは、{{Pkg|linux-firmware}} パッケージによって提供されますが、プロプライエタリなファームウェアイメージは含まれていないため別途インストールする必要があります。[[#ドライバー・ファームウェアをインストールする]]で説明されています。<br />
<br />
{{Note|適切なモジュールが起動時に udev によって読み込まれない場合、[[カーネルモジュール#手動でモジュールを扱う|手動でロードしてください]]。udev がひとつのデバイスに対して2つ以上のドライバをロードしてしまうと、競合が起こり、設定に失敗してしまう場合があります。望まないモジュールを[[ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ドライバーの状態を確認する ===<br />
<br />
あなたのカード用のドライバーがロードされていることを確認するには、{{ic|lspci -k}} か {{ic|lsusb -v}} の出力を見てください (カードが PCI(e) と USB のどちらに接続されているかに依存します)。カーネルドライバーが使われているなら、例えば以下のように表示されるはずです:<br />
<br />
{{hc|$ lspci -k|<br />
06:00.0 Network controller: Intel Corporation WiFi Link 5100<br />
Subsystem: Intel Corporation WiFi Link 5100 AGN<br />
Kernel driver in use: iwlwifi<br />
Kernel modules: iwlwifi<br />
}}<br />
<br />
{{Note|カードが USB デバイスの場合、{{ic|<nowiki>dmesg | grep usbcore</nowiki>}} を実行すると {{ic|usbcore: registered new interface driver rtl8187}} のように表示されるはずです。}}<br />
<br />
また、{{ic|ip link}} コマンドの出力を確認し、ワイヤレスインターフェイスが作成されたことを確認してください。通常、ワイヤレス[[ネットワークインターフェイス]]の名前は "w" で始まります (例: {{ic|wlan0}}、{{ic|wlp2s0}})。そして、以下のコマンドでそのインターフェイスを up 状態にしてください:<br />
<br />
# ip link set ''interface'' up<br />
<br />
例えば、インターフェイスが {{ic|wlan0}} である場合、実行すべきコマンドは {{ic|ip link set wlan0 up}} となります。<br />
<br />
{{Note|<br />
* {{ic|RTNETLINK answers: Operation not possible due to RF-kill}} のようなエラーが発生する場合、デバイスがハードロックまたはソフトロックされていないことを確認してください。詳細は [[#Rfkill の注意点]] を参照してください。<br />
* {{ic|SIOCSIFFLAGS: No such file or directory}} というエラーメッセージが発生する場合、ほぼ確実に、あなたのワイヤレスチップセットが機能するにはファームウェアが必要であることを意味します。<br />
}}<br />
<br />
ファームウェアがロードされたことを示すカーネルメッセージを確認してください:<br />
<br />
{{hc|# dmesg {{!}} grep firmware|<br />
[ 7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm<br />
}}<br />
<br />
関連する出力がない場合、先ほど特定したモジュール (この例では {{ic|iwlwifi}}) の完全な出力メッセージを確認して、関連するメッセージやさらなる問題を見つけてください:<br />
<br />
{{hc|# dmesg {{!}} grep iwlwifi|2=<br />
[ 12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X<br />
[ 12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm<br />
[ 12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled<br />
...<br />
[ 12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B<br />
}}<br />
<br />
カーネルモジュールのロードに成功し、インターフェイスが up 状態になっている場合、次のセクションはスキップすることができます。<br />
<br />
=== ドライバー・ファームウェアをインストールする ===<br />
<br />
以下のリストを確認し、あなたのカードがサポートされているか確認してください:<br />
<br />
* [https://wireless.wiki.kernel.org/en/users/drivers 既存の Linux ワイヤレスドライバー]の表を参照し、サポートされているデバイスのリストを含む特定のドライバーのページにアクセスしてください。[https://wikidevi.wi-cat.ru/List_of_Wi-Fi_Device_IDs_in_Linux List of Wi-Fi Device IDs in Linux] もあります。<br />
* [https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported Ubuntu Wiki] には、ワイヤレスカードと、そのカードが Linux カーネルかユーザ空間のドライバによってサポートされているかどうかの良質な一覧が (ドライバ名も含めて) あります。<br />
* [http://linux-wless.passys.nl/ Linux Wireless Support] と Linux Questions の [https://web.archive.org/web/20110711100256/http://www.linuxquestions.org/hcl/index.php?cat=10 Hardware Compatibility List] (HCL) にも、カーネルフレンドリーなハードウェアの良質なデータベースがあります。<br />
<br />
注意点として、一部のベンダーは、異なるチップセットを含む製品を出荷しています (その製品の識別子が同じであるとしてもです)。(USB デバイスの場合) usb-id や (PCI デバイスの場合) pci-id のみが信頼できます。<br />
<br />
あなたのワイヤレスカードが上記のリストにあった場合、このページの [[#ドライバとファームウェアのトラブルシューティング]] サブセクションを見て下さい、特定のワイヤレスカードのドライバーやファームウェアのインストール情報が載っています。その後、また[[#ドライバーの状態を確認する|ドライバーの状態を確認]]してください。<br />
<br />
ワイヤレスハードウェアが上記のリストになかった場合、おそらくサポートしているのが Windows のみだと思われます (一部の Broadcom、3com など)。その場合、[[#ndiswrapper]] を使用してみてください。<br />
<br />
== ユーティリティ ==<br />
<br />
他のネットワークインターフェイスと同じように、ワイヤレスインターフェイスも {{Pkg|iproute2}} パッケージの ''ip'' でコントロールします。<br />
<br />
ワイヤレス接続は、ワイヤレス認証に [[wpa_supplicant]] や [[iwd]] を使用する[[ネットワークマネージャ]]を使うか、''wpa_supplicant'' や ''iwd'' を直接使うことによって、管理することができます。より低レベルな設定を行いたい場合や、レガシーなドライバやレガシーな認証方式を使用している場合には、{{Pkg|iw}} や非推奨の {{Pkg|wireless_tools}} を使用できます。<br />
<br />
=== iw と wireless_tools の比較 ===<br />
<br />
{| class="wikitable"<br />
! ソフトウェア !! パッケージ !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA/WPA2/WPA3 !! [[Archiso]] [https://gitlab.archlinux.org/archlinux/archiso/-/blob/master/configs/releng/packages.x86_64]<br />
|-<br />
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools]<sup>1</sup> || {{Pkg|wireless_tools}} || {{Yes}} || {{no}} || {{Yes}} || {{No}} || {{Yes}}<br />
|-<br />
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || {{Pkg|iw}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}}<br />
|}<br />
<br />
# 非推奨<br />
<br />
一部の古いドライバは WEXT しかサポートしていないことに注意してください。<br />
<br />
以下の表は ''iw'' と ''wireless_tools'' の比較可能なコマンドの概要です。さらなる例は [https://wireless.wiki.kernel.org/en/users/Documentation/iw/replace-iwconfig iw replaces iwconfig] を見てください。<br />
<br />
{| class="wikitable"<br />
! ''iw'' コマンド<br />
! ''wireless_tools'' コマンド<br />
! 説明<br />
|-<br />
| iw dev ''wlan0'' link<br />
| iwconfig ''wlan0''<br />
| リンクの状態を取得。<br />
|-<br />
| iw dev ''wlan0'' scan<br />
| iwlist ''wlan0'' scan<br />
| 利用可能なアクセスポイントをスキャン。<br />
|-<br />
| iw dev ''wlan0'' set type ibss<br />
| iwconfig ''wlan0'' mode ad-hoc<br />
| 動作モードを ''ad-hoc'' に設定。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid''<br />
| iwconfig ''wlan0'' essid ''your_essid''<br />
| 接続してネットワークを開く。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid'' 2432<br />
| iwconfig ''wlan0'' essid ''your_essid'' freq 2432M<br />
| 接続して指定したチャンネルのネットワークを開く。<br />
|-<br />
| rowspan="2" | iw dev ''wlan0'' connect ''your_essid'' key 0:''your_key''<br />
| iwconfig ''wlan0'' essid ''your_essid'' key ''your_key''<br />
| 16進数のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iwconfig ''wlan0'' essid ''your_essid'' key s:''your_key''<br />
| ASCII 文字のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iw dev ''wlan0'' set power_save on<br />
| iwconfig ''wlan0'' power on<br />
| 省電力機能を有効にする。<br />
|}<br />
<br />
== iw ==<br />
<br />
{{Note|<br />
* ほとんどのコマンドは [[ユーザーとグループ|root 権限]]で実行する必要があることに注意してください。通常ユーザーで実行すると、コマンドによっては (例: ''iwlist'') エラーを出さずに終了して正しい出力をしないため、混乱をきたすおそれが有ります。<br />
* ハードウェアや暗号化方式によっては、手順のいくつかは必要ありません。カードによってはアクセスポイントに関連付けをして IP アドレスを取得する前に、インターフェースの有効化やアクセスポイントのスキャニングが必要なことがあります。実験が必要かもしれません。例えば、WPA/WPA2 ユーザーは [[#関連付け]] の手順から直接ワイヤレスネットワークを有効化できます。}}<br />
<br />
このセクションに出てくる例ではあなたのワイヤレスデバイスを {{ic|''interface''}}、wifi のアクセスポイントを {{ic|''your_essid''}} と仮定しています。それぞれ適切な文字列に置き換えて下さい。<br />
<br />
=== インターフェイス名の取得 ===<br />
<br />
{{Tip|''iw'' ツールの [https://wireless.wiki.kernel.org/en/users/documentation/iw 公式ドキュメント] により多くのサンプルがあります。}}<br />
<br />
ワイヤレスインターフェイスの名前を取得するには:<br />
<br />
$ iw dev<br />
<br />
インターフェイス名は "Interface" という単語のあとに出力されます。例えば、インターフェイス名は {{ic|wlan0}} が一般的です。<br />
<br />
=== インターフェイスの状態の取得 ===<br />
<br />
リンクの状態を確認するには、次のコマンドを使ってください。<br />
<br />
$ iw dev ''interface'' link<br />
<br />
次のコマンドで tx/rx バイトの総量やシグナルの強さといった統計値をを取得することができます:<br />
<br />
$ iw dev ''interface'' station dump<br />
<br />
=== インターフェイスの有効化 ===<br />
<br />
{{Tip| 通常、この手順は不要です。}}<br />
<br />
カードによっては ''iw'' や ''wireless_tools'' を使う前にカーネルインターフェースをアクティブ化する必要があります:<br />
<br />
# ip link set ''interface'' up<br />
<br />
{{Note|{{ic|RTNETLINK answers: Operation not possible due to RF-kill}}のようなエラーが表示される場合、ハードウェアのスイッチが''オン''になっているか確認してください。詳細は [[#Rfkill の注意点]] を見てください。}}<br />
<br />
インターフェイスが立ち上がっているか確認するには、次のコマンドの出力を見て下さい:<br />
<br />
{{hc|$ ip link show ''interface''|<br />
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000<br />
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff<br />
}}<br />
<br />
{{ic|<BROADCAST,MULTICAST,UP,LOWER_UP>}} にある {{ic|UP}} がインターフェイスが立ち上がっていることを示しています。後ろにある {{ic|state DOWN}} は関係ありません。<br />
<br />
=== アクセスポイント検索 ===<br />
<br />
利用できるアクセスポイントを見るには:<br />
<br />
# iw dev ''interface'' scan | less<br />
<br />
{{Note|{{ic|Interface does not support scanning}} と表示される場合、おそらくファームウェアのインストールを忘れているはずです。''iw'' が root 権限で実行されていない時にもこのメッセージが表示されることがあります。}}<br />
<br />
{{Tip|住んでいる地域によっては、利用できるネットワークを全て表示するために[[#規制範囲に従う|規制範囲]]を正しく設定する必要があります。}}<br />
<br />
チェックするべきポイント:<br />
<br />
* '''SSID:''' ネットワークの名前。<br />
* '''Signal:''' は dBm 単位でワイヤレスの信号強度を報告します(例: -100 から 0)。負の数が 0 に近づくほど、信号の品質が良いことを表します。良質なリンクや低品質なリンクで報告された強度を観察することで、それぞれの範囲を知ることができます。<br />
* '''Security:''' 直接は報告されません、{{ic|capability}} から始まる行を見て下さい。{{ic|capability: ESS Privacy ShortSlotTime (0x0411)}} のように {{ic|Privacy}} が含まれている場合、そのネットワークは保護されています。<br />
** {{ic|RSN}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:IEEE 802.11i-2004|Robust Security Network]] プロトコル、別名 WPA2 によって保護されています。<br />
** {{ic|WPA}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:Wi-Fi Protected Access|Wi-Fi Protected Access]] プロトコルによって保護されています。<br />
** {{ic|RSN}} や {{ic|WPA}} ブロックには以下の情報が含まれていることがあります:<br />
*** '''Group cipher:''' 値は TKIP, CCMP, その両方, もしくはその他。<br />
*** '''Pairwise ciphers:''' 値は TKIP, CCMP その両方, もしくはその他。Group cipher と同じ値である必要はありません。<br />
*** '''Authentication Suites:''' 値は PSK, 802.1x, もしくはその他。家庭用ルーターでは、一般的に PSK になるでしょう (''つまり''パスフレーズ)。大学などでは、ログインとパスワードが必要な 802.1x スイートになると思われます。利用するためにはどのキーマネージメント (例: EAP) とカプセル化 (例: PEAP) が使われているか知る必要があります。詳しくは [[Wikipedia:Authentication protocol]] と関連記事を見て下さい。<br />
** {{ic|Privacy}} があるのに {{ic|RSN}} や {{ic|WPA}} ブロックがない場合、WEP が使われています。<br />
<br />
=== 動作モードの設定 ===<br />
<br />
ワイヤレスカードの正しい動作モードを設定する必要があるかもしれません。具体的に言うと、[[アドホックネットワーク|アドホック]]ネットワークに接続したい場合、動作モードを {{ic|ibss}} に設定する必要があります:<br />
<br />
# iw dev ''interface'' set type ibss<br />
<br />
{{Note|カードによっては、動作モードを変更するためにワイヤレスインターフェースを ''down'' させておく必要があるかもしれません ({{ic|ip link set ''interface'' down}})。}}<br />
<br />
{{Note|動作モードを AP に変更する間 ({{ic|iw ''interface'' set type ap}})、以下のようなエラーが発生するでしょう:<br />
You need to run a management daemon, e.g. hostapd,<br />
see https://wireless.wiki.kernel.org/en/users/documentation/hostapd<br />
for more information on how to do that.<br />
<br />
これは、動作モードを {{ic|__ap}} に変更することによりバイパス可能です ({{ic|iw ''interface'' set type __ap}})。<br />
}}<br />
<br />
=== アクセスポイントへの接続 ===<br />
<br />
暗号化方式によっては、使用するワイヤレスデバイスをアクセスポイントと関連付けて、暗号化キーを渡す必要があります:<br />
<br />
* '''暗号化なし''' {{bc|# iw dev ''interface'' connect "''your_essid''"}}<br />
* '''WEP'''<br />
** 16進数、または ASCII キーを使用する(WEP のキーは固定長なので、キーの形式は自動的に判別されます): {{bc|# iw dev ''interface'' connect "''your_essid''" key 0:''your_key''}}<br />
** 16進数、または ASCII キーを使用し、3番目に設定したキーをデフォルトとして指定する(キーは 0 からカウントされます。4 つまで可能です): {{bc|# iw dev ''interface'' connect "''your_essid''" key d:2:''your_key''}}<br />
* '''その他'''<br />
** ''iw'' は WEP のみを扱えます。他の暗号化スキームを使用して接続する場合、下記の [[#認証]] を見てください。<br />
<br />
どの方法を使用しても、正しく関連付けできたかどうかは以下で確認できます:<br />
<br />
# iw dev ''interface'' link<br />
<br />
== 認証 ==<br />
<br />
Linux で Wi-Fi 認証を行う方法としては主に [[wpa_supplicant]] と [[iwd]] があります。<br />
<br />
=== WPA2 Personal ===<br />
<br />
WPA2 Personal(別名: WPA2-PSK)は [[Wikipedia:Wi-Fi Protected_Access|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] や [[iwd]] を用いて WPA2 Personal ネットワークに認証したり、[[ネットワークマネージャ]]を用いて接続したりできます。ネットワークに認証しただけの場合、接続はまだ完全には機能せず、[[ネットワーク設定#固定 IP アドレス|手動]]または[[DHCP]]クライアントを用いて IP アドレスとルートを割り当てる必要があります。<br />
<br />
=== WPA2 Enterprise ===<br />
<br />
''WPA2 Enterprise'' は [[Wikipedia:Wi-Fi_Protected_Access|Wi-Fi Protected Access]] のモードの1つです。''WPA2 Personal'' よりも優れたセキュリティとキー管理を提供し、VLAN や [[wikipedia:Network Access Protection|NAP]] といった他のエンタープライズタイプの機能を提供します。しかし、ユーザの認証を処理するために [[wikipedia:RADIUS|RADIUS]] サーバと呼ばれる外部の認証サーバを必要とします。これは、ワイヤレスルータとアクセスポイント(AP)の他に何も必要とせず、すべてのユーザに対して1つのパスフレーズかパスワードを使用する Personal モードとは対照的です。<br />
<br />
Enterprise モードでは、ユーザはユーザ名とパスワード、もしくはデジタル証明書、もしくはその両方を用いて Wi-Fi ネットワークにログインできます。それぞれのユーザは動的でユニークな暗号鍵を持っているため、ワイヤレスネットワーク上のユーザからユーザへの盗聴防止や暗号強度の向上に役立ちます。<br />
<br />
このセクションでは、WPA2 Enterprise モードを用いてワイヤレスアクセスポイントに接続するための[[ネットワーク設定#ネットワークマネージャ|ネットワーククライアント]]の設定について説明します。アクセスポイントそのもののセットアップに関する情報は [[ソフトウェアアクセスポイント#RADIUS]] を見てください。<br />
<br />
{{Note|Personal モードでは要求された時に単にパスフレーズを入力する必要があるだけですが、Enterprise モードではより複雑なクライアントの設定が必要です。クライアントはおそらくサーバの CA 証明書を(EAP-TLS を使用する場合はユーザごとの証明書も)インストールし、手動でワイヤレスセキュリティと 802.1X 認証を設定する必要があるでしょう。}}<br />
<br />
プロトコル間の比較は[http://deployingradius.com/documents/protocols/compatibility.html この表]を見てください。<br />
<br />
{{Warning|クライアントがサーバの CA 証明書を確認せずに WPA2 Enterprise を使用することは可能ですが、常に確認すべきです。なぜなら、アクセスポイントの認証なしでは、接続が中間者攻撃の対象となる可能性があるからです。このようなことが起こりうる理由は、接続のハンドシェイク自体を暗号化することはできる一方、広く使用されているセットアップでは平文または簡単に破れる [[#MS-CHAPv2]] を使用してパスワード自体を送信するからです。ゆえに、クライアントはパスワードを悪意のあるアクセスポイントに送信するかもしれません。その結果、そのアクセスポイントは接続をプロキシすることができてしまいます。}}<br />
<br />
==== MS-CHAPv2 ====<br />
<br />
PEAP の MSCHAPv2 type-2 認証を要求する WPA2-Enterprise ワイヤレスネットワークは時々、{{Pkg|ppp}} パッケージに加えて {{Pkg|pptpclient}} パッケージを必要とします。しかし、[[netctl]] は ppp-mppe 無しでも動作するようです。いずれの場合でも、MSCHAPv2 は非常に脆弱であるため、使用は推奨されません。しかし、他の手段は通常選択肢になりません。<br />
<br />
==== eduroam ====<br />
<br />
[[Wikipedia:eduroam|eduroam]] は研究、高等教育、継続教育のユーザー向けの、WPA2 Enterprise ベースの国際ローミングサービスです。<br />
<br />
{{Note|1=<nowiki/><br />
* このセクションにある如何なるプロファイルを適用する前に'''始めに'''機関の接続の詳細を確認してください。プロファイル例は機能することもセキュリティ要件を満たすことも保証されません。<br />
* 接続プロファイルを暗号化せずに保存する場合、root として {{ic|chmod 600 ''profile''}} を実行して、ファイルへの読み込みアクセスを root アカウントに制限することを推奨します。<br />
<br />
* NetworkManager での認証が失敗し続ける場合、[https://bbs.archlinux.org/viewtopic.php?pid=2104709#p2104709] で説明されているように {{ic|1=phase1-auth-flags=32}} を設定してみてください。<br />
* eduroam における接続問題が回避策と共に [[wpa_supplicant#eduroam などの MSCHAPv2 接続の問題]] 章で説明されています。<br />
<br />
}}<br />
<br />
{{Tip|[[NetworkManager]] 向けの設定は [https://cat.eduroam.org/ eduroam Configuration Assistant Tool] で生成できます。このツールは、{{Pkg|python}} と {{Pkg|dbus-python}} を必要とします。}}<br />
<br />
==== 手動/自動 セットアップ ====<br />
<br />
* [[wpa_supplicant#高度な使用方法|wpa_supplicant]] は、設定ファイルを直接編集するか CLI/GUI フロントエンドを使用することで設定できます。また、DHCP クライアントと組み合わせて使うことができます。接続の詳細を設定するには {{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} の例を見てください。<br />
* [[iwd#WPA Enterprise]]<br />
* [[NetworkManager]] は、''nmcli'' や ''nmtui''、[[NetworkManager#フロントエンド|グラフィカルなフロントエンド]]を使用して WPA2 Enterprise プロファイルを作成できます。<br />
* [[ConnMan]] は、ネットワークに[[ConnMan#Wi-Fi|接続]]する前に、別の設定ファイルを必要とします。詳細は {{man|5|connman-service.config}} と [[ConnMan#eduroam に接続]] を見てください。<br />
* [[netctl]] は、{{ic|1=WPAConfigSection=}} に含まれるブロックを通して wpa_supplicant の設定をサポートします。詳細は {{man|5|netctl.profile}} を見てください。<br />
: {{Note|特殊な引用符の規則が適用されます。{{man|5|netctl.profile|SPECIAL QUOTING RULES}} を見てください。}}<br />
: {{Tip|{{ic|WPAConfigSection}} に {{ic|1='ca_cert="/path/to/special/certificate.cer"'}} の行を追加することでカスタムの証明書を指定できます。}}<br />
<br />
=== WPA3 Personal ===<br />
<br />
WPA3 Personal (別名 WPA3-SAE) は、[[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] と [[iwd]] の両方が WPA3 Personal をサポートしています。<br />
<br />
=== WPA3 Enterprise ===<br />
<br />
WPA3 Enterprise は [[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] (バージョン 2:2.10-8 以降) は、WPA3 Enterprise をサポートしています。{{Bug|65314}} を参照してください。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 規制範囲に従う ===<br />
<br />
[[wikipedia:IEEE_802.11#Regulatory_domains_and_legal_compliance|規制範囲(regdomain)]] は、ワイヤレスハードウェアの動作が FCC や ETSI、他の組織により定められた地域の法律に準拠するようにワイヤレスドライバを設定する際に用いられます。規制範囲では [[wikipedia:ISO_3166-1_alpha-2|ISO 3166-1 alpha-2 国名コード]]を使用します。例えば、米国は "US"、中国は "CN"、日本は "JP" となります。<br />
<br />
規制範囲は、どのワイヤレスチャネルが利用できるかに関与します。2.4GHz 帯で許可されているチャネルは、米国では 1~11、日本では 1~14、他の殆どの国では 1~13 です。5Ghz 帯では、許可されるチャネルの規則は非常に複雑です。どちらの場合でも、より詳細な情報は[[wikipedia:List_of_WLAN_channels|この WLAN チャネルのリスト]]を見てください。<br />
<br />
規制範囲はまた、ワイヤレスデバイスから放射される電波の[[wikipedia:Equivalent_isotropically_radiated_power|実効輻射電力(EIRP)]]の制限にも関与します。これは送信パワー(Tx Power)から算出され、[[wikipedia:DBm|dBm/mBm (1dBm=100mBm) または mW (対数スケール)]]により測られます。2.4Ghz 帯では、米国とカナダでは最大が 30dBm、ヨーロッパのほとんどの地域では 20dBm、その他の地域では 20dBm~30dBm です。通常、5Ghz 帯では、最大値はより低く規定されます。より詳細な情報は [https://git.kernel.org/cgit/linux/kernel/git/linville/wireless-regdb.git/tree/db.txt wireless-regdb] を見てください(EIRP の dBm 値はそれぞれの行の2番めのカッコの中にあります)。<br />
<br />
規制範囲の設定を誤ると便利である場合があります(例えば、チャネルが混雑している時に未使用のチャネルを利用できたり、送信パワーを増やして送信範囲を広げたり)。しかし、地域の法律に違反したり、他の無線機器と干渉する可能性があるので、'''推奨されません'''。<br />
<br />
{{Pkg|wireless-regdb}} が[[インストール]]されていれば、カーネルは規制範囲のデータベースを直接読み込みます。直接読み込むため、セキュリティ上の理由により、カーネルは {{ic|CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS}} を yes に設定して、データベースの暗号検証を有効化してあるべきです。これは Arch のカーネルには有効化されていますが、他のカーネルを使用していたり自分でコンパイルしている場合、これを確認するべきです。さらなる情報は[http://docker.hd-wireless.com/Support/WifiRegulatoryDomainsinLinux このガイド]{{Dead link|2023|05|06|status=401}}で見られます。<br />
<br />
regdomain を設定するには、{{Pkg|wireless-regdb}} をインストールし、再起動してください。そして、{{ic|/etc/conf.d/wireless-regdom}} を編集し、適切なドメインをアンコメントしてください。<br />
<br />
現在の規制範囲を一時的に日本に設定するには:<br />
<br />
# iw reg set JP<br />
<br />
情報を見るには:<br />
<br />
$ iw reg get<br />
<br />
{{Note|デバイスが国名コード "00" に設定されている場合があります(これは "world regulatory domain" で、一般的な設定が含まれています)。この設定を解除できない場合、以下で説明されているように設定を確認してください。}}<br />
<br />
しかし、規制範囲を設定しても設定が変わらない場合があります。一部のデバイスは、デバイスの制限を規定する firmware/EEPROM で規制範囲が設定されています。これは、ソフトウェアでは[https://wiki.openwrt.org/doc/howto/wireless.utilities#iw 制限を増やすことしかできず]、制限を減らすことができないことを意味します。例えば、中国のデバイスはソフトウェアで米国の規制範囲に設定できるでしょうが、中国では EIRP の最大値が 20dBm と規定されているので、デバイスは米国の最大 EIRP である 30dBm で送信を行うことはできません。<br />
<br />
例えば、Atheros デバイスのファームウェアで規制範囲が設定されているかどうか確認するには:<br />
<br />
# dmesg | grep ath:<br />
<br />
他のチップセットの場合、"EEPROM" や "regdomain"、デバイスドライバの名前で検索すると良いかもしれません。<br />
<br />
規制範囲が正しく変更されたかどうかを確認し、利用可能なチャネル数や許可されている送信パワーを確認するには:<br />
<br />
$ iw list | grep -A 15 Frequencies:<br />
<br />
[[wpa_supplicant]] でも、{{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} の {{ic|1=country=}} 行で規制範囲を設定できます。<br />
<br />
[https://wireless.wiki.kernel.org/en/developers/documentation/cfg80211 cfg80211] カーネルモジュールでも[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を追加することで特定の規制範囲を使用するように設定できます(例: {{ic|1=options cfg80211 ieee80211_regdom=JP}})。このモジュールオプションは [https://wireless.wiki.kernel.org/en/developers/regulatory#the_ieee80211_regdom_module_parameter 古い規制範囲の実装]から継承されたもので、最近のカーネルでは {{ic|iw}} や {{ic|wpa_supplicant}} のようなユーティリティから {{ic|nl80211}} を通して来たようなユーザスペースの規制ヒントとして振る舞います。<br />
<br />
=== Rfkill の注意点 ===<br />
<br />
多くのノート PC にはワイヤレスカードの電源を切るハードウェアボタン/スイッチがあります。しかし、カードがカーネルによってブロックされている場合があります。これは {{man|8|rfkill}} によって操作できます。現在の状態を確認するには以下のコマンドを使用してください:<br />
<br />
{{hc|$ rfkill|<br />
ID TYPE DEVICE SOFT HARD<br />
0 bluetooth hci0 unblocked unblocked<br />
1 wlan phy0 unblocked unblocked<br />
}}<br />
<br />
カードが ''hard-blocked'' である場合、ハードウェアボタン/スイッチを使ってカードをアンロックできます。カードが ''hard-blocked'' でなく、''soft-blocked'' である場合、以下のコマンドを使用してください:<br />
<br />
# rfkill unblock wlan<br />
<br />
{{Note|ハードウェアボタンを押すと、カードが ''hard-blocked'' と ''soft-unblocked'' の状態から ''hard-unblocked'' と ''soft-blocked'' の状態になることがあります(つまり、''soft-blocked'' のビットがなんであっても切り替わるということです)。これは {{ic|rfkill}} [[カーネルモジュール]]のいくつかのオプションを切り替えることで調整できます。}}<br />
<br />
ワイヤレスカードを切り替えるハードウェアボタンはベンダー固有の[[カーネルモジュール]]によって操作されます。これらは [https://lwn.net/Articles/391230/ WMI] モジュールであることが多いです。非常に新しいハードウェアモデルでは特に、最新の安定版カーネルでモデルが完全にサポートされていないことがあります。この場合、カーネルのバグトラッカーで情報を探し、まだ報告されていない場合は各ベンダーのカーネルモジュールのメンテナにモデルを報告することが役に立ちます。<br />
<br />
[https://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill] も参照してください。<br />
<br />
=== 省電力 ===<br />
<br />
[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==トラブルシューティング==<br />
<br />
このセクションには、ドライバやファームウェアに強く関連しない問題のトラブルシューティングの一般的なヒントを含んでいます。ドライバやファームウェアに関するトピックは次のセクション [[#ドライバとファームウェアのトラブルシューティング]] を見てください。<br />
<br />
=== 一時的にネットワークにアクセス ===<br />
<br />
ハードウェアに問題があるときに、インターネットに接続してソフトウェアをダウンロードしたりフォーラムでヘルプを得たい場合、Android に内蔵されている機能を使って USB ケーブルでインターネット共有をすることができます。詳しくは [[Android テザリング#USB テザリング]]を見て下さい。<br />
<br />
=== ログの取得 ===<br />
<br />
トラブルシューティングで一番初めにするべきなのはシステムのログファイルを解析することです。全部を手でパースしないために、新しいターミナル(コンソール)を開いて、接続を試行している間のカーネルメッセージを次のコマンドで見ると良いでしょう:<br />
<br />
$ dmesg -w<br />
<br />
ネットワーク管理にツールを使っている場合、systemd でも同じことができます:<br />
<br />
# journalctl -f<br />
<br />
特定の理由コードによる認証解除を伴うワイヤレスエラーがよく起こります。例えば:<br />
<br />
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)<br />
<br />
[http://www.aboutcher.co.uk/2012/07/linux-wifi-deauthenticated-reason-codes/ 理由コード]を見ることでヒントを得られるかもしれません。コントロールメッセージの [https://wireless.wiki.kernel.org/en/developers/documentation/mac80211/auth-assoc-deauth flowchart] を見ることも役に立つかもしれません。ジャーナルのメッセージはこれに従って出力されます。<br />
<br />
この記事にあるそれぞれのツールは詳細なデバッグ出力をするオプションを用意しているので、必要ならば、解析の第二段階としてそれを使うことができます。<br />
<br />
=== IP アドレスの取得に失敗する ===<br />
<br />
{{Out of date|''iwconfig'' は非推奨となりました。[[#iw と wireless_tools の比較]] を参照してください。}}<br />
<br />
* 有線インターフェイスでは IP アドレスを取得できるのに、無線インターフェイスでは出来ない場合、ワイヤレスカードの[[#省電力|省電力機能]]を無効にしてみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
* ''waiting for carrier'' の問題でタイムアウトエラーになる場合、特定のデバイスのチャンネルモードを {{ic|auto}} に設定する必要があるかもしれません:<br />
<br />
# iwconfig ''wlan0'' channel auto<br />
<br />
チャンネルを auto に変える前に、あなたのワイヤレスインターフェースが止まっていることを確認してください。変更が成功したら、インターフェースを立ち上げなおして次の手順に進んで下さい。<br />
<br />
=== IP アドレスは取得できるのにホスト解決ができない ===<br />
<br />
[[wikipedia:Captive_portal|Captive Portal]] が存在する可能性のある公共の無線ネットワークを使っている場合、Web ブラウザから(HTTPS ではなく)HTTP ページをクエリしていることを確認してください。一部の captive portal は HTTP のみをリダイレクトするためです。<br />
これが原因ではない場合、[[ドメイン名前解決|ドメイン名を解決できることを確認してください]]。DHCP を通して広告した DNS サーバを使用することが必須である場合があります。<br />
<br />
=== RTS や fragmentation のしきい値を設定する ===<br />
<br />
無線ハードウェアはデフォルトでは RTS と fragmentation を無効化しています。帯域幅を犠牲にスループットを高める方法は2つ存在します。近隣にアクセスポイントが多く存在する環境で、干渉によってタイムアウトが発生したり接続が途切れる場合、設定によって改善する可能性があります。<br />
<br />
パケットの断片化は fragmentation の閾値を越えたパケットを分割してスループットを改善します。最大値 (2346) にするとパケットが超過することはなくなるため断片化を無効化にするのと同義です。最低値 (256) にするとスループットは最大になりますが、かなり帯域幅を消費します。設定するには:<br />
<br />
# iw phy0 set frag 512<br />
<br />
[[Wikipedia:IEEE 802.11 RTS/CTS|RTS]] は RTS の閾値を越えるパケットを送信する前にアクセスポイントとハンドシェイクを実行することでスループットを改善します。最大値 (2347) にするとパケットが超過しなくなり RTS を無効化するのと同じになります。最低値 (0) では全てのパケットで RTS が有効になりますが、大抵の場合は無駄になります。<br />
<br />
# iw phy0 set rts 500<br />
<br />
{{Note|{{ic|phy0}} は {{ic|iw phy}} で確認できるワイヤレスデバイスの名前に置き換えてください。}}<br />
<br />
=== ランダムに切断する ===<br />
<br />
==== 原因 #1 ====<br />
<br />
[[Journal]] に {{ic|1=wlan0: deauthenticating from MAC by local choice (reason=3)}} と表示され Wi-Fi 接続が失われる場合は、おそらく Wi-Fi カードの省電力機能がアグレッシブすぎるのが原因です。無線カードの[[電源管理#ネットワークインターフェイス|省電力機能]]を無効化してみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
あなたのカードが {{ic|iwconfig wlan0 power off}} をサポートしていない場合は、BIOS の電源管理のオプションを確認してください。Lenovo W520 では BIOS にある PCI-Express の電源管理を無効化すると問題が解決します。<br />
<br />
==== 原因 #2 ====<br />
<br />
頻繁に切断が発生し、[[Journal]] で以下のようなメッセージが表示される場合:<br />
<br />
{{ic|1=ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting}}<br />
<br />
ルーターの設定でチャンネルの帯域を {{ic|20MHz}} に変更してみてください。<br />
<br />
==== 原因 #3 ====<br />
<br />
ノートパソコン (例: Thinkpad X200 シリーズ) に rfkill のハードウェアスイッチが付いている場合、スイッチの経年劣化や設計不良により、スイッチ (またはメインボードへの接続) がゆるくなってしまっている可能性があります。結果として、スイッチに触れたり、ノートパソコンをちょっと動かすだけで、ハードウェアによる無線のブロックが発生して、インターネットから切断されているのかもしれません。このような問題に対するソフトウェアによる解決方法は存在しません。電気仕掛けのスイッチなら、BIOS にスイッチを無効化するオプションが存在することがあります。機械式のスイッチの場合 (ほとんどのスイッチはそうです)、スイッチを壊してしまうというのが解決法になります: メインボードや wifi カードとの接触点をハンダ付けする、スイッチを糊で固める、塞ぐ、またはスクリューナットを使ってスイッチを固く締める、取り除いてしまう。<br />
<br />
==== 原因 #4 ====<br />
<br />
頻繁に切断したり接続が成功しない他の原因として、ルーターが仕様に合わない挙動をする、ルーターの設定が誤っている、他の無線デバイスによる干渉、などが考えられます。<br />
<br />
トラブルシューティングするには、まず認証なしでルーターに接続できないか試して下さい。<br />
<br />
それで動作する場合、WPA/WPA2 を再度有効にして、ルーターの設定を変更してみてください。例えば:<br />
* ルーターが(クライアントで使っている)無線デバイスと比べて相当に旧式である場合、ルーターを別のワイヤレスモードに設定して動作するかテストする<br />
* mixed-mode 認証を無効化 (例: WPA2 と AES、またはルーターが古い場合 TKIP)<br />
* "auto" チャンネル以外の固定/自由チャンネルを使ってみる (隣家のルーターが古くて干渉している可能性があります)<br />
* [[Wikipedia:Wi-Fi Protected Setup|WPS]] を無効化<br />
* ルータの 5Ghz チャネルから [[Wikipedia:List of WLAN channels#5 GHz (802.11a/h/j/n/ac/ax)|non-DFS (Dynamic Frequency Selection) チャネル]] に変更する。そのようなチャネルでは、近くの気象レーダとの干渉により接続が[https://wifinigel.blogspot.com/2018/05/the-5ghz-problem-for-wi-fi-networks-dfs.html 落ちたり、いきなり切り替わったり]する場合があります。<br />
* クライアントに 5Ghz と 2.4Ghz のどちらが良いかを選ばせるのではなく 2.4Ghz のみに設定してみる。(後者はスループットが低いですが、遠距離からの接続でも安定した接続を得られます)<br />
* {{ic|1=cfg80211.cfg80211_disable_40mhz_24ghz=1}} を指定して {{ic|40Mhz}} 周波数帯を無効化 (スループットは悪くなりますが衝突は起きにくくなります)<br />
* ルーターにサービス品質に関する設定がある場合、設定が完全であることを確認 (例: Wi-Fi Multimedia (WMM) は任意の QoS フロー制御の一部です。問題のあるルーターファームウェアは設定が有効になっていない場合も有効であるかのように見せかけてくることがあります)<br />
<br />
==== 原因 #5 ====<br />
<br />
一部のワイヤレスアダプタ(例: Qualcomm Atheros AR9485)では、DMA エラーによりランダムな接続断が起こる可能性があります:<br />
<br />
{{hc|# journalctl -xb|2=<br />
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400<br />
wlp1s0: authenticate with 56:e7:ee:7b:55:bc<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3)<br />
wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out<br />
}}<br />
<br />
可能な回避策は [https://docs.kernel.org/arch/x86/iommu.html Intel IOMMU driver (DMA)] を無効化することです。[[カーネルパラメータ]]に {{ic|1=intel_iommu=off}} を追加してください[https://bbs.archlinux.org/viewtopic.php?pid=1907446#p1907446]。<br />
<br />
{{Note|Intel IOMMU ドライバは一部の高度な仮想マシン機能において必要です。(例: PCI パススルー)}}<br />
<br />
==== 原因 #6 ====<br />
<br />
ワイヤレス接続のための {{ic|iwlwifi}} と {{ic|iwlmvm}} のあるデバイスを使用していて、Wi-Fi カードがバッテリー駆動時に消えたように見える場合、iwlmvm で省電力設定を変更することでこれを修正できます。<br />
<br />
{{ic|/etc/modprobe.d/iwlmvm.conf}} ファイルが存在しなければ作成し、以下の行を追加してください:<br />
<br />
{{hc|/etc/modprobe.d/iwlmvm.conf|2=<br />
options iwlmvm power_scheme=1<br />
}}<br />
<br />
{{ic|power_scheme}} の 1 という数値は iwlmvm が "常に有効" になります。利用可能なオプションは以下のとおりです:<br />
<br />
{| class="wikitable"<br />
! 値 !! 説明<br />
|-<br />
| 1 || 常に有効<br />
|-<br />
| 2 || バランス<br />
|-<br />
| 3 || 低パワー<br />
|}<br />
<br />
この修正法は [https://forums.debian.net/viewtopic.php?t=121696#p576208] で発見されました。<br />
<br />
==== 原因 #7 ====<br />
<br />
デバイスが長時間使用されなかった場合(例: ファイルサーバ)、省電力機能により接続断が発生する場合があります。これにより、受信トラフィックがブロックされ、接続が妨げられます。"interface" の省電力機能を無効化してみてください:<br />
<br />
# iw dev ''interface'' set power_save off<br />
<br />
udev ルールを作成してこれを起動時に行うこともできます。[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==== 原因 #8 ====<br />
<br />
メッシュネットワーク (WiFi6 など) に接続している時に接続が時々途切れ、以下のようなメッセージが出力される場合:<br />
<br />
{{hc|# journalctl -b|<br />
kernel: wlan0: disconnect from AP aa:bb:cc:dd:ee:ff for new auth to 11:22:33:44:55:66<br />
}}<br />
<br />
ローミングの問題が発生しています。接続の方法と実際の問題に応じて、以下のことができます:<br />
<br />
* ローミングが望ましくない場合、NetworkManager で BSSID (上記の {{ic|aa:bb:cc:dd:ee:ff}}) をロックする ([[NetworkManager#定期的なネットワーク接続断、遅延、パケットロス (WiFi)]] を参照)。<br />
* [[Wpa_supplicant#ローミング]] で {{ic|bgscan}} の設定を調整する。<br />
<br />
=== 規制範囲が間違っているために Wi-Fi ネットワークが認識されない ===<br />
<br />
コンピュータの Wi-Fi チャンネルがユーザーの居住国の規制範囲に一致していない場合、Wi-Fi ネットワークが認識されないことがあります。[[#規制範囲に従う]]を参照して設定を行ってください。<br />
<br />
==ドライバとファームウェアのトラブルシューティング==<br />
<br />
このセクションでは、一般的な方法とは異なる、特定のチップセットのカーネルモジュールと''ファームウェア''をインストールする方法を説明します。<br />
<br />
モジュールの動作についての一般的な情報は[[カーネルモジュール]]を見て下さい。<br />
<br />
=== Ralink/Mediatek ===<br />
<br />
==== rt2x00 ====<br />
<br />
Ralink のチップセット用の統合ドライバー ({{ic|rt2500}}, {{ic|rt61}}, {{ic|rt73}} などを置き換えます)。このドライバーは Linux カーネル 2.6.24 から含まれており、チップに合わせて適切なモジュールをロードするだけで問題なく使うことができます: {{ic|rt2400pci}}, {{ic|rt2500pci}}, {{ic|rt2500usb}}, {{ic|rt61pci}}, {{ic|rt73usb}} は {{ic|rt2x00}} モジュールもそれぞれ自動でロードします。<br />
<br />
このモジュールでサポートされているデバイスの一覧はプロジェクトの [https://web.archive.org/web/20150507023412/http://rt2x00.serialmonkey.com/wiki/index.php/Hardware ホームページ] で見ることができます。<br />
<br />
; 追加情報<br />
* カーネル 3.0 から、rt2x00 は次のドライバーを含んでいます: {{ic|rt2800pci}}, {{ic|rt2870usb}}。<br />
* カーネル 3.0 から、staging ドライバー {{ic|rt2860sta}} と {{ic|rt2870sta}} は mainline ドライバー {{ic|rt2800pci}} と {{ic|rt2800usb}} によって置き換えられました[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fefecc6989b4b24276797270c0e229c07be02ad3]。<br />
* デバイスによっては {{ic|iwpriv}} を使って様々なオプションを設定することができます。これらのオプションについては Ralink から入手できる [https://web.archive.org/web/20111105120212/http://web.ralinktech.com:80/ralink/Home/Support/Linux.html source tarballs] にまとめられています。<br />
<br />
==== rt3090 ====<br />
<br />
rt3090 を使っているデバイスには {{ic|rt2800pci}} ドライバを使うことができますが、うまく動作しないことがあります (例えば、時々 2Mb/s 以上の速度が出なくなります)。<br />
<br />
==== rt3290 ====<br />
<br />
rt3290 チップセットはカーネルの {{ic|rt2800pci}} モジュールによって認識されます。ただし、問題が起こることもあり、[https://bbs.archlinux.org/viewtopic.php?id=161952 そのような場合]はパッチがあてられた Ralink ドライバーに戻すと良いようです。<br />
<br />
==== rt3573 ====<br />
<br />
2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバが必要かもしれません。様々な製造会社がそれを使っています、[https://bbs.archlinux.org/viewtopic.php?pid=1164228#p1164228 Belkin N750 DB wireless 無線 USB アダプタ]のスレッドを見て下さい。<br />
<br />
==== mt7612u ====<br />
<br />
2014 年以降の新しい商号 Mediatek でリリースされている最新のチップセットです。AC1200 または AC1300 チップセットになります。[https://www.mediatek.com/products/broadbandWifi/mt7612u サポートページ] で Linux 用のドライバーがメーカーから公開されています。カーネル 5.5 より、同梱されている {{ic|mt76}} ドライバによりサポートされているはずです。<br />
<br />
=== Realtek ===<br />
<br />
Realtek のチップセットと仕様のリストは [https://wikidevi.wi-cat.ru/Realtek] で見られます。<br />
<br />
==== rtl8192cu ====<br />
<br />
このドライバーはカーネルに含まれていますが、多くのユーザーがネットワークのスキャンはできても接続が出来ないと報告しています。<br />
<br />
問題が起こる場合は {{AUR|8192cu-dkms}} パッケージで改善するかもしれません。<br />
<br />
==== rtl8723ae/rtl8723be ====<br />
<br />
メインラインの Linux カーネルには {{ic|rtl8723ae}} と {{ic|rtl8723be}} モジュールが含まれています。<br />
<br />
このカードの省電力機能についてエラーが発生することがあります。症状としては、ときどき上位のネットワークマネージャ ([[netctl]], [[NetworkManager]]) で認識されなくなり切断されます。このエラーは {{ic|dmesg -w}} や {{ic|journalctl -f}} を実行して省電力機能や {{ic|rtl8723ae}}/{{ic|rtl8723be}} モジュールに関連するメッセージを探すことで確認できます。この問題を解決するには、{{ic|1=fwlps=0}} [[カーネルモジュールパラメータ]]を使って、WiFi カードが自動的にスリープ状態にならないようにしてください。<br />
<br />
信号が弱い場合、デバイスにアンテナがひとつしか接続されておらず自動モードが機能していない可能性があります。{{ic|1=ant_sel=1}} や {{ic|1=ant_sel=2}} カーネルオプションでアンテナを強制的に設定することができます [https://bbs.archlinux.org/viewtopic.php?id=208472]。<br />
<br />
==== rtl88xxau ====<br />
<br />
Realtek の rtl8811au/rtl8812au/rtl8814au/rtl8821au チップセットは AC600 から AC1900 までの様々な USB アダプタ用に設計されています。いくつかのパッケージは様々なカーネルドライバを提供しており、これらは [[DKMS]]({{Pkg|dkms}} パッケージとインストールされているカーネルのヘッダファイル) を必要とします:<br />
<br />
{| class="wikitable"<br />
! チップセット || パッケージ || ノート<br />
|-<br />
| rtl8811au, rtl8812au, rtl8821au || {{AUR|rtl88xxau-aircrack-dkms-git}} || 8811au, 8812au, 8821au チップセット用の Aircrack-ng カーネルモジュール。モニタモードとインジェクションモードサポート。<br />
|-<br />
| rtl8812au || {{AUR|rtl8812au-dkms-git}} || rtl8812au '''のみ'''用の公式の最新 Realtek ドライババージョン。<br />
|-<br />
| rtl8811au, rtl8821au || {{AUR|rtl8821au-dkms-git}} || rtl8821au 用のより新しいドライババージョン。<br />
|-<br />
| rtl8814au || {{AUR|rtl8814au-dkms-git}} || おそらく rtl8813au に対しても機能する。<br />
|}<br />
<br />
==== rtl8811cu/rtl8821cu ====<br />
<br />
{{AUR|rtl8821cu-dkms-git}} は Realtek 8811cu と 8821cu チップセット用のカーネルモジュールを提供します。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{ic|8821cu}} がロードされていてもワイヤレスインターフェイスが見つからない場合、おそらく {{ic|rtw_RFE_type}} [[カーネルモジュールパラメータ]]を手動で指定する必要があります[https://forums.linuxmint.com/viewtopic.php?p=1913190&sid=68f2d6eff91cd47e184ae5a56385dc02#p1913190][https://github.com/brektrou/rtl8821CU/issues/83]。例えば {{ic|1=rtw_RFE_type=0x26}} や他の値を試してみると、機能するかもしれません。<br />
<br />
==== rtl8821ce ====<br />
<br />
{{AUR|rtl8821ce-dkms-git}} は Realtek 8821ce チップセット用のカーネルモジュールを提供します。このチップセットは Asus X543UA に搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{Note|1=Realtek により提供されているデフォルトの {{ic|rtl8821ce}} モジュールが Linux カーネル ≥ 5.9 で壊れており、接続品質が悪くなると報告されています[https://bbs.archlinux.org/viewtopic.php?id=273440]。上記の AUR バージョンを優先して使用するべきです。[https://github.com/tomaspinho/rtl8821ce#wi-fi-not-working-for-kernel--59 GitHub での文章] を見てください。デフォルトのカーネルドライバ ({{ic|rtw88_8821ce}}) が使用されているかどうかを確認するには {{ic|lspci -k}} を使用してください。もし使用されているのであれば、[[ブラックリスト]]にそれを追加し、システムを再起動してください。}}<br />
<br />
==== rtl8822bu ====<br />
<br />
{{AUR|rtl88x2bu-dkms-git}} は Realtek 8822bu チップセット用のカーネルモジュールを提供します。このチップセットは Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac、TP-Link Archer T3U アダプタに搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
==== rtl8xxxu ====<br />
<br />
サードパーティ製のモジュールをコンパイルすることでメインラインカーネルの {{ic|rtl8xxxu}} モジュールの問題を解決できる場合があります。ソースコードは [https://github.com/lwfinger?tab=repositories GitHub リポジトリ] に存在します。<br />
<br />
一部のドライバーは AUR の {{AUR|rtl8723bu-dkms-git}} パッケージなどでインストールできます。<br />
<br />
==== RTW88 ====<br />
<br />
RTW88 カーネルモジュールパッチセットは、最近カーネルメーリングリストに投稿されました。うまくいけば、メインストリームカーネルに導入されるでしょう。<br />
<br />
上流のカーネル、およびこのパッチセットが適用されたカーネルは、RTW88 チップセットのサポートを有効化するように設定・コンパイルされれば、ほとんどの RTW88 チップデバイスをサポートします。{{Pkg|linux-zen}} と {{AUR|linux-zen-git}} には両方このパッチが含まれており、パッケージングされたバージョンにはすでにビルド済みのモジュールが含まれています。<br />
<br />
このドライバは次をサポートします: 882BE, 8822BU, 8822CE, 8822CU, 8723DE, 8723DU, 8821CE, 8821CU。<br />
<br />
==== RTW89 ====<br />
<br />
RTW89 カーネルモジュールは、上流のカーネルにマージされており、新しい Realtek ワイヤレスチップセットのサポートを提供します。<br />
<br />
このドライバは次をサポートします: 8852AE, 8851BE, 8852BE, 8852CE。<br />
<br />
一部のコンピュータで接続が不安定になることがあります。特に最近の Lenovo と HP のモデルに多いようです。<br />
次の設定を用いて ASPM 関係の機能を無効にしてみてください。<br />
<br />
{{hc|/etc/modprobe.d/70-rtw89.conf|2=<br />
options rtw89_pci disable_aspm_l1=y disable_aspm_l1ss<br />
}}<br />
<br />
参考:<br />
* https://github.com/lwfinger/rtw89#option-configuration<br />
* https://github.com/lwfinger/rtw89/issues/275#issuecomment-1784155449<br />
<br />
=== Atheros ===<br />
<br />
[http://madwifi-project.org/ MadWifi チーム] によって、Atheros チップセットを使っているデバイス用に3つのモジュールがメンテナンスされています:<br />
<br />
* {{ic|madwifi}} は古い、旧式のドライバーです。2.6.39.1 から Arch のカーネルには含まれていません[https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/message/N5VBSKHSPV72HLNSZHPZXEBENOSB542C/]。<br />
* {{ic|ath5k}} はより新しいドライバーで {{ic|madwifi}} ドライバーを置き換えます。現在、チップセットによってはベターな選択肢ですが、全てのチップセットがサポートされているわけではありません(下を見て下さい)。<br />
* {{ic|ath9k}} はより新しいドライバです。より新しい Atheros チップセット用に作られています。802.11n 対応のチップは全てサポートしています。<br />
* {{ic|ath12k}} は最も新しいドライバです。Qualcomm Wi-Fi 7 (IEEE 802.11be) デバイス用の Linux ドライバです。ath12k は mac80211 を使用します。<br />
<br />
Atheros デバイス向けに他にも複数のドライバーが存在します。詳しくは [https://wireless.wiki.kernel.org/en/users/Drivers/Atheros#pcipci-eahb_driversrs Linux Wireless ドキュメント] を見て下さい。<br />
<br />
==== ath5k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath5k<br />
* [[Debian:ath5k]]<br />
<br />
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、{{ic|ath5k}} モジュールに {{ic|1=nohwcrypt=1}} オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくは[[カーネルモジュール#モジュールオプションを設定する]]を見て下さい。<br />
<br />
ラップトップによっては無線 LED インディケータが赤と青に点滅する問題が発生することがあります。この問題を解決するには、以下を実行して下さい:<br />
<br />
# echo none > /sys/class/leds/ath5k-phy0::tx/trigger<br />
# echo none > /sys/class/leds/ath5k-phy0::rx/trigger<br />
<br />
もしくは [https://bugzilla.redhat.com/show_bug.cgi?id=618232 このバグレポート] を見て下さい。<br />
<br />
==== ath9k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath9k<br />
* [[Debian:ath9k]]<br />
<br />
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。{{ic|ath9k}} モジュールに対して {{ic|1=nohwcrypt=1}} [[カーネルモジュールパラメータ]]を設定することでこれを修正することができる場合があります。<br />
<br />
{{Note|lsmod コマンドを使って使用しているモジュールの名前を確認して必要に応じて {{ic|ath9k}} を置き換えてください (例: ath9k_htc)。}}<br />
<br />
サポートと開発のための [https://web.archive.org/web/20201118232556/http://lists.ath9k.org/mailman/listinfo/ath9k-devel ath9k メーリングリスト] が存在します。<br />
<br />
==== ath12k ====<br />
<br />
参照:<br />
* https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/log/?h=ath-next<br />
* https://www.qualcomm.com/products/technology/wi-fi/fastconnect/fastconnect-7800<br />
<br />
# cd /lib/firmware/ath12k/WCN7850/hw2.0<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/board.bin<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/regdb.bin<br />
<br />
===== 省電力機能 =====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Documentation/dynamic-power-save Linux Wireless] には AR9280 よりも新しい Atheros 製の ath9k シングルチップでは動的な省電力機能が有効になると書かれていますが、一部のデバイス (例: AR9285) では {{Pkg|powertop}} を使って確認すると省電力機能が無効になっていることがわかります。そのような場合、手動で有効にしてください。<br />
<br />
ただし一部のデバイス (例: AR9285) では省電力機能を有効にすると以下のようなエラーが発生します:<br />
<br />
{{hc|# iw dev wlan0 set power_save on|<br />
command failed: Operation not supported (-95)<br />
}}<br />
<br />
解決策は、{{ic|ath9k}} モジュールに対して {{ic|1=ps_enable=1}} [[カーネルモジュールパラメータ]]を設定することです。<br />
<br />
=== Intel ===<br />
<br />
==== iwlegacy ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlegacy iwlegacy] は Intel の 3945, 4965 ワイヤレスチップのワイヤレスドライバーです。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。<br />
<br />
[[udev]] が自動でドライバーをロードするはずですが、ロードされないときは手動で {{ic|iwl3945}} か {{ic|iwl4965}} をロードしてください。詳しくは[[カーネルモジュール#ロード]]を見てください。<br />
<br />
信号品質が極端に悪い場合やネットワークに接続できない場合、802.11n を無効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwl4965.conf|2=<br />
options iwl4965 11n_disable=1<br />
}}<br />
<br />
==== iwlwifi ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi iwlwifi] は 5100AGN, 5300AGN, 5350AGN などの Intel の最新のワイヤレスチップのワイヤレスドライバーです。[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#Supported_Devices full list of supported devices] を見て下さい。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。{{AUR|linux-firmware-iwlwifi-git}}{{Broken package link|package not found}} パッケージをインストールすることで新しいバージョンを使用することができます。<br />
<br />
接続品質が悪いといった一般的なネットワーク接続の問題が起こる場合は、802.11n を無効にしてソフトウェア暗号を有効にしてみて下さい:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=1 swcrypto=1<br />
}}<br />
<br />
802.11n モードでアップリンクの速度が遅い (例: 20Mbps) 場合は、アンテナのアグリゲーションを有効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=8<br />
}}<br />
<br />
オプションの名前に惑わされてはいけません。値が {{ic|8}} に設定されている場合、無効化ではなくアンテナのアグリゲーションが再有効化されます [https://forums.gentoo.org/viewtopic-t-996692.html?sid=81bdfa435c089360bdfd9368fe0339a9] [https://bugzilla.kernel.org/show_bug.cgi?id=81571]。<br />
<br />
これで上手くいかない場合、無線アダプターの[[電源管理#ネットワークインターフェイス|省電力モード]]を切ってみて下さい。<br />
<br />
[https://ubuntuforums.org/showthread.php?t=2183486&p=12845473#post12845473 一部のユーザ]はこれでうまく行かないようです。[https://ubuntuforums.org/showthread.php?t=2205733&p=12935783#post12935783 あるユーザ]はルータの設定で N を無効化することにより解決しました。これが唯一の解決策であることは何度も知られています。上記の2つ目のリンクでは 5Ghz オプションに試す価値があると言及されています。<br />
<br />
802.11ax (WiFi 6) アクセスポイントがあり、ビーコンの検出や不安定な接続に関する問題がある場合、[https://www.intel.com/content/www/us/en/support/articles/000054799/network-and-i-o/wireless.html Intel Article 54799] を見てみてください。<br />
<br />
{{Note|{{ic|1=11n_disable=0}} を使うと 802.11ac も妨げられ、より遅いプロトコル(5Ghz 帯での 802.11a か 2.4Ghz 帯での 802.11b/g)での接続しかできなくなります。}}<br />
<br />
===== Bluetooth の共存 =====<br />
<br />
Bluetooth ヘッドセットを接続できない場合やダウンロード速度があまり出ない場合、Bluetooth の共存を無効化してみてください [https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#wi-fibluetooth_coexistence]:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi bt_coex_active=0<br />
}}<br />
<br />
{{Note|カーネルバージョン 5.8 より、{{ic|bt_coex_active}} と {{ic|sw_crypto}} モジュールオプションは、{{ic|iwlmvm}} カーネルモジュールにより操作されるハードウェアに対しては無効化されています。{{ic|iwldvm}} モジュールにより操作されるより古いハードウェアでは、上記のオプションはまだ有効です。<br />
}}<br />
<br />
===== ファームウェアの問題 =====<br />
<br />
ドライバがスタックトレースとエラーを出力する問題があり、これによりスタッタリングが発生する可能性があります。<br />
<br />
{{hc|# dmesg|2=<br />
Microcode SW error detected. Restarting 0x2000000.<br />
}}<br />
<br />
または、単に雑多な問題が発生する場合もあります (例: [https://web.archive.org/web/20221119172710/https://www.reddit.com/r/archlinux/comments/x0v5jj/rant_intel_wifi_firmwares_are_utter_garbage/ 5GHz での接続の問題、ランダムな接続断、復帰時に接続なし])。<br />
<br />
ファームウェアが問題の原因であることを確認するには、{{Pkg|linux-firmware}} パッケージを[[ダウングレード]]してみてください。<br />
<br />
確認が取れたら、バグのあるファームウェアファイルを移動して、古いバージョンが読み込まれるようにしてください (こうすることで、{{Pkg|linux-firmware}} を最新の状態にできます。{{Pkg|linux-firmware}} は Intel WiFi カード以外のファームウェアアップデートも提供するからです。):<br />
<br />
# for i in {64..73} ; do mv /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz.bak ; done<br />
<br />
アップデートのたびにこの手順を繰り返さないようにするために、{{ic|pacman.conf}} 内の {{ic|NoExtract}} 配列でワイルドカードを使って、該当するファイルのインストールをブロックしてください。[[pacman#インストールさせないファイルを設定]] を参照してください。<br />
<br />
===== Windows から起動するとアダプタが検出されない =====<br />
<br />
Windows のセッション終了後に Wifi アダプタが検出されない場合、Windows の'''高速スタートアップ'''機能が原因であるかもしれません(この機能はデフォルトで有効になっています)。[[Windows と Arch のデュアルブート#Windows 設定|高速スタートアップを無効化]]してみてください。[https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi#about_dual-boot_with_windows_and_fast-boot_enabled iwlwifi カーネルドライバ wiki にはこれのエントリがあります]。<br />
<br />
==== LED の点滅を無効化する ====<br />
<br />
{{Note|{{ic|iwlegacy}} と {{ic|iwlwifi}} ドライバーで動作します。}}<br />
<br />
デフォルト設定ではモジュールの動作中 LED が点滅するようになっています。人によってはこれが鬱陶しく感じるかもしれません。Wi-Fi を使っている時に LED を固定するには、[[systemd-tmpfiles]] を使って下さい:<br />
<br />
{{hc|/etc/tmpfiles.d/phy0-led.conf|<br />
w /sys/class/leds/phy0-led/trigger - - - - phy0radio<br />
}}<br />
<br />
変更を適用するには、{{ic|systemd-tmpfiles --create phy0-led.conf}} を実行するか再起動してください。<br />
<br />
LED のトリガの全ての設定値を見るには:<br />
<br />
# cat /sys/class/leds/phy0-led/trigger<br />
<br />
{{Tip|{{ic|/sys/class/leds/phy0-led}} がない場合、{{ic|1=led_mode="1"}} [[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を使ってみて下さい。これは {{ic|iwlwifi}} と {{ic|iwlegacy}} ドライバの両方で有効なはずです。}}<br />
<br />
=== Broadcom ===<br />
<br />
[[Broadcom ワイヤレス]]を見て下さい。<br />
<br />
=== 他のドライバー・デバイス ===<br />
<br />
==== Tenda w322u ====<br />
この Tenda カードは {{ic|rt2870sta}} デバイスとして扱って下さい。[[#rt2x00]] を参照。<br />
<br />
==== orinoco ====<br />
カーネルパッケージの一部となっているので、別個インストールする必要はありません。<br />
<br />
いくつかの Orinoco チップセットは Hermes I/II です。{{ic|orinoco_cs}} の代わりに {{ic|wlags49_h1_cs}} を使うことで WPA サポートを得ることができます。このドライバーを使うには {{ic|orinoco_cs}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。<br />
<br />
==== prism54 ====<br />
<br />
このドライバー {{ic|p54}} はカーネルに含まれていますが、[https://wireless.wiki.kernel.org/en/users/drivers/p54#firmware このサイト] からあなたのカードに対応するファームウェアをダウンロードして {{ic|/usr/lib/firmware}} ディレクトリにインストールする必要があります。<br />
<br />
{{Note|古いドライバー {{ic|prism54}} が新しいドライバー ({{ic|p54pci}} や {{ic|p54usb}}) と衝突することがあります。{{ic|prism54}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。}}<br />
<br />
==== zd1211rw ====<br />
<br />
[https://sourceforge.net/projects/zd1211/ {{ic|zd1211rw}}] は ZyDAS ZD1211 802.11b/g USB WLAN チップセット用のドライバで、最近の Linux カーネルに含まれています。サポートされているドライバの一覧は [https://wireless.wiki.kernel.org/en/users/Drivers/zd1211rw/devices] を見て下さい。{{AUR|zd1211-firmware}} パッケージとして提供されているファームウェアを[[インストール]]することだけが必要です。<br />
<br />
==== hostap_cs ====<br />
<br />
[https://hostap.epitest.fi/ Host AP] は Intersil の Prism2/2.5/3 チップセットを使ったワイヤレス LAN カードの Linux ドライバです。ドライバは Linux カーネルに含まれています。<br />
<br />
{{Note|{{ic|orinico_cs}} と問題を発生することがあるので、[[カーネルモジュール#ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ndiswrapper ===<br />
<br />
Ndiswrapper は Linux で Windows のドライバーを使うためのラッパースクリプトです。Windows のドライバーに含まれる ''*.inf'' と ''.sys'' ファイルが必要です。<br />
<br />
{{Note|ドライバがあなたのアーキテクチャ (例: 32/64 ビット) に適合しているかも確認してください。}}<br />
<br />
{{Tip|''*.exe'' ファイルからこれらのファイルを展開する必要がある場合は、{{pkg|cabextract}} を使って下さい。}}<br />
<br />
ndiswrapper を設定するには以下の手順に従って下さい。<br />
<br />
# {{Pkg|ndiswrapper-dkms}} をインストールする。<br />
# ドライバを {{ic|/etc/ndiswrapper/}} にインストールする: {{bc|# ndiswrapper -i filename.inf}}<br />
# ndiswrapper にインストールされたドライバをすべて一覧表示する: {{bc|$ ndiswrapper -l}}<br />
# ndiswrapper に設定ファイルを {{ic|/etc/modprobe.d/ndiswrapper.conf}} に書き出させる: {{bc|# ndiswrapper -m<br># depmod -a}}<br />
<br />
ndiswrapper のインストールはほとんど終わりました。[[カーネルモジュール#モジュールの自動ロード|起動時にモジュールをロード]]できます。<br />
<br />
ndiswrapper がロードされるかテストしてください:<br />
<br />
# modprobe ndiswrapper<br />
# iwconfig<br />
<br />
''wlan0'' が表示されるはずです。問題が起こった場合は次のページを見て下さい:<br />
[https://sourceforge.net/p/ndiswrapper/ndiswrapper/HowTos/ ndiswrapper howto]、[https://sourceforge.net/p/ndiswrapper/ndiswrapper/FAQ/ ndiswrapper FAQ]。<br />
<br />
== 参照 ==<br />
<br />
* [https://wireless.wiki.kernel.org/ Linux Wireless プロジェクト]<br />
* [http://aircrack-ng.org/doku.php?id=install_drivers Aircrack-ng guide on installing drivers]<br />
* [https://wikidevi.wi-cat.ru Wireless Device Database Wiki] (このフォークは元の wiki が終了してから wi-cat.ru によってホストされています。これより完全ではないバージョンは: [http://en.techinfodepot.shoutwiki.com TechInfoDepot], [https://deviwiki.com/ deviwiki])<br />
* https://github.com/morrownr/USB-WiFi – 様々な Wi-Fi アダプタやチップセットに関する情報や、パフォーマンステスト、ドライバの情報、一般情報を含むサイト。<br />
<br />
{{TranslationStatus|Network configuration/Wireless|2024-02-22|800336}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A/%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9&diff=36644
ネットワーク設定/ワイヤレス
2024-03-27T02:28:16Z
<p>AshMyzk: /* WPA2 Enterprise */ 訳を修正</p>
<hr />
<div>[[Category:無線ネットワーク]]<br />
[[Category:ネットワーク設定]]<br />
[[de:(W)LAN und Arch Linux]]<br />
[[en:Network configuration/Wireless]]<br />
[[pt:Network configuration (Português)/Wireless]]<br />
[[ru:Network configuration (Русский)/Wireless]]<br />
[[zh-hans:网络配置/无线网络配置]]<br />
{{Related articles start}}<br />
{{Related|ソフトウェアアクセスポイント}}<br />
{{Related|アドホックネットワーク}}<br />
{{Related|インターネット共有}}<br />
{{Related|ワイヤレスボンディング}}<br />
{{Related|ネットワークデバッグ}}<br />
{{Related|Bluetooth}}<br />
{{Related articles end}}<br />
<br />
ネットワーク設定に関するメインの記事は [[ネットワーク設定]] です。<br />
<br />
ワイヤレスネットワークの設定は2段階で行います; まずワイヤレスデバイスを使うために正しいドライバがインストールされているか確認し(インストールメディア上では利用できても、明示的にインストールする必要があります)、インターフェースを設定します。次に、ワイヤレス接続を管理する方法を選びます。この記事では両方をカバーしています。また、ワイヤレス管理ツールへの追加リンクもあります。<br />
<br />
[[#iw]] セクションでは {{Pkg|iw}} を使ってワイヤレスネットワークインターフェイス/ワイヤレス LAN を手動で管理する方法を説明しています。[[ネットワーク設定#ネットワークマネージャ]] セクションでは、ワイヤレスインターフェイスを自動的に管理する際に使用できるいくつかのプログラムについて説明しています。それらはすべてネットワークプロファイルのサポートを含んでおり(ノート PC のようにワイヤレスネットワークを頻繁に切り替える際に便利です)、それらのうち一部は GUI を含んでいます。<br />
<br />
== デバイスドライバ ==<br />
<br />
デフォルトの Arch Linux カーネルは''モジュール式''です、つまり、マシンハードウェアに必要なドライバの多くはハードドライブに置かれ、[[カーネルモジュール|モジュール]]として利用可能となります。起動時に、[[udev]] がハードウェアの一覧を作成し、対応するハードウェア用の適切なモジュール(ドライバ)をロードします。これにより、ネットワーク''インターフェイス''の作成が可能になります。<br />
<br />
一部のワイヤレスチップセットは、対応するドライバに加えてファームウェアも必要とします。多くのファームウェアイメージは、{{Pkg|linux-firmware}} パッケージによって提供されますが、プロプライエタリなファームウェアイメージは含まれていないため別途インストールする必要があります。[[#ドライバー・ファームウェアをインストールする]]で説明されています。<br />
<br />
{{Note|適切なモジュールが起動時に udev によって読み込まれない場合、[[カーネルモジュール#手動でモジュールを扱う|手動でロードしてください]]。udev がひとつのデバイスに対して2つ以上のドライバをロードしてしまうと、競合が起こり、設定に失敗してしまう場合があります。望まないモジュールを[[ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ドライバーの状態を確認する ===<br />
<br />
あなたのカード用のドライバーがロードされていることを確認するには、{{ic|lspci -k}} か {{ic|lsusb -v}} の出力を見てください (カードが PCI(e) と USB のどちらに接続されているかに依存します)。カーネルドライバーが使われているなら、例えば以下のように表示されるはずです:<br />
<br />
{{hc|$ lspci -k|<br />
06:00.0 Network controller: Intel Corporation WiFi Link 5100<br />
Subsystem: Intel Corporation WiFi Link 5100 AGN<br />
Kernel driver in use: iwlwifi<br />
Kernel modules: iwlwifi<br />
}}<br />
<br />
{{Note|カードが USB デバイスの場合、{{ic|<nowiki>dmesg | grep usbcore</nowiki>}} を実行すると {{ic|usbcore: registered new interface driver rtl8187}} のように表示されるはずです。}}<br />
<br />
また、{{ic|ip link}} コマンドの出力を確認し、ワイヤレスインターフェイスが作成されたことを確認してください。通常、ワイヤレス[[ネットワークインターフェイス]]の名前は "w" で始まります (例: {{ic|wlan0}}、{{ic|wlp2s0}})。そして、以下のコマンドでそのインターフェイスを up 状態にしてください:<br />
<br />
# ip link set ''interface'' up<br />
<br />
例えば、インターフェイスが {{ic|wlan0}} である場合、実行すべきコマンドは {{ic|ip link set wlan0 up}} となります。<br />
<br />
{{Note|<br />
* {{ic|RTNETLINK answers: Operation not possible due to RF-kill}} のようなエラーが発生する場合、デバイスがハードロックまたはソフトロックされていないことを確認してください。詳細は [[#Rfkill の注意点]] を参照してください。<br />
* {{ic|SIOCSIFFLAGS: No such file or directory}} というエラーメッセージが発生する場合、ほぼ確実に、あなたのワイヤレスチップセットが機能するにはファームウェアが必要であることを意味します。<br />
}}<br />
<br />
ファームウェアがロードされたことを示すカーネルメッセージを確認してください:<br />
<br />
{{hc|# dmesg {{!}} grep firmware|<br />
[ 7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm<br />
}}<br />
<br />
関連する出力がない場合、先ほど特定したモジュール (この例では {{ic|iwlwifi}}) の完全な出力メッセージを確認して、関連するメッセージやさらなる問題を見つけてください:<br />
<br />
{{hc|# dmesg {{!}} grep iwlwifi|2=<br />
[ 12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X<br />
[ 12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm<br />
[ 12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled<br />
...<br />
[ 12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B<br />
}}<br />
<br />
カーネルモジュールのロードに成功し、インターフェイスが up 状態になっている場合、次のセクションはスキップすることができます。<br />
<br />
=== ドライバー・ファームウェアをインストールする ===<br />
<br />
以下のリストを確認し、あなたのカードがサポートされているか確認してください:<br />
<br />
* [https://wireless.wiki.kernel.org/en/users/drivers 既存の Linux ワイヤレスドライバー]の表を参照し、サポートされているデバイスのリストを含む特定のドライバーのページにアクセスしてください。[https://wikidevi.wi-cat.ru/List_of_Wi-Fi_Device_IDs_in_Linux List of Wi-Fi Device IDs in Linux] もあります。<br />
* [https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported Ubuntu Wiki] には、ワイヤレスカードと、そのカードが Linux カーネルかユーザ空間のドライバによってサポートされているかどうかの良質な一覧が (ドライバ名も含めて) あります。<br />
* [http://linux-wless.passys.nl/ Linux Wireless Support] と Linux Questions の [https://web.archive.org/web/20110711100256/http://www.linuxquestions.org/hcl/index.php?cat=10 Hardware Compatibility List] (HCL) にも、カーネルフレンドリーなハードウェアの良質なデータベースがあります。<br />
<br />
注意点として、一部のベンダーは、異なるチップセットを含む製品を出荷しています (その製品の識別子が同じであるとしてもです)。(USB デバイスの場合) usb-id や (PCI デバイスの場合) pci-id のみが信頼できます。<br />
<br />
あなたのワイヤレスカードが上記のリストにあった場合、このページの [[#ドライバとファームウェアのトラブルシューティング]] サブセクションを見て下さい、特定のワイヤレスカードのドライバーやファームウェアのインストール情報が載っています。その後、また[[#ドライバーの状態を確認する|ドライバーの状態を確認]]してください。<br />
<br />
ワイヤレスハードウェアが上記のリストになかった場合、おそらくサポートしているのが Windows のみだと思われます (一部の Broadcom、3com など)。その場合、[[#ndiswrapper]] を使用してみてください。<br />
<br />
== ユーティリティ ==<br />
<br />
他のネットワークインターフェイスと同じように、ワイヤレスインターフェイスも {{Pkg|iproute2}} パッケージの ''ip'' でコントロールします。<br />
<br />
ワイヤレス接続は、ワイヤレス認証に [[wpa_supplicant]] や [[iwd]] を使用する[[ネットワークマネージャ]]を使うか、''wpa_supplicant'' や ''iwd'' を直接使うことによって、管理することができます。より低レベルな設定を行いたい場合や、レガシーなドライバやレガシーな認証方式を使用している場合には、{{Pkg|iw}} や非推奨の {{Pkg|wireless_tools}} を使用できます。<br />
<br />
=== iw と wireless_tools の比較 ===<br />
<br />
{| class="wikitable"<br />
! ソフトウェア !! パッケージ !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA/WPA2/WPA3 !! [[Archiso]] [https://gitlab.archlinux.org/archlinux/archiso/-/blob/master/configs/releng/packages.x86_64]<br />
|-<br />
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools]<sup>1</sup> || {{Pkg|wireless_tools}} || {{Yes}} || {{no}} || {{Yes}} || {{No}} || {{Yes}}<br />
|-<br />
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || {{Pkg|iw}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}}<br />
|}<br />
<br />
# 非推奨<br />
<br />
一部の古いドライバは WEXT しかサポートしていないことに注意してください。<br />
<br />
以下の表は ''iw'' と ''wireless_tools'' の比較可能なコマンドの概要です。さらなる例は [https://wireless.wiki.kernel.org/en/users/Documentation/iw/replace-iwconfig iw replaces iwconfig] を見てください。<br />
<br />
{| class="wikitable"<br />
! ''iw'' コマンド<br />
! ''wireless_tools'' コマンド<br />
! 説明<br />
|-<br />
| iw dev ''wlan0'' link<br />
| iwconfig ''wlan0''<br />
| リンクの状態を取得。<br />
|-<br />
| iw dev ''wlan0'' scan<br />
| iwlist ''wlan0'' scan<br />
| 利用可能なアクセスポイントをスキャン。<br />
|-<br />
| iw dev ''wlan0'' set type ibss<br />
| iwconfig ''wlan0'' mode ad-hoc<br />
| 動作モードを ''ad-hoc'' に設定。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid''<br />
| iwconfig ''wlan0'' essid ''your_essid''<br />
| 接続してネットワークを開く。<br />
|-<br />
| iw dev ''wlan0'' connect ''your_essid'' 2432<br />
| iwconfig ''wlan0'' essid ''your_essid'' freq 2432M<br />
| 接続して指定したチャンネルのネットワークを開く。<br />
|-<br />
| rowspan="2" | iw dev ''wlan0'' connect ''your_essid'' key 0:''your_key''<br />
| iwconfig ''wlan0'' essid ''your_essid'' key ''your_key''<br />
| 16進数のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iwconfig ''wlan0'' essid ''your_essid'' key s:''your_key''<br />
| ASCII 文字のキーを使って WEP で暗号化されたネットワークに接続。<br />
|-<br />
| iw dev ''wlan0'' set power_save on<br />
| iwconfig ''wlan0'' power on<br />
| 省電力機能を有効にする。<br />
|}<br />
<br />
== iw ==<br />
<br />
{{Note|<br />
* ほとんどのコマンドは [[ユーザーとグループ|root 権限]]で実行する必要があることに注意してください。通常ユーザーで実行すると、コマンドによっては (例: ''iwlist'') エラーを出さずに終了して正しい出力をしないため、混乱をきたすおそれが有ります。<br />
* ハードウェアや暗号化方式によっては、手順のいくつかは必要ありません。カードによってはアクセスポイントに関連付けをして IP アドレスを取得する前に、インターフェースの有効化やアクセスポイントのスキャニングが必要なことがあります。実験が必要かもしれません。例えば、WPA/WPA2 ユーザーは [[#関連付け]] の手順から直接ワイヤレスネットワークを有効化できます。}}<br />
<br />
このセクションに出てくる例ではあなたのワイヤレスデバイスを {{ic|''interface''}}、wifi のアクセスポイントを {{ic|''your_essid''}} と仮定しています。それぞれ適切な文字列に置き換えて下さい。<br />
<br />
=== インターフェイス名の取得 ===<br />
<br />
{{Tip|''iw'' ツールの [https://wireless.wiki.kernel.org/en/users/documentation/iw 公式ドキュメント] により多くのサンプルがあります。}}<br />
<br />
ワイヤレスインターフェイスの名前を取得するには:<br />
<br />
$ iw dev<br />
<br />
インターフェイス名は "Interface" という単語のあとに出力されます。例えば、インターフェイス名は {{ic|wlan0}} が一般的です。<br />
<br />
=== インターフェイスの状態の取得 ===<br />
<br />
リンクの状態を確認するには、次のコマンドを使ってください。<br />
<br />
$ iw dev ''interface'' link<br />
<br />
次のコマンドで tx/rx バイトの総量やシグナルの強さといった統計値をを取得することができます:<br />
<br />
$ iw dev ''interface'' station dump<br />
<br />
=== インターフェイスの有効化 ===<br />
<br />
{{Tip| 通常、この手順は不要です。}}<br />
<br />
カードによっては ''iw'' や ''wireless_tools'' を使う前にカーネルインターフェースをアクティブ化する必要があります:<br />
<br />
# ip link set ''interface'' up<br />
<br />
{{Note|{{ic|RTNETLINK answers: Operation not possible due to RF-kill}}のようなエラーが表示される場合、ハードウェアのスイッチが''オン''になっているか確認してください。詳細は [[#Rfkill の注意点]] を見てください。}}<br />
<br />
インターフェイスが立ち上がっているか確認するには、次のコマンドの出力を見て下さい:<br />
<br />
{{hc|$ ip link show ''interface''|<br />
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000<br />
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff<br />
}}<br />
<br />
{{ic|<BROADCAST,MULTICAST,UP,LOWER_UP>}} にある {{ic|UP}} がインターフェイスが立ち上がっていることを示しています。後ろにある {{ic|state DOWN}} は関係ありません。<br />
<br />
=== アクセスポイント検索 ===<br />
<br />
利用できるアクセスポイントを見るには:<br />
<br />
# iw dev ''interface'' scan | less<br />
<br />
{{Note|{{ic|Interface does not support scanning}} と表示される場合、おそらくファームウェアのインストールを忘れているはずです。''iw'' が root 権限で実行されていない時にもこのメッセージが表示されることがあります。}}<br />
<br />
{{Tip|住んでいる地域によっては、利用できるネットワークを全て表示するために[[#規制範囲に従う|規制範囲]]を正しく設定する必要があります。}}<br />
<br />
チェックするべきポイント:<br />
<br />
* '''SSID:''' ネットワークの名前。<br />
* '''Signal:''' は dBm 単位でワイヤレスの信号強度を報告します(例: -100 から 0)。負の数が 0 に近づくほど、信号の品質が良いことを表します。良質なリンクや低品質なリンクで報告された強度を観察することで、それぞれの範囲を知ることができます。<br />
* '''Security:''' 直接は報告されません、{{ic|capability}} から始まる行を見て下さい。{{ic|capability: ESS Privacy ShortSlotTime (0x0411)}} のように {{ic|Privacy}} が含まれている場合、そのネットワークは保護されています。<br />
** {{ic|RSN}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:IEEE 802.11i-2004|Robust Security Network]] プロトコル、別名 WPA2 によって保護されています。<br />
** {{ic|WPA}} 情報ブロックがある場合、そのネットワークは [[Wikipedia:Wi-Fi Protected Access|Wi-Fi Protected Access]] プロトコルによって保護されています。<br />
** {{ic|RSN}} や {{ic|WPA}} ブロックには以下の情報が含まれていることがあります:<br />
*** '''Group cipher:''' 値は TKIP, CCMP, その両方, もしくはその他。<br />
*** '''Pairwise ciphers:''' 値は TKIP, CCMP その両方, もしくはその他。Group cipher と同じ値である必要はありません。<br />
*** '''Authentication Suites:''' 値は PSK, 802.1x, もしくはその他。家庭用ルーターでは、一般的に PSK になるでしょう (''つまり''パスフレーズ)。大学などでは、ログインとパスワードが必要な 802.1x スイートになると思われます。利用するためにはどのキーマネージメント (例: EAP) とカプセル化 (例: PEAP) が使われているか知る必要があります。詳しくは [[Wikipedia:Authentication protocol]] と関連記事を見て下さい。<br />
** {{ic|Privacy}} があるのに {{ic|RSN}} や {{ic|WPA}} ブロックがない場合、WEP が使われています。<br />
<br />
=== 動作モードの設定 ===<br />
<br />
ワイヤレスカードの正しい動作モードを設定する必要があるかもしれません。具体的に言うと、[[アドホックネットワーク|アドホック]]ネットワークに接続したい場合、動作モードを {{ic|ibss}} に設定する必要があります:<br />
<br />
# iw dev ''interface'' set type ibss<br />
<br />
{{Note|カードによっては、動作モードを変更するためにワイヤレスインターフェースを ''down'' させておく必要があるかもしれません ({{ic|ip link set ''interface'' down}})。}}<br />
<br />
{{Note|動作モードを AP に変更する間 ({{ic|iw ''interface'' set type ap}})、以下のようなエラーが発生するでしょう:<br />
You need to run a management daemon, e.g. hostapd,<br />
see https://wireless.wiki.kernel.org/en/users/documentation/hostapd<br />
for more information on how to do that.<br />
<br />
これは、動作モードを {{ic|__ap}} に変更することによりバイパス可能です ({{ic|iw ''interface'' set type __ap}})。<br />
}}<br />
<br />
=== アクセスポイントへの接続 ===<br />
<br />
暗号化方式によっては、使用するワイヤレスデバイスをアクセスポイントと関連付けて、暗号化キーを渡す必要があります:<br />
<br />
* '''暗号化なし''' {{bc|# iw dev ''interface'' connect "''your_essid''"}}<br />
* '''WEP'''<br />
** 16進数、または ASCII キーを使用する(WEP のキーは固定長なので、キーの形式は自動的に判別されます): {{bc|# iw dev ''interface'' connect "''your_essid''" key 0:''your_key''}}<br />
** 16進数、または ASCII キーを使用し、3番目に設定したキーをデフォルトとして指定する(キーは 0 からカウントされます。4 つまで可能です): {{bc|# iw dev ''interface'' connect "''your_essid''" key d:2:''your_key''}}<br />
* '''その他'''<br />
** ''iw'' は WEP のみを扱えます。他の暗号化スキームを使用して接続する場合、下記の [[#認証]] を見てください。<br />
<br />
どの方法を使用しても、正しく関連付けできたかどうかは以下で確認できます:<br />
<br />
# iw dev ''interface'' link<br />
<br />
== 認証 ==<br />
<br />
Linux で Wi-Fi 認証を行う方法としては主に [[wpa_supplicant]] と [[iwd]] があります。<br />
<br />
=== WPA2 Personal ===<br />
<br />
WPA2 Personal(別名: WPA2-PSK)は [[Wikipedia:Wi-Fi Protected_Access|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] や [[iwd]] を用いて WPA2 Personal ネットワークに認証したり、[[ネットワークマネージャ]]を用いて接続したりできます。ネットワークに認証しただけの場合、接続はまだ完全には機能せず、[[ネットワーク設定#固定 IP アドレス|手動]]または[[DHCP]]クライアントを用いて IP アドレスとルートを割り当てる必要があります。<br />
<br />
=== WPA2 Enterprise ===<br />
<br />
''WPA2 Enterprise'' は [[Wikipedia:Wi-Fi_Protected_Access|Wi-Fi Protected Access]] のモードの1つです。''WPA2 Personal'' よりも優れたセキュリティとキー管理を提供し、VLAN や [[wikipedia:Network Access Protection|NAP]] といった他のエンタープライズタイプの機能を提供します。しかし、ユーザの認証を処理するために [[wikipedia:RADIUS|RADIUS]] サーバと呼ばれる外部の認証サーバを必要とします。これは、ワイヤレスルータとアクセスポイント(AP)の他に何も必要とせず、すべてのユーザに対して1つのパスフレーズかパスワードを使用する Personal モードとは対照的です。<br />
<br />
Enterprise モードでは、ユーザはユーザ名とパスワード、もしくはデジタル証明書、もしくはその両方を用いて Wi-Fi ネットワークにログインできます。それぞれのユーザは動的でユニークな暗号鍵を持っているため、ワイヤレスネットワーク上のユーザからユーザへの盗聴防止や暗号強度の向上に役立ちます。<br />
<br />
このセクションでは、WPA2 Enterprise モードを用いてワイヤレスアクセスポイントに接続するための[[ネットワーク設定#ネットワークマネージャ|ネットワーククライアント]]の設定について説明します。アクセスポイントそのもののセットアップに関する情報は [[ソフトウェアアクセスポイント#RADIUS]] を見てください。<br />
<br />
{{Note|Personal モードでは要求された時に単にパスフレーズを入力する必要があるだけですが、Enterprise モードではより複雑なクライアントの設定が必要です。クライアントはおそらくサーバの CA 証明書を(EAP-TLS を使用する場合はユーザごとの証明書も)インストールし、手動でワイヤレスセキュリティと 802.1X 認証を設定する必要があるでしょう。}}<br />
<br />
プロトコル間の比較は[http://deployingradius.com/documents/protocols/compatibility.html この表]を見てください。<br />
<br />
{{Warning|クライアントがサーバの CA 証明書を確認せずに WPA2 Enterprise を使用することは可能ですが、常に確認すべきです。なぜなら、アクセスポイントの認証なしでは、接続が中間者攻撃の対象となる可能性があるからです。このようなことが起こりうる理由は、接続のハンドシェイク自体を暗号化することはできる一方、広く使用されているセットアップでは平文または簡単に破れる [[#MS-CHAPv2]] を使用してパスワード自体を送信するからです。ゆえに、クライアントはパスワードを悪意のあるアクセスポイントに送信するかもしれません。その結果、そのアクセスポイントは接続をプロキシすることができてしまいます。}}<br />
<br />
==== MS-CHAPv2 ====<br />
<br />
PEAP の MSCHAPv2 type-2 認証を要求する WPA2-Enterprise ワイヤレスネットワークは時々、{{Pkg|ppp}} パッケージに加えて {{Pkg|pptpclient}} パッケージを必要とします。しかし、[[netctl]] は ppp-mppe 無しでも動作するようです。いずれの場合でも、MSCHAPv2 は非常に脆弱であるため、使用は推奨されません。しかし、他の手段は通常選択肢になりません。<br />
<br />
==== eduroam ====<br />
<br />
[[Wikipedia:eduroam|eduroam]] は研究、高等教育、継続教育のユーザー向けの、WPA2 Enterprise ベースの国際ローミングサービスです。<br />
<br />
{{Note|1=<nowiki/><br />
* このセクションにある如何なるプロファイルを適用する前に'''始めに'''機関の接続の詳細を確認してください。プロファイル例は機能することもセキュリティ要件を満たすことも保証されません。<br />
* 接続プロファイルを暗号化せずに保存する場合、root として {{ic|chmod 600 ''profile''}} を実行して、ファイルへの読み込みアクセスを root アカウントに制限することを推奨します。<br />
<br />
* NetworkManager での認証が失敗し続ける場合、[https://bbs.archlinux.org/viewtopic.php?pid=2104709#p2104709] で説明されているように {{ic|1=phase1-auth-flags=32}} を設定してみてください。<br />
* eduroam における接続問題が回避策と共に [[wpa_supplicant#eduroam などの MSCHAPv2 接続の問題]] 章で説明されています。<br />
<br />
}}<br />
<br />
{{Tip|[[NetworkManager]] 向けの設定は [https://cat.eduroam.org/ eduroam Configuration Assistant Tool] で生成できます。このツールは、{{Pkg|python}} と {{Pkg|dbus-python}} を必要とします。}}<br />
<br />
==== 手動/自動 セットアップ ====<br />
<br />
* [[wpa_supplicant#高度な使用方法|wpa_supplicant]] は、設定ファイルを直接編集するか CLI/GUI フロントエンドを使用することで設定できます。また、DHCP クライアントと組み合わせて使うことができます。接続の詳細を設定するには {{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} の例を見てください。<br />
* [[iwd#WPA Enterprise]]<br />
* [[NetworkManager]] は、''nmcli'' や ''nmtui''、[[NetworkManager#グラフィカルフロントエンド|グラフィカルなフロントエンド]]を使用して WPA2 Enterprise プロファイルを作成できます。<br />
* [[ConnMan]] は、ネットワークに[[ConnMan#Wi-Fi|接続]]する前に、別の設定ファイルを必要とします。詳細は {{man|5|connman-service.config}} と [[ConnMan#eduroam に接続]] を見てください。<br />
* [[netctl]] は、{{ic|1=WPAConfigSection=}} に含まれるブロックを通して wpa_supplicant の設定をサポートします。詳細は {{man|5|netctl.profile}} を見てください。<br />
: {{Note|特殊な引用符の規則が適用されます。{{man|5|netctl.profile|SPECIAL QUOTING RULES}} を見てください。}}<br />
: {{Tip|{{ic|WPAConfigSection}} に {{ic|1='ca_cert="/path/to/special/certificate.cer"'}} の行を追加することでカスタムの証明書を指定できます。}}<br />
<br />
=== WPA3 Personal ===<br />
<br />
WPA3 Personal (別名 WPA3-SAE) は、[[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] と [[iwd]] の両方が WPA3 Personal をサポートしています。<br />
<br />
=== WPA3 Enterprise ===<br />
<br />
WPA3 Enterprise は [[Wikipedia:Wi-Fi Protected Access#WPA3|Wi-Fi Protected Access]] のモードの1つです。<br />
<br />
[[wpa_supplicant]] (バージョン 2:2.10-8 以降) は、WPA3 Enterprise をサポートしています。{{Bug|65314}} を参照してください。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 規制範囲に従う ===<br />
<br />
[[wikipedia:IEEE_802.11#Regulatory_domains_and_legal_compliance|規制範囲(regdomain)]] は、ワイヤレスハードウェアの動作が FCC や ETSI、他の組織により定められた地域の法律に準拠するようにワイヤレスドライバを設定する際に用いられます。規制範囲では [[wikipedia:ISO_3166-1_alpha-2|ISO 3166-1 alpha-2 国名コード]]を使用します。例えば、米国は "US"、中国は "CN"、日本は "JP" となります。<br />
<br />
規制範囲は、どのワイヤレスチャネルが利用できるかに関与します。2.4GHz 帯で許可されているチャネルは、米国では 1~11、日本では 1~14、他の殆どの国では 1~13 です。5Ghz 帯では、許可されるチャネルの規則は非常に複雑です。どちらの場合でも、より詳細な情報は[[wikipedia:List_of_WLAN_channels|この WLAN チャネルのリスト]]を見てください。<br />
<br />
規制範囲はまた、ワイヤレスデバイスから放射される電波の[[wikipedia:Equivalent_isotropically_radiated_power|実効輻射電力(EIRP)]]の制限にも関与します。これは送信パワー(Tx Power)から算出され、[[wikipedia:DBm|dBm/mBm (1dBm=100mBm) または mW (対数スケール)]]により測られます。2.4Ghz 帯では、米国とカナダでは最大が 30dBm、ヨーロッパのほとんどの地域では 20dBm、その他の地域では 20dBm~30dBm です。通常、5Ghz 帯では、最大値はより低く規定されます。より詳細な情報は [https://git.kernel.org/cgit/linux/kernel/git/linville/wireless-regdb.git/tree/db.txt wireless-regdb] を見てください(EIRP の dBm 値はそれぞれの行の2番めのカッコの中にあります)。<br />
<br />
規制範囲の設定を誤ると便利である場合があります(例えば、チャネルが混雑している時に未使用のチャネルを利用できたり、送信パワーを増やして送信範囲を広げたり)。しかし、地域の法律に違反したり、他の無線機器と干渉する可能性があるので、'''推奨されません'''。<br />
<br />
{{Pkg|wireless-regdb}} が[[インストール]]されていれば、カーネルは規制範囲のデータベースを直接読み込みます。直接読み込むため、セキュリティ上の理由により、カーネルは {{ic|CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS}} を yes に設定して、データベースの暗号検証を有効化してあるべきです。これは Arch のカーネルには有効化されていますが、他のカーネルを使用していたり自分でコンパイルしている場合、これを確認するべきです。さらなる情報は[http://docker.hd-wireless.com/Support/WifiRegulatoryDomainsinLinux このガイド]{{Dead link|2023|05|06|status=401}}で見られます。<br />
<br />
regdomain を設定するには、{{Pkg|wireless-regdb}} をインストールし、再起動してください。そして、{{ic|/etc/conf.d/wireless-regdom}} を編集し、適切なドメインをアンコメントしてください。<br />
<br />
現在の規制範囲を一時的に日本に設定するには:<br />
<br />
# iw reg set JP<br />
<br />
情報を見るには:<br />
<br />
$ iw reg get<br />
<br />
{{Note|デバイスが国名コード "00" に設定されている場合があります(これは "world regulatory domain" で、一般的な設定が含まれています)。この設定を解除できない場合、以下で説明されているように設定を確認してください。}}<br />
<br />
しかし、規制範囲を設定しても設定が変わらない場合があります。一部のデバイスは、デバイスの制限を規定する firmware/EEPROM で規制範囲が設定されています。これは、ソフトウェアでは[https://wiki.openwrt.org/doc/howto/wireless.utilities#iw 制限を増やすことしかできず]、制限を減らすことができないことを意味します。例えば、中国のデバイスはソフトウェアで米国の規制範囲に設定できるでしょうが、中国では EIRP の最大値が 20dBm と規定されているので、デバイスは米国の最大 EIRP である 30dBm で送信を行うことはできません。<br />
<br />
例えば、Atheros デバイスのファームウェアで規制範囲が設定されているかどうか確認するには:<br />
<br />
# dmesg | grep ath:<br />
<br />
他のチップセットの場合、"EEPROM" や "regdomain"、デバイスドライバの名前で検索すると良いかもしれません。<br />
<br />
規制範囲が正しく変更されたかどうかを確認し、利用可能なチャネル数や許可されている送信パワーを確認するには:<br />
<br />
$ iw list | grep -A 15 Frequencies:<br />
<br />
[[wpa_supplicant]] でも、{{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} の {{ic|1=country=}} 行で規制範囲を設定できます。<br />
<br />
[https://wireless.wiki.kernel.org/en/developers/documentation/cfg80211 cfg80211] カーネルモジュールでも[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を追加することで特定の規制範囲を使用するように設定できます(例: {{ic|1=options cfg80211 ieee80211_regdom=JP}})。このモジュールオプションは [https://wireless.wiki.kernel.org/en/developers/regulatory#the_ieee80211_regdom_module_parameter 古い規制範囲の実装]から継承されたもので、最近のカーネルでは {{ic|iw}} や {{ic|wpa_supplicant}} のようなユーティリティから {{ic|nl80211}} を通して来たようなユーザスペースの規制ヒントとして振る舞います。<br />
<br />
=== Rfkill の注意点 ===<br />
<br />
多くのノート PC にはワイヤレスカードの電源を切るハードウェアボタン/スイッチがあります。しかし、カードがカーネルによってブロックされている場合があります。これは {{man|8|rfkill}} によって操作できます。現在の状態を確認するには以下のコマンドを使用してください:<br />
<br />
{{hc|$ rfkill|<br />
ID TYPE DEVICE SOFT HARD<br />
0 bluetooth hci0 unblocked unblocked<br />
1 wlan phy0 unblocked unblocked<br />
}}<br />
<br />
カードが ''hard-blocked'' である場合、ハードウェアボタン/スイッチを使ってカードをアンロックできます。カードが ''hard-blocked'' でなく、''soft-blocked'' である場合、以下のコマンドを使用してください:<br />
<br />
# rfkill unblock wlan<br />
<br />
{{Note|ハードウェアボタンを押すと、カードが ''hard-blocked'' と ''soft-unblocked'' の状態から ''hard-unblocked'' と ''soft-blocked'' の状態になることがあります(つまり、''soft-blocked'' のビットがなんであっても切り替わるということです)。これは {{ic|rfkill}} [[カーネルモジュール]]のいくつかのオプションを切り替えることで調整できます。}}<br />
<br />
ワイヤレスカードを切り替えるハードウェアボタンはベンダー固有の[[カーネルモジュール]]によって操作されます。これらは [https://lwn.net/Articles/391230/ WMI] モジュールであることが多いです。非常に新しいハードウェアモデルでは特に、最新の安定版カーネルでモデルが完全にサポートされていないことがあります。この場合、カーネルのバグトラッカーで情報を探し、まだ報告されていない場合は各ベンダーのカーネルモジュールのメンテナにモデルを報告することが役に立ちます。<br />
<br />
[https://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill] も参照してください。<br />
<br />
=== 省電力 ===<br />
<br />
[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==トラブルシューティング==<br />
<br />
このセクションには、ドライバやファームウェアに強く関連しない問題のトラブルシューティングの一般的なヒントを含んでいます。ドライバやファームウェアに関するトピックは次のセクション [[#ドライバとファームウェアのトラブルシューティング]] を見てください。<br />
<br />
=== 一時的にネットワークにアクセス ===<br />
<br />
ハードウェアに問題があるときに、インターネットに接続してソフトウェアをダウンロードしたりフォーラムでヘルプを得たい場合、Android に内蔵されている機能を使って USB ケーブルでインターネット共有をすることができます。詳しくは [[Android テザリング#USB テザリング]]を見て下さい。<br />
<br />
=== ログの取得 ===<br />
<br />
トラブルシューティングで一番初めにするべきなのはシステムのログファイルを解析することです。全部を手でパースしないために、新しいターミナル(コンソール)を開いて、接続を試行している間のカーネルメッセージを次のコマンドで見ると良いでしょう:<br />
<br />
$ dmesg -w<br />
<br />
ネットワーク管理にツールを使っている場合、systemd でも同じことができます:<br />
<br />
# journalctl -f<br />
<br />
特定の理由コードによる認証解除を伴うワイヤレスエラーがよく起こります。例えば:<br />
<br />
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)<br />
<br />
[http://www.aboutcher.co.uk/2012/07/linux-wifi-deauthenticated-reason-codes/ 理由コード]を見ることでヒントを得られるかもしれません。コントロールメッセージの [https://wireless.wiki.kernel.org/en/developers/documentation/mac80211/auth-assoc-deauth flowchart] を見ることも役に立つかもしれません。ジャーナルのメッセージはこれに従って出力されます。<br />
<br />
この記事にあるそれぞれのツールは詳細なデバッグ出力をするオプションを用意しているので、必要ならば、解析の第二段階としてそれを使うことができます。<br />
<br />
=== IP アドレスの取得に失敗する ===<br />
<br />
{{Out of date|''iwconfig'' は非推奨となりました。[[#iw と wireless_tools の比較]] を参照してください。}}<br />
<br />
* 有線インターフェイスでは IP アドレスを取得できるのに、無線インターフェイスでは出来ない場合、ワイヤレスカードの[[#省電力|省電力機能]]を無効にしてみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
* ''waiting for carrier'' の問題でタイムアウトエラーになる場合、特定のデバイスのチャンネルモードを {{ic|auto}} に設定する必要があるかもしれません:<br />
<br />
# iwconfig ''wlan0'' channel auto<br />
<br />
チャンネルを auto に変える前に、あなたのワイヤレスインターフェースが止まっていることを確認してください。変更が成功したら、インターフェースを立ち上げなおして次の手順に進んで下さい。<br />
<br />
=== IP アドレスは取得できるのにホスト解決ができない ===<br />
<br />
[[wikipedia:Captive_portal|Captive Portal]] が存在する可能性のある公共の無線ネットワークを使っている場合、Web ブラウザから(HTTPS ではなく)HTTP ページをクエリしていることを確認してください。一部の captive portal は HTTP のみをリダイレクトするためです。<br />
これが原因ではない場合、[[ドメイン名前解決|ドメイン名を解決できることを確認してください]]。DHCP を通して広告した DNS サーバを使用することが必須である場合があります。<br />
<br />
=== RTS や fragmentation のしきい値を設定する ===<br />
<br />
無線ハードウェアはデフォルトでは RTS と fragmentation を無効化しています。帯域幅を犠牲にスループットを高める方法は2つ存在します。近隣にアクセスポイントが多く存在する環境で、干渉によってタイムアウトが発生したり接続が途切れる場合、設定によって改善する可能性があります。<br />
<br />
パケットの断片化は fragmentation の閾値を越えたパケットを分割してスループットを改善します。最大値 (2346) にするとパケットが超過することはなくなるため断片化を無効化にするのと同義です。最低値 (256) にするとスループットは最大になりますが、かなり帯域幅を消費します。設定するには:<br />
<br />
# iw phy0 set frag 512<br />
<br />
[[Wikipedia:IEEE 802.11 RTS/CTS|RTS]] は RTS の閾値を越えるパケットを送信する前にアクセスポイントとハンドシェイクを実行することでスループットを改善します。最大値 (2347) にするとパケットが超過しなくなり RTS を無効化するのと同じになります。最低値 (0) では全てのパケットで RTS が有効になりますが、大抵の場合は無駄になります。<br />
<br />
# iw phy0 set rts 500<br />
<br />
{{Note|{{ic|phy0}} は {{ic|iw phy}} で確認できるワイヤレスデバイスの名前に置き換えてください。}}<br />
<br />
=== ランダムに切断する ===<br />
<br />
==== 原因 #1 ====<br />
<br />
[[Journal]] に {{ic|1=wlan0: deauthenticating from MAC by local choice (reason=3)}} と表示され Wi-Fi 接続が失われる場合は、おそらく Wi-Fi カードの省電力機能がアグレッシブすぎるのが原因です。無線カードの[[電源管理#ネットワークインターフェイス|省電力機能]]を無効化してみてください({{ic|on}} ではなく {{ic|off}} を指定してください)。<br />
<br />
あなたのカードが {{ic|iwconfig wlan0 power off}} をサポートしていない場合は、BIOS の電源管理のオプションを確認してください。Lenovo W520 では BIOS にある PCI-Express の電源管理を無効化すると問題が解決します。<br />
<br />
==== 原因 #2 ====<br />
<br />
頻繁に切断が発生し、[[Journal]] で以下のようなメッセージが表示される場合:<br />
<br />
{{ic|1=ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting}}<br />
<br />
ルーターの設定でチャンネルの帯域を {{ic|20MHz}} に変更してみてください。<br />
<br />
==== 原因 #3 ====<br />
<br />
ノートパソコン (例: Thinkpad X200 シリーズ) に rfkill のハードウェアスイッチが付いている場合、スイッチの経年劣化や設計不良により、スイッチ (またはメインボードへの接続) がゆるくなってしまっている可能性があります。結果として、スイッチに触れたり、ノートパソコンをちょっと動かすだけで、ハードウェアによる無線のブロックが発生して、インターネットから切断されているのかもしれません。このような問題に対するソフトウェアによる解決方法は存在しません。電気仕掛けのスイッチなら、BIOS にスイッチを無効化するオプションが存在することがあります。機械式のスイッチの場合 (ほとんどのスイッチはそうです)、スイッチを壊してしまうというのが解決法になります: メインボードや wifi カードとの接触点をハンダ付けする、スイッチを糊で固める、塞ぐ、またはスクリューナットを使ってスイッチを固く締める、取り除いてしまう。<br />
<br />
==== 原因 #4 ====<br />
<br />
頻繁に切断したり接続が成功しない他の原因として、ルーターが仕様に合わない挙動をする、ルーターの設定が誤っている、他の無線デバイスによる干渉、などが考えられます。<br />
<br />
トラブルシューティングするには、まず認証なしでルーターに接続できないか試して下さい。<br />
<br />
それで動作する場合、WPA/WPA2 を再度有効にして、ルーターの設定を変更してみてください。例えば:<br />
* ルーターが(クライアントで使っている)無線デバイスと比べて相当に旧式である場合、ルーターを別のワイヤレスモードに設定して動作するかテストする<br />
* mixed-mode 認証を無効化 (例: WPA2 と AES、またはルーターが古い場合 TKIP)<br />
* "auto" チャンネル以外の固定/自由チャンネルを使ってみる (隣家のルーターが古くて干渉している可能性があります)<br />
* [[Wikipedia:Wi-Fi Protected Setup|WPS]] を無効化<br />
* ルータの 5Ghz チャネルから [[Wikipedia:List of WLAN channels#5 GHz (802.11a/h/j/n/ac/ax)|non-DFS (Dynamic Frequency Selection) チャネル]] に変更する。そのようなチャネルでは、近くの気象レーダとの干渉により接続が[https://wifinigel.blogspot.com/2018/05/the-5ghz-problem-for-wi-fi-networks-dfs.html 落ちたり、いきなり切り替わったり]する場合があります。<br />
* クライアントに 5Ghz と 2.4Ghz のどちらが良いかを選ばせるのではなく 2.4Ghz のみに設定してみる。(後者はスループットが低いですが、遠距離からの接続でも安定した接続を得られます)<br />
* {{ic|1=cfg80211.cfg80211_disable_40mhz_24ghz=1}} を指定して {{ic|40Mhz}} 周波数帯を無効化 (スループットは悪くなりますが衝突は起きにくくなります)<br />
* ルーターにサービス品質に関する設定がある場合、設定が完全であることを確認 (例: Wi-Fi Multimedia (WMM) は任意の QoS フロー制御の一部です。問題のあるルーターファームウェアは設定が有効になっていない場合も有効であるかのように見せかけてくることがあります)<br />
<br />
==== 原因 #5 ====<br />
<br />
一部のワイヤレスアダプタ(例: Qualcomm Atheros AR9485)では、DMA エラーによりランダムな接続断が起こる可能性があります:<br />
<br />
{{hc|# journalctl -xb|2=<br />
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400<br />
wlp1s0: authenticate with 56:e7:ee:7b:55:bc<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3)<br />
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3)<br />
wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out<br />
}}<br />
<br />
可能な回避策は [https://docs.kernel.org/arch/x86/iommu.html Intel IOMMU driver (DMA)] を無効化することです。[[カーネルパラメータ]]に {{ic|1=intel_iommu=off}} を追加してください[https://bbs.archlinux.org/viewtopic.php?pid=1907446#p1907446]。<br />
<br />
{{Note|Intel IOMMU ドライバは一部の高度な仮想マシン機能において必要です。(例: PCI パススルー)}}<br />
<br />
==== 原因 #6 ====<br />
<br />
ワイヤレス接続のための {{ic|iwlwifi}} と {{ic|iwlmvm}} のあるデバイスを使用していて、Wi-Fi カードがバッテリー駆動時に消えたように見える場合、iwlmvm で省電力設定を変更することでこれを修正できます。<br />
<br />
{{ic|/etc/modprobe.d/iwlmvm.conf}} ファイルが存在しなければ作成し、以下の行を追加してください:<br />
<br />
{{hc|/etc/modprobe.d/iwlmvm.conf|2=<br />
options iwlmvm power_scheme=1<br />
}}<br />
<br />
{{ic|power_scheme}} の 1 という数値は iwlmvm が "常に有効" になります。利用可能なオプションは以下のとおりです:<br />
<br />
{| class="wikitable"<br />
! 値 !! 説明<br />
|-<br />
| 1 || 常に有効<br />
|-<br />
| 2 || バランス<br />
|-<br />
| 3 || 低パワー<br />
|}<br />
<br />
この修正法は [https://forums.debian.net/viewtopic.php?t=121696#p576208] で発見されました。<br />
<br />
==== 原因 #7 ====<br />
<br />
デバイスが長時間使用されなかった場合(例: ファイルサーバ)、省電力機能により接続断が発生する場合があります。これにより、受信トラフィックがブロックされ、接続が妨げられます。"interface" の省電力機能を無効化してみてください:<br />
<br />
# iw dev ''interface'' set power_save off<br />
<br />
udev ルールを作成してこれを起動時に行うこともできます。[[電源管理#ネットワークインターフェイス]] を見てください。<br />
<br />
==== 原因 #8 ====<br />
<br />
メッシュネットワーク (WiFi6 など) に接続している時に接続が時々途切れ、以下のようなメッセージが出力される場合:<br />
<br />
{{hc|# journalctl -b|<br />
kernel: wlan0: disconnect from AP aa:bb:cc:dd:ee:ff for new auth to 11:22:33:44:55:66<br />
}}<br />
<br />
ローミングの問題が発生しています。接続の方法と実際の問題に応じて、以下のことができます:<br />
<br />
* ローミングが望ましくない場合、NetworkManager で BSSID (上記の {{ic|aa:bb:cc:dd:ee:ff}}) をロックする ([[NetworkManager#定期的なネットワーク接続断、遅延、パケットロス (WiFi)]] を参照)。<br />
* [[Wpa_supplicant#ローミング]] で {{ic|bgscan}} の設定を調整する。<br />
<br />
=== 規制範囲が間違っているために Wi-Fi ネットワークが認識されない ===<br />
<br />
コンピュータの Wi-Fi チャンネルがユーザーの居住国の規制範囲に一致していない場合、Wi-Fi ネットワークが認識されないことがあります。[[#規制範囲に従う]]を参照して設定を行ってください。<br />
<br />
==ドライバとファームウェアのトラブルシューティング==<br />
<br />
このセクションでは、一般的な方法とは異なる、特定のチップセットのカーネルモジュールと''ファームウェア''をインストールする方法を説明します。<br />
<br />
モジュールの動作についての一般的な情報は[[カーネルモジュール]]を見て下さい。<br />
<br />
=== Ralink/Mediatek ===<br />
<br />
==== rt2x00 ====<br />
<br />
Ralink のチップセット用の統合ドライバー ({{ic|rt2500}}, {{ic|rt61}}, {{ic|rt73}} などを置き換えます)。このドライバーは Linux カーネル 2.6.24 から含まれており、チップに合わせて適切なモジュールをロードするだけで問題なく使うことができます: {{ic|rt2400pci}}, {{ic|rt2500pci}}, {{ic|rt2500usb}}, {{ic|rt61pci}}, {{ic|rt73usb}} は {{ic|rt2x00}} モジュールもそれぞれ自動でロードします。<br />
<br />
このモジュールでサポートされているデバイスの一覧はプロジェクトの [https://web.archive.org/web/20150507023412/http://rt2x00.serialmonkey.com/wiki/index.php/Hardware ホームページ] で見ることができます。<br />
<br />
; 追加情報<br />
* カーネル 3.0 から、rt2x00 は次のドライバーを含んでいます: {{ic|rt2800pci}}, {{ic|rt2870usb}}。<br />
* カーネル 3.0 から、staging ドライバー {{ic|rt2860sta}} と {{ic|rt2870sta}} は mainline ドライバー {{ic|rt2800pci}} と {{ic|rt2800usb}} によって置き換えられました[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fefecc6989b4b24276797270c0e229c07be02ad3]。<br />
* デバイスによっては {{ic|iwpriv}} を使って様々なオプションを設定することができます。これらのオプションについては Ralink から入手できる [https://web.archive.org/web/20111105120212/http://web.ralinktech.com:80/ralink/Home/Support/Linux.html source tarballs] にまとめられています。<br />
<br />
==== rt3090 ====<br />
<br />
rt3090 を使っているデバイスには {{ic|rt2800pci}} ドライバを使うことができますが、うまく動作しないことがあります (例えば、時々 2Mb/s 以上の速度が出なくなります)。<br />
<br />
==== rt3290 ====<br />
<br />
rt3290 チップセットはカーネルの {{ic|rt2800pci}} モジュールによって認識されます。ただし、問題が起こることもあり、[https://bbs.archlinux.org/viewtopic.php?id=161952 そのような場合]はパッチがあてられた Ralink ドライバーに戻すと良いようです。<br />
<br />
==== rt3573 ====<br />
<br />
2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバが必要かもしれません。様々な製造会社がそれを使っています、[https://bbs.archlinux.org/viewtopic.php?pid=1164228#p1164228 Belkin N750 DB wireless 無線 USB アダプタ]のスレッドを見て下さい。<br />
<br />
==== mt7612u ====<br />
<br />
2014 年以降の新しい商号 Mediatek でリリースされている最新のチップセットです。AC1200 または AC1300 チップセットになります。[https://www.mediatek.com/products/broadbandWifi/mt7612u サポートページ] で Linux 用のドライバーがメーカーから公開されています。カーネル 5.5 より、同梱されている {{ic|mt76}} ドライバによりサポートされているはずです。<br />
<br />
=== Realtek ===<br />
<br />
Realtek のチップセットと仕様のリストは [https://wikidevi.wi-cat.ru/Realtek] で見られます。<br />
<br />
==== rtl8192cu ====<br />
<br />
このドライバーはカーネルに含まれていますが、多くのユーザーがネットワークのスキャンはできても接続が出来ないと報告しています。<br />
<br />
問題が起こる場合は {{AUR|8192cu-dkms}} パッケージで改善するかもしれません。<br />
<br />
==== rtl8723ae/rtl8723be ====<br />
<br />
メインラインの Linux カーネルには {{ic|rtl8723ae}} と {{ic|rtl8723be}} モジュールが含まれています。<br />
<br />
このカードの省電力機能についてエラーが発生することがあります。症状としては、ときどき上位のネットワークマネージャ ([[netctl]], [[NetworkManager]]) で認識されなくなり切断されます。このエラーは {{ic|dmesg -w}} や {{ic|journalctl -f}} を実行して省電力機能や {{ic|rtl8723ae}}/{{ic|rtl8723be}} モジュールに関連するメッセージを探すことで確認できます。この問題を解決するには、{{ic|1=fwlps=0}} [[カーネルモジュールパラメータ]]を使って、WiFi カードが自動的にスリープ状態にならないようにしてください。<br />
<br />
信号が弱い場合、デバイスにアンテナがひとつしか接続されておらず自動モードが機能していない可能性があります。{{ic|1=ant_sel=1}} や {{ic|1=ant_sel=2}} カーネルオプションでアンテナを強制的に設定することができます [https://bbs.archlinux.org/viewtopic.php?id=208472]。<br />
<br />
==== rtl88xxau ====<br />
<br />
Realtek の rtl8811au/rtl8812au/rtl8814au/rtl8821au チップセットは AC600 から AC1900 までの様々な USB アダプタ用に設計されています。いくつかのパッケージは様々なカーネルドライバを提供しており、これらは [[DKMS]]({{Pkg|dkms}} パッケージとインストールされているカーネルのヘッダファイル) を必要とします:<br />
<br />
{| class="wikitable"<br />
! チップセット || パッケージ || ノート<br />
|-<br />
| rtl8811au, rtl8812au, rtl8821au || {{AUR|rtl88xxau-aircrack-dkms-git}} || 8811au, 8812au, 8821au チップセット用の Aircrack-ng カーネルモジュール。モニタモードとインジェクションモードサポート。<br />
|-<br />
| rtl8812au || {{AUR|rtl8812au-dkms-git}} || rtl8812au '''のみ'''用の公式の最新 Realtek ドライババージョン。<br />
|-<br />
| rtl8811au, rtl8821au || {{AUR|rtl8821au-dkms-git}} || rtl8821au 用のより新しいドライババージョン。<br />
|-<br />
| rtl8814au || {{AUR|rtl8814au-dkms-git}} || おそらく rtl8813au に対しても機能する。<br />
|}<br />
<br />
==== rtl8811cu/rtl8821cu ====<br />
<br />
{{AUR|rtl8821cu-dkms-git}} は Realtek 8811cu と 8821cu チップセット用のカーネルモジュールを提供します。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{ic|8821cu}} がロードされていてもワイヤレスインターフェイスが見つからない場合、おそらく {{ic|rtw_RFE_type}} [[カーネルモジュールパラメータ]]を手動で指定する必要があります[https://forums.linuxmint.com/viewtopic.php?p=1913190&sid=68f2d6eff91cd47e184ae5a56385dc02#p1913190][https://github.com/brektrou/rtl8821CU/issues/83]。例えば {{ic|1=rtw_RFE_type=0x26}} や他の値を試してみると、機能するかもしれません。<br />
<br />
==== rtl8821ce ====<br />
<br />
{{AUR|rtl8821ce-dkms-git}} は Realtek 8821ce チップセット用のカーネルモジュールを提供します。このチップセットは Asus X543UA に搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
{{Note|1=Realtek により提供されているデフォルトの {{ic|rtl8821ce}} モジュールが Linux カーネル ≥ 5.9 で壊れており、接続品質が悪くなると報告されています[https://bbs.archlinux.org/viewtopic.php?id=273440]。上記の AUR バージョンを優先して使用するべきです。[https://github.com/tomaspinho/rtl8821ce#wi-fi-not-working-for-kernel--59 GitHub での文章] を見てください。デフォルトのカーネルドライバ ({{ic|rtw88_8821ce}}) が使用されているかどうかを確認するには {{ic|lspci -k}} を使用してください。もし使用されているのであれば、[[ブラックリスト]]にそれを追加し、システムを再起動してください。}}<br />
<br />
==== rtl8822bu ====<br />
<br />
{{AUR|rtl88x2bu-dkms-git}} は Realtek 8822bu チップセット用のカーネルモジュールを提供します。このチップセットは Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac、TP-Link Archer T3U アダプタに搭載されています。<br />
<br />
パッケージをインストールするには [[DKMS]] が必要です。適切なカーネルヘッダーをインストールしてください。<br />
<br />
==== rtl8xxxu ====<br />
<br />
サードパーティ製のモジュールをコンパイルすることでメインラインカーネルの {{ic|rtl8xxxu}} モジュールの問題を解決できる場合があります。ソースコードは [https://github.com/lwfinger?tab=repositories GitHub リポジトリ] に存在します。<br />
<br />
一部のドライバーは AUR の {{AUR|rtl8723bu-dkms-git}} パッケージなどでインストールできます。<br />
<br />
==== RTW88 ====<br />
<br />
RTW88 カーネルモジュールパッチセットは、最近カーネルメーリングリストに投稿されました。うまくいけば、メインストリームカーネルに導入されるでしょう。<br />
<br />
上流のカーネル、およびこのパッチセットが適用されたカーネルは、RTW88 チップセットのサポートを有効化するように設定・コンパイルされれば、ほとんどの RTW88 チップデバイスをサポートします。{{Pkg|linux-zen}} と {{AUR|linux-zen-git}} には両方このパッチが含まれており、パッケージングされたバージョンにはすでにビルド済みのモジュールが含まれています。<br />
<br />
このドライバは次をサポートします: 882BE, 8822BU, 8822CE, 8822CU, 8723DE, 8723DU, 8821CE, 8821CU。<br />
<br />
==== RTW89 ====<br />
<br />
RTW89 カーネルモジュールは、上流のカーネルにマージされており、新しい Realtek ワイヤレスチップセットのサポートを提供します。<br />
<br />
このドライバは次をサポートします: 8852AE, 8851BE, 8852BE, 8852CE。<br />
<br />
一部のコンピュータで接続が不安定になることがあります。特に最近の Lenovo と HP のモデルに多いようです。<br />
次の設定を用いて ASPM 関係の機能を無効にしてみてください。<br />
<br />
{{hc|/etc/modprobe.d/70-rtw89.conf|2=<br />
options rtw89_pci disable_aspm_l1=y disable_aspm_l1ss<br />
}}<br />
<br />
参考:<br />
* https://github.com/lwfinger/rtw89#option-configuration<br />
* https://github.com/lwfinger/rtw89/issues/275#issuecomment-1784155449<br />
<br />
=== Atheros ===<br />
<br />
[http://madwifi-project.org/ MadWifi チーム] によって、Atheros チップセットを使っているデバイス用に3つのモジュールがメンテナンスされています:<br />
<br />
* {{ic|madwifi}} は古い、旧式のドライバーです。2.6.39.1 から Arch のカーネルには含まれていません[https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/message/N5VBSKHSPV72HLNSZHPZXEBENOSB542C/]。<br />
* {{ic|ath5k}} はより新しいドライバーで {{ic|madwifi}} ドライバーを置き換えます。現在、チップセットによってはベターな選択肢ですが、全てのチップセットがサポートされているわけではありません(下を見て下さい)。<br />
* {{ic|ath9k}} はより新しいドライバです。より新しい Atheros チップセット用に作られています。802.11n 対応のチップは全てサポートしています。<br />
* {{ic|ath12k}} は最も新しいドライバです。Qualcomm Wi-Fi 7 (IEEE 802.11be) デバイス用の Linux ドライバです。ath12k は mac80211 を使用します。<br />
<br />
Atheros デバイス向けに他にも複数のドライバーが存在します。詳しくは [https://wireless.wiki.kernel.org/en/users/Drivers/Atheros#pcipci-eahb_driversrs Linux Wireless ドキュメント] を見て下さい。<br />
<br />
==== ath5k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath5k<br />
* [[Debian:ath5k]]<br />
<br />
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、{{ic|ath5k}} モジュールに {{ic|1=nohwcrypt=1}} オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくは[[カーネルモジュール#モジュールオプションを設定する]]を見て下さい。<br />
<br />
ラップトップによっては無線 LED インディケータが赤と青に点滅する問題が発生することがあります。この問題を解決するには、以下を実行して下さい:<br />
<br />
# echo none > /sys/class/leds/ath5k-phy0::tx/trigger<br />
# echo none > /sys/class/leds/ath5k-phy0::rx/trigger<br />
<br />
もしくは [https://bugzilla.redhat.com/show_bug.cgi?id=618232 このバグレポート] を見て下さい。<br />
<br />
==== ath9k ====<br />
<br />
参照:<br />
* https://wireless.wiki.kernel.org/en/users/drivers/ath9k<br />
* [[Debian:ath9k]]<br />
<br />
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。{{ic|ath9k}} モジュールに対して {{ic|1=nohwcrypt=1}} [[カーネルモジュールパラメータ]]を設定することでこれを修正することができる場合があります。<br />
<br />
{{Note|lsmod コマンドを使って使用しているモジュールの名前を確認して必要に応じて {{ic|ath9k}} を置き換えてください (例: ath9k_htc)。}}<br />
<br />
サポートと開発のための [https://web.archive.org/web/20201118232556/http://lists.ath9k.org/mailman/listinfo/ath9k-devel ath9k メーリングリスト] が存在します。<br />
<br />
==== ath12k ====<br />
<br />
参照:<br />
* https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/log/?h=ath-next<br />
* https://www.qualcomm.com/products/technology/wi-fi/fastconnect/fastconnect-7800<br />
<br />
# cd /lib/firmware/ath12k/WCN7850/hw2.0<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/board.bin<br />
# sudo wget https://github.com/kvalo/ath11k-firmware/raw/master/ath12k-testing/WCN7850/hw2.0/regdb.bin<br />
<br />
===== 省電力機能 =====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Documentation/dynamic-power-save Linux Wireless] には AR9280 よりも新しい Atheros 製の ath9k シングルチップでは動的な省電力機能が有効になると書かれていますが、一部のデバイス (例: AR9285) では {{Pkg|powertop}} を使って確認すると省電力機能が無効になっていることがわかります。そのような場合、手動で有効にしてください。<br />
<br />
ただし一部のデバイス (例: AR9285) では省電力機能を有効にすると以下のようなエラーが発生します:<br />
<br />
{{hc|# iw dev wlan0 set power_save on|<br />
command failed: Operation not supported (-95)<br />
}}<br />
<br />
解決策は、{{ic|ath9k}} モジュールに対して {{ic|1=ps_enable=1}} [[カーネルモジュールパラメータ]]を設定することです。<br />
<br />
=== Intel ===<br />
<br />
==== iwlegacy ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlegacy iwlegacy] は Intel の 3945, 4965 ワイヤレスチップのワイヤレスドライバーです。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。<br />
<br />
[[udev]] が自動でドライバーをロードするはずですが、ロードされないときは手動で {{ic|iwl3945}} か {{ic|iwl4965}} をロードしてください。詳しくは[[カーネルモジュール#ロード]]を見てください。<br />
<br />
信号品質が極端に悪い場合やネットワークに接続できない場合、802.11n を無効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwl4965.conf|2=<br />
options iwl4965 11n_disable=1<br />
}}<br />
<br />
==== iwlwifi ====<br />
<br />
[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi iwlwifi] は 5100AGN, 5300AGN, 5350AGN などの Intel の最新のワイヤレスチップのワイヤレスドライバーです。[https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#Supported_Devices full list of supported devices] を見て下さい。このファームウェアは {{Pkg|linux-firmware}} パッケージに含まれています。{{AUR|linux-firmware-iwlwifi-git}}{{Broken package link|package not found}} パッケージをインストールすることで新しいバージョンを使用することができます。<br />
<br />
接続品質が悪いといった一般的なネットワーク接続の問題が起こる場合は、802.11n を無効にしてソフトウェア暗号を有効にしてみて下さい:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=1 swcrypto=1<br />
}}<br />
<br />
802.11n モードでアップリンクの速度が遅い (例: 20Mbps) 場合は、アンテナのアグリゲーションを有効化してみてください:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi 11n_disable=8<br />
}}<br />
<br />
オプションの名前に惑わされてはいけません。値が {{ic|8}} に設定されている場合、無効化ではなくアンテナのアグリゲーションが再有効化されます [https://forums.gentoo.org/viewtopic-t-996692.html?sid=81bdfa435c089360bdfd9368fe0339a9] [https://bugzilla.kernel.org/show_bug.cgi?id=81571]。<br />
<br />
これで上手くいかない場合、無線アダプターの[[電源管理#ネットワークインターフェイス|省電力モード]]を切ってみて下さい。<br />
<br />
[https://ubuntuforums.org/showthread.php?t=2183486&p=12845473#post12845473 一部のユーザ]はこれでうまく行かないようです。[https://ubuntuforums.org/showthread.php?t=2205733&p=12935783#post12935783 あるユーザ]はルータの設定で N を無効化することにより解決しました。これが唯一の解決策であることは何度も知られています。上記の2つ目のリンクでは 5Ghz オプションに試す価値があると言及されています。<br />
<br />
802.11ax (WiFi 6) アクセスポイントがあり、ビーコンの検出や不安定な接続に関する問題がある場合、[https://www.intel.com/content/www/us/en/support/articles/000054799/network-and-i-o/wireless.html Intel Article 54799] を見てみてください。<br />
<br />
{{Note|{{ic|1=11n_disable=0}} を使うと 802.11ac も妨げられ、より遅いプロトコル(5Ghz 帯での 802.11a か 2.4Ghz 帯での 802.11b/g)での接続しかできなくなります。}}<br />
<br />
===== Bluetooth の共存 =====<br />
<br />
Bluetooth ヘッドセットを接続できない場合やダウンロード速度があまり出ない場合、Bluetooth の共存を無効化してみてください [https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi#wi-fibluetooth_coexistence]:<br />
<br />
{{hc|/etc/modprobe.d/iwlwifi.conf|2=<br />
options iwlwifi bt_coex_active=0<br />
}}<br />
<br />
{{Note|カーネルバージョン 5.8 より、{{ic|bt_coex_active}} と {{ic|sw_crypto}} モジュールオプションは、{{ic|iwlmvm}} カーネルモジュールにより操作されるハードウェアに対しては無効化されています。{{ic|iwldvm}} モジュールにより操作されるより古いハードウェアでは、上記のオプションはまだ有効です。<br />
}}<br />
<br />
===== ファームウェアの問題 =====<br />
<br />
ドライバがスタックトレースとエラーを出力する問題があり、これによりスタッタリングが発生する可能性があります。<br />
<br />
{{hc|# dmesg|2=<br />
Microcode SW error detected. Restarting 0x2000000.<br />
}}<br />
<br />
または、単に雑多な問題が発生する場合もあります (例: [https://web.archive.org/web/20221119172710/https://www.reddit.com/r/archlinux/comments/x0v5jj/rant_intel_wifi_firmwares_are_utter_garbage/ 5GHz での接続の問題、ランダムな接続断、復帰時に接続なし])。<br />
<br />
ファームウェアが問題の原因であることを確認するには、{{Pkg|linux-firmware}} パッケージを[[ダウングレード]]してみてください。<br />
<br />
確認が取れたら、バグのあるファームウェアファイルを移動して、古いバージョンが読み込まれるようにしてください (こうすることで、{{Pkg|linux-firmware}} を最新の状態にできます。{{Pkg|linux-firmware}} は Intel WiFi カード以外のファームウェアアップデートも提供するからです。):<br />
<br />
# for i in {64..73} ; do mv /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz.bak ; done<br />
<br />
アップデートのたびにこの手順を繰り返さないようにするために、{{ic|pacman.conf}} 内の {{ic|NoExtract}} 配列でワイルドカードを使って、該当するファイルのインストールをブロックしてください。[[pacman#インストールさせないファイルを設定]] を参照してください。<br />
<br />
===== Windows から起動するとアダプタが検出されない =====<br />
<br />
Windows のセッション終了後に Wifi アダプタが検出されない場合、Windows の'''高速スタートアップ'''機能が原因であるかもしれません(この機能はデフォルトで有効になっています)。[[Windows と Arch のデュアルブート#Windows 設定|高速スタートアップを無効化]]してみてください。[https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi#about_dual-boot_with_windows_and_fast-boot_enabled iwlwifi カーネルドライバ wiki にはこれのエントリがあります]。<br />
<br />
==== LED の点滅を無効化する ====<br />
<br />
{{Note|{{ic|iwlegacy}} と {{ic|iwlwifi}} ドライバーで動作します。}}<br />
<br />
デフォルト設定ではモジュールの動作中 LED が点滅するようになっています。人によってはこれが鬱陶しく感じるかもしれません。Wi-Fi を使っている時に LED を固定するには、[[systemd-tmpfiles]] を使って下さい:<br />
<br />
{{hc|/etc/tmpfiles.d/phy0-led.conf|<br />
w /sys/class/leds/phy0-led/trigger - - - - phy0radio<br />
}}<br />
<br />
変更を適用するには、{{ic|systemd-tmpfiles --create phy0-led.conf}} を実行するか再起動してください。<br />
<br />
LED のトリガの全ての設定値を見るには:<br />
<br />
# cat /sys/class/leds/phy0-led/trigger<br />
<br />
{{Tip|{{ic|/sys/class/leds/phy0-led}} がない場合、{{ic|1=led_mode="1"}} [[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]]を使ってみて下さい。これは {{ic|iwlwifi}} と {{ic|iwlegacy}} ドライバの両方で有効なはずです。}}<br />
<br />
=== Broadcom ===<br />
<br />
[[Broadcom ワイヤレス]]を見て下さい。<br />
<br />
=== 他のドライバー・デバイス ===<br />
<br />
==== Tenda w322u ====<br />
この Tenda カードは {{ic|rt2870sta}} デバイスとして扱って下さい。[[#rt2x00]] を参照。<br />
<br />
==== orinoco ====<br />
カーネルパッケージの一部となっているので、別個インストールする必要はありません。<br />
<br />
いくつかの Orinoco チップセットは Hermes I/II です。{{ic|orinoco_cs}} の代わりに {{ic|wlags49_h1_cs}} を使うことで WPA サポートを得ることができます。このドライバーを使うには {{ic|orinoco_cs}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。<br />
<br />
==== prism54 ====<br />
<br />
このドライバー {{ic|p54}} はカーネルに含まれていますが、[https://wireless.wiki.kernel.org/en/users/drivers/p54#firmware このサイト] からあなたのカードに対応するファームウェアをダウンロードして {{ic|/usr/lib/firmware}} ディレクトリにインストールする必要があります。<br />
<br />
{{Note|古いドライバー {{ic|prism54}} が新しいドライバー ({{ic|p54pci}} や {{ic|p54usb}}) と衝突することがあります。{{ic|prism54}} を[[カーネルモジュール#ブラックリスト|ブラックリスト化]]して下さい。}}<br />
<br />
==== zd1211rw ====<br />
<br />
[https://sourceforge.net/projects/zd1211/ {{ic|zd1211rw}}] は ZyDAS ZD1211 802.11b/g USB WLAN チップセット用のドライバで、最近の Linux カーネルに含まれています。サポートされているドライバの一覧は [https://wireless.wiki.kernel.org/en/users/Drivers/zd1211rw/devices] を見て下さい。{{AUR|zd1211-firmware}} パッケージとして提供されているファームウェアを[[インストール]]することだけが必要です。<br />
<br />
==== hostap_cs ====<br />
<br />
[https://hostap.epitest.fi/ Host AP] は Intersil の Prism2/2.5/3 チップセットを使ったワイヤレス LAN カードの Linux ドライバです。ドライバは Linux カーネルに含まれています。<br />
<br />
{{Note|{{ic|orinico_cs}} と問題を発生することがあるので、[[カーネルモジュール#ブラックリスト|ブラックリスト化]]してください。}}<br />
<br />
=== ndiswrapper ===<br />
<br />
Ndiswrapper は Linux で Windows のドライバーを使うためのラッパースクリプトです。Windows のドライバーに含まれる ''*.inf'' と ''.sys'' ファイルが必要です。<br />
<br />
{{Note|ドライバがあなたのアーキテクチャ (例: 32/64 ビット) に適合しているかも確認してください。}}<br />
<br />
{{Tip|''*.exe'' ファイルからこれらのファイルを展開する必要がある場合は、{{pkg|cabextract}} を使って下さい。}}<br />
<br />
ndiswrapper を設定するには以下の手順に従って下さい。<br />
<br />
# {{Pkg|ndiswrapper-dkms}} をインストールする。<br />
# ドライバを {{ic|/etc/ndiswrapper/}} にインストールする: {{bc|# ndiswrapper -i filename.inf}}<br />
# ndiswrapper にインストールされたドライバをすべて一覧表示する: {{bc|$ ndiswrapper -l}}<br />
# ndiswrapper に設定ファイルを {{ic|/etc/modprobe.d/ndiswrapper.conf}} に書き出させる: {{bc|# ndiswrapper -m<br># depmod -a}}<br />
<br />
ndiswrapper のインストールはほとんど終わりました。[[カーネルモジュール#モジュールの自動ロード|起動時にモジュールをロード]]できます。<br />
<br />
ndiswrapper がロードされるかテストしてください:<br />
<br />
# modprobe ndiswrapper<br />
# iwconfig<br />
<br />
''wlan0'' が表示されるはずです。問題が起こった場合は次のページを見て下さい:<br />
[https://sourceforge.net/p/ndiswrapper/ndiswrapper/HowTos/ ndiswrapper howto]、[https://sourceforge.net/p/ndiswrapper/ndiswrapper/FAQ/ ndiswrapper FAQ]。<br />
<br />
== 参照 ==<br />
<br />
* [https://wireless.wiki.kernel.org/ Linux Wireless プロジェクト]<br />
* [http://aircrack-ng.org/doku.php?id=install_drivers Aircrack-ng guide on installing drivers]<br />
* [https://wikidevi.wi-cat.ru Wireless Device Database Wiki] (このフォークは元の wiki が終了してから wi-cat.ru によってホストされています。これより完全ではないバージョンは: [http://en.techinfodepot.shoutwiki.com TechInfoDepot], [https://deviwiki.com/ deviwiki])<br />
* https://github.com/morrownr/USB-WiFi – 様々な Wi-Fi アダプタやチップセットに関する情報や、パフォーマンステスト、ドライバの情報、一般情報を含むサイト。<br />
<br />
{{TranslationStatus|Network configuration/Wireless|2024-02-22|800336}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Fcitx5&diff=36638
Fcitx5
2024-03-27T01:36:46Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:インプットメソッド]]<br />
[[en:Fcitx5]]<br />
[[zh-hans:Fcitx5]]<br />
{{Related articles start}}<br />
{{Related|Fcitx}}<br />
{{Related|IBus}}<br />
{{Related articles end}}<br />
[https://fcitx-im.org/wiki/Fcitx_5 Fcitx5] は、軽量コアを備えた[[インプットメソッド]]フレームワークであり、アドオンを介して追加の言語サポートを提供します。 [[Fcitx]] の後継です。<br />
<br />
== インストール ==<br />
<br />
{{Pkg|fcitx5}} パッケージを[[インストール]]してください。<br />
<br />
{{Grp|fcitx5-im}} パッケージグループは、メインの {{Pkg|fcitx5}} パッケージと、[[#インプットメソッドモジュール]] の一部、そして [[#設定ツール]] を提供します。<br />
<br />
{{Note|{{Pkg|fcitx5}} パッケージ自体は、英語サポートのみの基本的なフレームワークしか提供しません。中国語や日本語などの他の言語を入力する場合は、インプットメソッドエンジン (IME) が必要です。}}<br />
<br />
使用可能な IME のリストについては、[[インプットメソッド#使用可能なインプトメソッドエディターの一覧]] を参照してください。<br />
<br />
=== インプットメソッドモジュール ===<br />
<br />
一部の GUI ツールキットは、アプリケーションでのインプットメソッド統合のためのインプットメソッドモジュールのサポートを提供します。しかし、これらは必ずしも必要であるわけではなく、[[#Wayland]] ネイティブなプロトコルのほうがより優れたパフォーマンスを得られるかもしれません。詳細は [[#統合]] を参照してください。<br />
<br />
* [[Qt]]5/6: {{Pkg|fcitx5-qt}}。<br />
* [[GTK]]: {{Pkg|fcitx5-gtk}}。<br />
* Qt4: {{AUR|fcitx5-qt4-git}}。<br />
<br />
=== プラグイン ===<br />
<br />
日付と時刻のサポートは {{Pkg|fcitx5-lua}} をインストールしてください。<br />
<br />
== 使用方法 ==<br />
<br />
=== 統合 ===<br />
<br />
インプットメソッドを実際に使用するには、アプリケーション側が入力イベントをインプットメソッドにリダイレクトする必要があります。そのような目的のために使用されるプロトコルは、ディスプレイサーバ (つまり、[[Wayland]] の ''text-input'' や [[Xorg]] の ''XIM'') や GUI ツールキットのインプットメソッドモジュールが提供していることがあります。<br />
<br />
==== Wayland ====<br />
<br />
通常、Wayland のネイティブな ''text-input'' プロトコルでは、インプットメソッドモジュールよりも良い結果を得られます。なので、[[#IM モジュール]] は [[Xwayland]] アプリケーションでのみ使用することが推奨されます。加えて、レガシーな X11 アプリケーションに対しては [[#XIM]] を有効化してください。[https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#TL.3BDR_Do_we_still_need_XMODIFIERS.2C_GTK_IM_MODULE_and_QT_IM_MODULE.3F]<br />
<br />
{{Note|<br />
* ''text-input'' は、Wayland コンポジタとクライアントが使用しているプロトコルのバージョンが同じである必要があります。一部のアプリケーションでプロトコルのバージョンが異なる場合は、[[#IM モジュール]] を使用したほうが良いかもしれません。特に、Qt < 6.7 は ''text-input-v3'' プロトコルをサポートしていません (2024年3月現在、[[GNOME]] と [[Sway]] はこのバージョンのプロトコルしかサポートしていません)。<br />
* [[KDE]] Wayland では、インプットメソッドのプロセスが KWin によって実行される必要があります。[https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#KDE_Plasma] そうするには、実行中の Fcitx 5 プロセスを終了し、''System Settings > Input Devices > Virtual Keyboard'' を開き、そこで ''Fcitx 5'' を選択してください。<br />
}}<br />
<br />
==== IM モジュール ====<br />
<br />
以下の[[環境変数]][https://fcitx-im.org/wiki/Setup_Fcitx_5#Environment_variables]を、[[環境変数#Xorg セッションごと|X11 を使用している場合はグローバルに]]、''text-input'' サポートのある Wayland コンポジタを使用している場合は [[環境変数#アプリケーションごと|Xwayland アプリケーション毎に]]、設定してください。<br />
<br />
GTK_IM_MODULE=fcitx<br />
QT_IM_MODULE=fcitx<br />
<br />
{{Note|<br />
* SDL2 ライブラリの特定のバージョンを使用する一部のゲームのサポートを有効化するには、{{ic|1=SDL_IM_MODULE=fcitx}} を[[追加]]してください。<br />
* [[kitty]] でのサポートを有効化するには {{ic|1=GLFW_IM_MODULE=ibus}} を[[追加]]してください。この環境変数の値として使えるのは {{ic|ibus}} のみです。[https://fcitx-im.org/wiki/Setup_Fcitx_5#Other_less_common_setup]<br />
}}<br />
<br />
あるいは、Wayland ネイティブな GTK アプリケーションに影響を与えずに、X11/XWayland で実行されている GTK アプリケーションに IM モジュールを使用させるには、GTK3 に対しては {{ic|1=gtk-im-module=fcitx}} を、GTK2 に対しては {{ic|1=gtk-im-module="fcitx"}} を、[[GTK#設定]] で書かれてあるような設定ファイルに書き込んでください。<br />
<br />
ロケールが {{ic|en_US.UTF-8}} であり、GTK2 アプリケーションが fcitx5 をアクティブ化できない場合は、[[環境変数#アプリケーションごと|そのアプリケーションに対して個別に]] {{ic|1=GTK_IM_MODULE=xim}} を設定することで解決します。<br />
<br />
{{Note|GTK3 のプログラムにも影響するので、グローバルに {{ic|GTK_IM_MODULE}} を xim に設定しないようにしてください。XIM はいろいろと問題があるので (再起動すると入力できなくなるなど)、なるべく使わないでください。}}<br />
<br />
==== XIM ====<br />
<br />
[[X11]] アプリケーションに対しては、以下の環境変数で XIM サポートを有効化してください:<br />
<br />
XMODIFIERS=@im=fcitx<br />
<br />
=== 自動起動 ===<br />
<br />
使用している[[デスクトップ環境]]が [[XDG Autostart]] を実装している場合、[[自動起動#デスクトップ環境のスタートアップ時]] を参照してください。<br />
<br />
[[自動起動#Xorg のスタートアップ時]] を参照し、必要に応じて [[自動起動#ウィンドウマネージャのスタートアップ時]] も見てください。<br />
<br />
{{Tip|Fcitx5 が正しく動作しているか確認するには、何らかのアプリケーションを開き、{{ic|Ctrl+Space}} を押してインプットメソッド (設定されていれば) を切り替えて、何か入力してみてください。}}<br />
<br />
{{Note|KDE Wayland で Wayland の ''text-input'' プロトコルを使うには、[[#Wayland]] に書かれてあるノートにも従ってください。}}<br />
<br />
=== 単語ライブラリ ===<br />
<br />
==== 中国語 ====<br />
<br />
For the Chinese input method of Fcitx5, several words libraries are currently provided in the repository:<br />
<br />
* {{Pkg|fcitx5-pinyin-zhwiki}}: A words library created by felixonmars based on Chinese Wikipedia. Applicable to '''Pinyin input method'''.<br />
* {{Pkg|rime-pinyin-zhwiki}}: A words library for [[Rime]] input method.<br />
*{{AUR|fcitx5-pinyin-moegirl}} : A words library created by outloudvi based on Moegirlpedia.<br />
* {{AUR|fcitx5-pinyin-moegirl-rime}}: A words library for [[Rime]] input method.<br />
* [https://github.com/cathaysia/fcitx5_dicts/releases/tag/0.0.1 cedict]: A words library converted from [https://www.mdbg.net/chinese/dictionary?page=cc-cedict cedict dictionary].<br />
<br />
{{Note|Manually downloaded words library files can be directly placed in the path of {{ic|~/.local/share/fcitx5/pinyin/dictionaries}}. The suffix of the words library file should be .dict}}<br />
<br />
=== カスタムの単語ライブラリ ===<br />
<br />
==== 中国語 ====<br />
<br />
Generally speaking, since {{Pkg|fcitx5}} supports [[#Import Sogou words library|importing the Sogou words library]], there is no need to customize words library to a large extent, but {{Pkg|fcitx5}} still provides related tools.<br />
<br />
* Install {{Pkg|libime}}<br />
<br />
The original words library file is a text file, its format is: {{ic|Character Pinyin Frequency}}<br />
<br />
After getting the original dictionary file, execute {{ic|libime_pinyindict ''words-library.txt'' ''words-library.dict'' }}.<br />
<br />
The custom dictionary file can be placed in {{ic|~/.local/share/fcitx5/pinyin/dictionaries}}<br />
<br />
{{Note|The following projects may help:<br />
* [https://pypi.org/project/pypinyin/ Chinese characters to Pinyin]<br />
* [https://pypi.org/project/OpenCC/ Simplified and Traditional Chinese Conversion]<br />
}}<br />
<br />
== 設定 ==<br />
<br />
=== 設定ツール ===<br />
<br />
{{Pkg|fcitx5}} の設定ファイルは、{{ic|~/.config/fcitx5}} にあります。テキストエディタを使用して設定ファイルを編集できますが、GUIを使った方が明らかに便利です。{{Pkg|fcitx5-configtool}} パッケージをインストールします。<br />
<br />
=== XKB の設定を上書きしないようにする ===<br />
<br />
Fcitx5 はデフォルトで X のキーボード設定を上書きします。({{ic|setxkbmap}} コマンドや [[デスクトップ環境]] が提供するグラフィカルなツールで設定できるものです) これを望んでいない場合は、{{ic|fcitx5-configtool}} を実行して、''Addons > XCB > Allow Overriding System XKB Settings'' のチェックを外してください。<br />
<br />
=== テーマと外観 ===<br />
<br />
==== テーマ ====<br />
<br />
収録されているテーマは非常に少ないですが、[https://github.com/search?q=fcitx5+theme&type=Repositories GitHub] でより多くのテーマを見つけることができます。<br />
* {{Pkg|fcitx5-breeze}}: KDE Breeze スタイルにマッチする Fcitx5 テーマ。<br />
* {{Pkg|fcitx5-nord}}: [https://github.com/tonyfettes/fcitx5-nord Nord Color Themes]。<br />
* {{Pkg|fcitx5-material-color}}: このテーマは Microsoft PinYin のような感じです。公式のリポジトリは [https://github.com/hosxy/Fcitx5-Material-Color GitHub: Fcitx5-Material-Color] にあります。README.md に、ワンラインモードの美しい設定がいくつかあります。<br />
* {{AUR|fcitx5-solarized}}: Fcitx5 のための [https://github.com/mingyech/fcitx5-solarized Solarized] カラーのテーマ。<br />
* {{AUR|fcitx5-skin-fluentdark-git}}: ぼかし効果と影のある Fluent デザインのダークテーマ。<br />
<br />
{{Tip|KDE Plasma で KCM を使用している場合は、''Setting > Regional Settings > Input Method > Configure addons > Classic User Interface > Theme'' でテーマを切り替えられます。}}<br />
<br />
{{Note|GNOME 環境で {{AUR|gnome-shell-extension-kimpanel-git}} を使用している場合、Fcitx5 でテーマを設定することはできません。[https://yanqiyu.info/2020/11/06/fcitx5-fedora-updated/#60d50c0a87a8c64ae965e403]}}<br />
<br />
==== シングルラインモードの有効化 ====<br />
<br />
ピンイン入力メソッド (または Rime 入力メソッド) の設定で、''Show preedit within application'' を有効にすると、シングルラインモードが有効になります。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== 問題の診断 ===<br />
<br />
fcitx5 の使用に問題がある場合 (例: {{ic|Ctrl+Space}} がすべてのアプリケーションで機能しないなど)、最初に試すべきことは、{{ic|fcitx5-diagnose}} を使用して診断することです。{{ic|fcitx5-diagnose}} の出力には、最も一般的な問題の手がかりが含まれているはずです。<br />
<br />
=== Fcitx5 シングルラインモードが一部のアプリケーションで動作しない ===<br />
<br />
# シングルラインモードが [[Firefox]] などの gtk アプリケーションで動作しない場合、{{Pkg|fcitx5-gtk}} をインストールしてください。<br />
# シングルラインモードが [[WPS Office]] と Sublime Text で動作しない場合、これは [[WPS Office]] と Sublime Text 自体の問題であり、{{Pkg|fcitx5}} の問題ではありません。[https://github.com/fcitx/fcitx5/issues/60]<br />
<br />
=== JetBrains IDE で Fcitx5 の位置がおかしい ===<br />
<br />
IDE と同梱されている IDE に同梱されている JBR が正しくないことが原因です。この問題を解決するには、以下のことを行う必要があります:<br />
<br />
{{AUR|jbr17-imfix}}{{Broken package link|package not found}} をインストールするか、[https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases 代替の JetBrainRuntime] をダウンロードし、展開してください。そして、[https://intellij-support.jetbrains.com/hc/en-us/articles/206544879-Selecting-the-JDK-version-the-IDE-will-run-under JetBrains のサポート]に従って IDE の JBR を変更してください。<br />
<br />
=== Fcitx5 が JetBrains IDE で動作しない ===<br />
<br />
システムの[[ロケール]]が正しく設定されていて、かつロケールが正しく生成されていることを確認してください。ロケールが不適切であると、Fcitx5 が JetBrains IDE で適切に動作しなくなる原因になります。<br />
<br />
=== 候補ボックス内で絵文字の表示がおかしい ===<br />
<br />
* 絵文字のフォント (例えば {{Pkg|noto-fonts-emoji}}) がインストールされていることを確認します。<br />
* システムフォントを (日本語の場合は) {{ic|Noto Sans CJK JP}} などにします。<br />
* 次のコマンドを使用して、Fcitx5 を再起動します:<br />
<br />
$ kill `ps -A | grep fcitx5 | awk '{print $1}'` && fcitx5&<br />
<br />
=== RStudio で Fcitx5 が利用できない ===<br />
<br />
以下のコマンドを実行してください:<br />
<br />
$ strings /usr/lib/rstudio/lib/libQt5Core.so.5 | grep "Qt 5"<br />
<br />
Qt ライブラリのバージョンを確認し、そのバージョンを使って {{Pkg|fcitx5-qt}} の {{ic|libfcitx5platforminputcontextplugin.so}} を再コンパイルし、成果物を {{ic|/usr/lib/rstudio/plugins/platforminputcontexts/}} ディレクトリ内に置いてください。<br />
<br />
{{AUR|rstudio-desktop-bin}} を使用している場合、{{AUR|rstudio-fcitx5}} を直接インストールできます。<br />
<br />
=== Steam と Dota 2 で Fcitx5 が利用できない ===<br />
<br />
{{ic|Ctrl+Shift}} ではなく {{ic|Ctrl+Space}} を使うことで、Steam の Big Screen モードと Dota 2 で IME を有効化することができます。[https://github.com/fcitx/fcitx5/issues/442]<br />
<br />
=== Wayland で実行すると Chromium で Fcitx5 が利用できない ===<br />
<br />
この問題は Chromium が Wayland で GTK IM をまだサポートしていないことが原因です。これは、スタートアップフラグに {{ic|1=--gtk-version=4}} を追加することで解決できます。これでうまく行かない場合、{{Pkg|gtk4}} がインストールされていることを確認してください。[https://bugs.chromium.org/p/chromium/issues/detail?id=1183262]<br />
<br />
=== GTK 環境の HiDPI モードで候補ポップアップがずれる ===<br />
<br />
候補ポップアップの位置がカーソル位置に固定されていない場合は、{{Pkg|fcitx5-gtk}} を [[インストール]] して下さい。<br />
<br />
=== kitty で fcitx5 を使用できない ===<br />
<br />
こちらを参照 [[kitty#IME サポートを有効にする]]<br />
<br />
=== Electron アプリケーションで Fcitx5 右 alt キーが効かない ===<br />
<br />
非システムキーボードが何らかのアプリケーション (Discord、Element など) によって使用されている場合、そのアプリケーションはインプットメソッドよりも前に {{ic|ISO_Level3_Shift}} を処理することができます。その結果、一部のインプットソッドは特定のアプリケーションで動作しなくなります。解決策の一つとして、他のインプットメソッドグループを追加し、システムレイアウトをキーボードにお対応するように設定するというものがあります。例えば、プライマリシステムキーボードとして英語 QWERTY キーボードを使っている場合に {{ic|ąćęłńóśźż}} といったポーランド語の文字を入力するには、Fcitx5 Configuration GUI で以下のようにできます:<br />
<br />
# ''Add Group'' のプラスボタンをクリックする。<br />
# ドロップダウンの中からそのグループを選択肢、インプットメソッドを追加する (キーボード。例えば ''Keyboard - Polish'')。<br />
# ''Select system keyboard layout'' でこのインプットメソッドと一致するものを選び、変更を適用する。<br />
<br />
他の解決策が欲しい場合は、Fcitx5 の開発者たちのコメントを参照してください。[https://github.com/fcitx/fcitx5/issues/740]<br />
<br />
=== Wayland 入力プロトコルを使用するソフトウェアで Wayland のポップアップウィンドウが出ない ===<br />
<br />
{{Accuracy|下記の要約に反して、GTK には text-input-v3 のサポートがあります。}}<br />
<br />
Wayland 入力プロトコルを使用するソフトウェア (環境変数 {{ic|1=GTK_IM_MODULE=wayland}} が設定されている場合の wezterm や GTK ソフトウェア) は、編集することはできますが、text-input-v3 サポートが存在しないためポップアップウィンドウが表示されません。<br />
<br />
Qt ソフトウェアや GTK ソフトウェアの Wayland でのサポートについて、fcitx5 の開発者は以下のように述べています [https://www.csslayer.info/wordpress/linux/use-plasma-5-24-to-type-in-alacritty-or-any-other-text-input-v3-client-with-fcitx-5-on-wayland/]:<br />
<br />
: Qt には text-input-v2 サポートがあります。QT_IM_MODULE が空であれば、使用することはできますが、プリエディットに関してマイナーな問題が発生します。加えて、Wayland インプットメソッドプロトコルの現在のバージョンでは、Wayland は1つのグローバルなインプットコンテキストしか持てません。なので現在、Fcitx 5 によってサポートされている「アプリケーション毎」の入力状態を使いたい場合に問題となります。しかし、Qt のテキスト入力プロトコルを使うことには、入力ウィンドウがチラつかないという利点があります。<br />
: Gtk には text-input-v3 サポートがありますが、プリエディットのスタイルは貧弱で、太字のフォントがハイライトされてしまいます。加えて、テキストサポートも貧弱です。なので現在、すべての Fcitx 機能を使いたい場合、{{ic|1=GTK_IM_MODULE=fcitx}} を使うのが依然として良い選択かもしれません。<br />
<br />
==== Sway ====<br />
<br />
Sway でのインプットメソッドのポップアップサポートは[https://github.com/swaywm/sway/pull/7226 マージされました]が、まだ安定リリースには至っていません。必要であれば、{{AUR|sway-im}} や {{AUR|sway-git}} で利用可能です。<br />
<br />
==== GNOME ====<br />
<br />
{{AUR|gnome-shell-extension-kimpanel-git}} プラグインをインストールしてください。<br />
<br />
=== 一部のアプリケーションで Fcitx5 が利用できない ===<br />
<br />
一部のアプリケーション (例: [[Anki]] Qt6) で Fcitx5 が利用できない場合、{{ic|~/.xprofile}} が存在することを確認してください。このファイルが存在しない場合は作成し、[[#統合|必要な環境変数]]を {{ic|~/.xprofile}} 内に記述してください。グラフィカルセッションを再起動し、確認してください。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 繁体字と簡体字の変換をカスタマイズする ===<br />
<br />
一部の IME はデフォルトで簡体字を想定しているため、簡体字入力を使用すると正しくない文字が表示されてしまいます (例: 為什麼 ではなく 爲什麼 になってしまう)。これを修正するために、{{ic|Simplified and Traditional Chinese Translation}} の使用をカスタマイズできます。<br />
<br />
変換を設定するには、{{ic|OpenCC profile for Simplified to Traditional}} を以下のどれかの値に設定してください:<br />
* s2t - 簡体字から繁体字 (OpenCC) (これはデフォルトであり、おそらくあなたが望んでいるものではありません)<br />
* s2tw - 簡体字から繁体字 (台湾)<br />
* s2twp - 簡体字から繁体字 (台湾)。台湾語の熟語付き。<br />
* s2hk - 簡体字から繁体字 (香港)<br />
<br />
逆の変換を行うには、{{ic|OpenCC profile for Traditional to Simplified}} を以下のどれかの値に設定してください:<br />
* t2s - 繁体字 (OpenCC) から 簡体字 (OpenCC) (これはデフォルトであり、おそらくあなたが望んでいるものではありません)<br />
* tw2s - 繁体字 (台湾) から 簡体字 (OpenCC)<br />
* tw2sp - 繁体字 (台湾) から 簡体字 (OpenCC)。本土中国語の熟語付き。<br />
* t2hk - 繁体字 (OpenCC) から香港繁体字<br />
* t2tw - 繁体字 (OpenCC) から台湾繁体字<br />
* tw2t - 繁体字 (台湾) から 繁体字 (OpenCC)<br />
* hk2s - 繁体字 (香港) から 簡体字 (OpenCC)<br />
* hk2t - 繁体字 (香港) から 繁体字中国語 (OpenCC)<br />
* t2jp - 旧字体 から日本語の新字体<br />
* jp2t - 日本語の新字体から旧字体<br />
<br />
最新のリストはここにあります: [https://github.com/BYVoid/OpenCC OpenCC]<br />
<br />
=== 選択した文字列の Unicode エンコードを表示する ===<br />
<br />
* テキストエディタで選択したテキストの Unicode エンコードを表示したい場合、テキストを直接選択し、ショートカットキー {{ic|Ctrl+Alt+Shift+u}} を使うことで、選択したテキストのエンコーディングを表示することができます。<br />
* (この Wiki のような) 非編集可能領域のテキストの Unicode エンコードを表示する場合は、まずテキストをクリップボードにコピーしてから、編集可能な領域 (検索ボックスなど) をクリックする必要があります。次に、ショートカットキー {{ic|Ctrl+Alt+Shift+u}} を使用して、クリップボード内のテキストのエンコーディングを表示できます。<br />
<br />
=== 特殊文字を入力する ===<br />
<br />
一般に、{{ic|≤}}、{{ic|ā}}、{{ic|á}}、{{ic|©}} などの単純な記号は、[[Xorg でのキーボード設定#コンポーズキーの設定|コンポーズキーを設定する]]ことで入力できますが、{{ic|②}}、{{ic|③}}、{{ic|④}} などの特殊記号の場合は、{{ic|~/.XCompose}} をカスタマイズするか、Fcitx5 の Unicode 機能を使用します。<br />
<br />
{{ic|①}} を例にとってみましょう:<br />
<br />
任意の入力ボックスにカーソルを置いて {{ic|Ctrl+Alt+Shift+u}} を押し、{{ic|circle one}} と入力すると、{{ic|①}} どの特殊文字が表示されます。<br />
<br />
=== 半角/全角句読点の切り替え ===<br />
<br />
{{Pkg|fcitx5-chinese-addons}} では、デフォルトで全角句読点が使用されますが、{{ic|Ctrl+.}} で半角と全角の句読点を切り替えることができます。<br />
<br />
=== vim で自動的に入力メソッドを切り替える ===<br />
<br />
[https://github.com/lilydjwg/fcitx.vim fcitx.vim] プラグインを使用することが推奨されています。このプラグインは、それぞれの insert モードにおいてバッファの入力メソッドの状態を個別に保持します。<br />
<br />
シンプルなソリューションとしては、以下のコードを {{ic|~/.vimrc}} の末尾に追加できます: [https://www.zhihu.com/question/341748857/answer/1739052604][https://sur.moe/post/vim%E8%BE%93%E5%85%A5%E6%B3%95%E5%88%87%E6%8D%A2%E4%B8%8D%E4%BD%BF%E7%94%A8%E6%8F%92%E4%BB%B6/]<br />
<br />
{{hc|~/.vimrc|<nowiki><br />
let fcitx5state=system("fcitx5-remote")<br />
autocmd InsertLeave * :silent let fcitx5state=system("fcitx5-remote")[0] | silent !fcitx5-remote -c " Disable the input method when exiting insert mode and save the state<br />
autocmd InsertEnter * :silent if fcitx5state == 2 | call system("fcitx5-remote -o") | endif " 2 means that the input method was opened in the previous state, and the input method is started when entering the insert mode<br />
</nowiki>}}<br />
<br />
{{Pkg|neovim}} を使用している場合、上記のコードを {{ic|~/.config/nvim/init.vim}} の末尾に追加してください。<br />
<br />
Vim9 を使用している場合、コードは以下のようになります:<br />
<br />
{{hc|~/.vimrc|<nowiki><br />
# Only taking affect after using vim9script grammar or has `vim9script` keyword.<br />
var fcitx5state = system("fcitx5-remote")<br />
autocmd InsertLeave * :silent fcitx5state = system("fcitx5-remote")[0] | silent !fcitx5-remote -c<br />
autocmd InsertEnter * :silent if fcitx5state == '2' | call system("fcitx5-remote -o") | endif<br />
</nowiki>}}<br />
<br />
{{Note|vim.cmd にこのコードを追加する場合、アンコメントする必要があるかもしれません。}}<br />
<br />
VSCodeVim を使用している場合、以下のスニペットを設定ファイルに追加してください:<br />
<br />
"vim.autoSwitchInputMethod.enable": true,<br />
"vim.autoSwitchInputMethod.defaultIM": "1",<br />
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx5-remote",<br />
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/fcitx5-remote -t {im}",<br />
<br />
=== ピンイン入力メソッド ===<br />
<br />
{{Note|The following functions are only valid for the Pinyin input method in {{Pkg|fcitx5-chinese-addons}}, please explore other input methods by yourself. }}<br />
<br />
==== Sogou 単語ライブラリをインポートする ====<br />
<br />
* For [[KDE]] users, you can import Sogou words library through ''Settings > Regional Settings > Input Method > Pinyin > Dictionary > Import''.<br />
* For users who use {{Pkg|fcitx5-configtool}}, you need to manually open the software "Fcitx5 Configuration" and manually configure it in the Pinyin input method.<br />
<br />
You can import local words library or browse and import online words library.<br />
<br />
==== Cloud Pinyin ====<br />
<br />
On the settings page of the Pinyin input method, you can enable Cloud Pinyin. But if you need to change the default backend of Cloud Pinyin, you need to change it in the global settings of {{Pkg|fcitx5}}. Provided backends are {{ic|Google}}, {{ic|Baidu}}, {{ic|GoogleCN}}.<br />
<br />
==== Stroke Filter ====<br />
<br />
Set the shortcut key after the "stroke filter" of the pinyin input method you set (the default is {{ic|`}})<br />
Then after entering the text, press the shortcut key, the words '''stroke filter''' will appear in the candidate box of the input method, and the words can be filtered by strokes. The specific rules are: h horizontal stroke, s vertical stroke, p left-falling stroke, n right-falling stroke, z turning stroke.<br />
<br />
By default, the stroke filter is to filter the first character of a sentence, but you can switch between different characters in a sentence by using '''determining characters by word'''.<br />
<br />
For example, to perform stroke filtering on the third character in the word 中华人民共和国, you can press {{ic|]}} twice in a row after enabling stroke filtering to let {{Pkg|fcitx5}} perform stroke filtering on it.<br />
<br />
{{Note|By default, the shortcut keys of '''Determining characters with words''' are {{ic|[}} and {{ic|]}}, and the shortcut keys can be viewed in the settings of '''Pinyin input method'''.}}<br />
<br />
=== RIME/Zhongzhou rhyme ===<br />
<br />
{{Tip|All changes need to be redeployed to take effect.}}<br />
<br />
==== 単語ライブラリをインポートする ====<br />
<br />
Take importing words library {{Pkg|rime-pinyin-zhwiki}} and {{AUR|fcitx5-pinyin-moegirl-rime}} as an example.<br />
<br />
{{Tip|It is also possible to put the custom words library into {{ic|~/.local/share/fcitx5/rime/}}, and the file name (filename.dict.yaml) should be the same as the words library name ([https://github.com/rime/home/wiki/RimeWithSchemata#%E7%A2%BC%E8%A1%A8%E8%88%87%E8%A9%9E%E5%85%B8 words library format]) }}<br />
<br />
1. Change the {{ic|~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml}} file (take {{ic|luna_pinyin}} as an example, and modify the name of the other input schemes)<br />
<br />
{{hc|~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml|<br />
# There should only be one "patch:" in the file, if it already exists, just paste the following code<br />
# This file is used to modify a specific input scheme, change the above luna_pinyin to other input scheme names to complete the modification of other input schemes<br />
patch:<br />
"translator/dictionary": extended #The dictionary name can be customized, just keep the same as the file name below<br />
}}<br />
<br />
2. Create a new {{ic|~/.local/share/fcitx5/rime/extended.dict.yaml}} file<br />
<br />
{{Tip|Import custom words library just add the words library name after "import_tables:"}}<br />
<br />
{{hc|~/.local/share/fcitx5/rime/extended.dict.yaml|<br />
# The following disables the default words library and does not enable the default "Baguwen" words library and word frequency system, if you do not want traditional characters and box characters to appear in candidate words<br />
---<br />
name: extended<br />
version: "2021.02.19"<br />
sort: by_weight<br />
use_preset_vocabulary: false #Whether to enable the default "Baguwen" words library and word frequency system, if you want to enable it, please set it to true.<br />
import_tables:<br />
# - luna_pinyin #Default words library, please uncomment if you want to enable it<br />
- zhwiki<br />
- moegirl<br />
# - custom words library name<br />
...<br />
}}<br />
<br />
==== 模糊音の設定 ====<br />
<br />
Please comment (#) or delete unnecessary fuzzy sounds as needed. If you need to add other fuzzy sounds, please refer to [https://gist.github.com/2320943 Mingyue Pinyin fuzzy sound custom template]<br />
<br />
If the {{ic|luna_pinyin.custom.yaml}} file does not exist<br />
<br />
{{hc|~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml|<br />
patch:<br />
"speller/algebra":<br />
- derive/^([zcs])h/$1/ #zh,ch,sh->z,c,s<br />
- derive/^([zcs])([^h])/$1h$2/ #z,c,s->zh,ch,sh<br />
- derive/^n/l #n->l<br />
- derive/^l/n #l->n<br />
- derive/([ei])n$/$1ng/ # en -> eng, in -> ing<br />
- derive/([ei])ng$/$1n/ # eng->en, ing -> in<br />
- abbrev/^([a-z]).+$/$1/ #Jianpin support<br />
- abbrev/^([zcs]h).+$/$1/ #fuzzy sounds support for Jianpin<br />
delimiter: " '" #delimiter<br />
}}<br />
<br />
If the file exists, paste the part below {{ic|patch:}} to the end of the file (there is only one {{ic|patch:}} in {{ic|luna_pinyin.custom.yaml}})<br />
<br />
==== 特殊記号 ====<br />
<br />
{{Note|Fcitx5 には特殊記号の組み込みサポートがあります。[[#特殊文字を入力する]] を参照してください。}}<br />
<br />
Import the {{ic|symbols.dict.yaml}} words library in the [https://github.com/yangshann/rime-dict rime-dict] project to input Greek letters, some mathematical symbols and Emoji expressions in Pinyin.<br />
<br />
Example:<br />
<br />
* Greek letters: input {{ic|alpha}} to output {{ic|α}}<br />
<br />
* Mathematical symbols: input {{ic|jifen}} to output {{ic|∫}}<br />
<br />
* Special symbols: Input {{ic|cha}} to output {{ic|✕,✖}}<br />
<br />
* Serial number: input {{ic|qi}} to output {{ic|Ⅶ,⑦}}<br />
<br />
* Emoji expression: Input {{ic|haha}} to output {{ic|😃,😆}}<br />
<br />
==== librime-lua プラグインをロードする ====<br />
<br />
If you want to load the librime-lua plugin, you must add the {{ic|lua}} module in the Rime input method settings of the fcitx configuration tool.<br />
<br />
{{TranslationStatus|Fcitx5|2024-03-27|804681}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Wine&diff=36630
Wine
2024-03-25T22:04:49Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:エミュレーション]]<br />
[[Category:ゲーム]]<br />
[[de:Wine]]<br />
[[en:Wine]]<br />
[[fr:Wine]]<br />
[[ru:Wine]]<br />
[[zh-hans:Wine]]<br />
{{Related articles start}}<br />
{{Related|CrossOver}}<br />
{{Related|Deepin-wine}}<br />
{{Related|Wine パッケージガイドライン}}<br />
{{Related articles end}}<br />
[[Wikipedia:ja:Wine|Wine]] は、Microsoft Windows のアプリケーションを UNIX ライクな OS で動かすための ''互換レイヤー'' です。Wine で実行されるプログラムは、エミュレータにあるようなパフォーマンスやメモリのペナルティなしに、ネイティブプログラムと同じように機能します。<br />
<br />
{{Warning|<br />
* Wine はシステムから分離されていません。<br />
* ユーザーアカウントでファイルまたはリソースにアクセスできる場合は、Wine で実行されているプログラムもそれらにアクセスできます。[[#Wine を別のユーザアカウントで実行する]] と [[セキュリティ#アプリケーションのサンドボックス化]] を参照してください。<br />
* Wine はマルウェアを実行することもできます ([https://wiki.winehq.org/FAQ#Is_Wine_malware-compatible.3F Wine FAQ on Malware compatibility] を参照)。}}<br />
<br />
== インストール ==<br />
<br />
[[multilib]] リポジトリを有効にし、{{Pkg|wine}} (開発版)、{{AUR|wine-stable}} (安定版)、{{Pkg|wine-staging}} (テスト版) のどれかをインストールすることで、Wine を利用できます。[https://wine-staging.com/ Wine Staging] は [https://www.winehq.org/ Wine] にパッチが適用されたバージョンで、安定ブランチや開発ブランチにマージされていないバグフィックスや機能追加が含まれています。<br />
<br />
{{Note|[[multilib]] リポジトリを有効化したくない場合や、追加の 32 ビットライブラリをインストールしたくない場合、{{AUR|wine-wow64}} パッケージや {{AUR|wine-staging-wow64}} パッケージを代わりに使うことができます。これらは、64 ビット Linux ライブラリのみを使用しており、32 ビット Windows アプリケーションを実行するための "新しい WoW64 モード" 付きでビルドされています。ただし、このモードのサポートは現在実験的です。[https://gitlab.winehq.org/wine/wine/-/releases/wine-9.0]}}<br />
<br />
その他の要件については [[#グラフィックドライバ]] と [[#サウンド]] も見てください。<br />
<br />
Internet Explorer や .NET に依存しているアプリケーションを使う場合、それぞれ {{pkg|wine-gecko}} と {{pkg|wine-mono}} をインストールしてください。Wine は必要なときに関連ファイルをダウンロードするので、これらのパッケージは厳密には必要ありません。しかし、[[システムメンテナンス#パッケージマネージャーを使用してソフトウェアをインストールする|これらのパッケージは pacman で管理]]べきです 。<br />
<br />
=== 任意の依存パッケージ ===<br />
<br />
{{Tip|一般的な依存パッケージ (特にゲーム関連) は [https://github.com/lutris/docs/blob/master/WineDependencies.md#archendeavourosmanjaroother-arch-derivatives lutris のドキュメント]にリストアップされています。}}<br />
<br />
Wine には、基本的なアプリケーションでは必要ないが、サウンド、3D グラフィックス、動画再生などを提供するためにインストールする必要がある[[任意の依存パッケージ]]が多くあります。<br />
<br />
多くの Windows アプリケーションは 32 ビットであり、32 ビット版のライブラリが必要であることに注意してください。これらのライブラリの一部は [[AUR]] でしか入手できません。標準 (64 ビット) のライブラリは、64 ビットアプリケーションに対して、または、新しい WoW64 モード ([[#インストール]] 章のノートを参照) のある Wine バージョンを実行している場合は全てのアプリケーションに対して使用することができます。Windows 実行ファイルが 64 ビットであるかどうかは、{{man|1|file}} コマンドで確認することができます。<br />
<br />
==== グラフィックドライバ ====<br />
<br />
グラフィックドライバの32ビットバージョンをインストールする必要があります。[[Xorg#ドライバーのインストール]] にある表の ''OpenGL (multilib)'' 列に載っているパッケージをインストールしてください。<br />
<br />
Wine がターミナルウィンドウに以下のようなメッセージを出力する場合、ドライバが不適切であるか正しく設定されていないことの印です:<br />
<br />
Direct rendering is disabled, most likely your OpenGL drivers have not been installed correctly<br />
<br />
{{Note|適切なライブラリをインストールした後は X を再起動する必要があるかもしれません。}}<br />
<br />
==== サウンド ====<br />
<br />
デフォルトの状態では、Wine アプリケーションを実行する際にサウンドの問題が発生する場合があります。''winecfg'' でサウンドデバイスが1つだけ選択されていることを確認してください。<br />
<br />
あなたが使いたいオーディオドライバの正しいパッケージをインストールしてください:<br />
<br />
* [[ALSA]] の場合、{{Pkg|lib32-alsa-lib}} と {{Pkg|lib32-alsa-plugins}} をインストールしてください<br />
* [[PulseAudio]] の場合、{{Pkg|lib32-libpulse}} をインストールしてください<br />
* [[PipeWire]] の場合、{{Pkg|lib32-pipewire}} と、以下のどれかをインストールしてください:<br />
** PulseAudio をフロントエンドとして使用するには {{Pkg|pipewire-pulse}} と {{Pkg|lib32-libpulse}}。<br />
** ALSA をフロントエンドとして使用するには {{Pkg|pipewire-alsa}}、{{Pkg|lib32-alsa-lib}}、{{Pkg|lib32-alsa-plugins}}。<br />
* [[OSS]] の場合、{{Pkg|lib32-alsa-oss}} をインストールしてください<br />
<br />
上記のパッケージをインストールしても''なお''、''winecfg'' がオーディオドライバを見つけられない時 (Selected driver: (none)) は、[https://wiki.winehq.org/Wine_User's_Guide#Using_Regedit レジストリから設定してください]。例えば、64ビットの標準の wine-1.9.7 で32ビットの Windows アプリケーションを使ったときにマイクが機能しない場合、次の手順でサウンドハードウェア (サウンドプレイバックとマイク) にアクセスできるようになります: ''regedit'' を開いて ''HKEY_CURRENT_USER > Software > Wine > Drivers'' と進んで ''Audio'' という名前の文字列を追加して値を ''alsa'' に設定してください。また、[[#WINEPREFIX|prefix を再作成]]することで解決するかもしれません。<br />
<br />
===== MIDI サポート =====<br />
<br />
90年代のビデオゲームでは音楽に [[MIDI]] を使うのが人気でした。古いゲームを動かすときは、設定をしないと音楽が再生できないのは珍しくありません。<br />
Wine には素晴らしい MIDI サポートがあります。ただし、最初に MIDI がシステムで動くように設定する必要があります。詳しくは [[MIDI]] を見てください。そして Wine が適切な MIDI 出力を使うように設定しなくてはなりません。<br />
<br />
==== 他の依存パッケージ ====<br />
<br />
一部のアプリケーションは追加のパッケージを必要とします [https://wiki.winehq.org/Building_Wine#Satisfying_Build_Dependencies]。<br />
<br />
* 暗号化サポートは、{{Pkg|lib32-gnutls}} をインストールしてください。<br />
* 32ビットの prefix におけるジョイスティックとゲームパッドのサポートは、{{Pkg|lib32-sdl2}} をインストールしてください。<br />
* 32ビットプログラムでのメディアプレイバックは、{{Pkg|lib32-gst-plugins-base}}、{{Pkg|lib32-gst-plugins-good}}、{{Aur|lib32-gst-plugins-bad}}、{{Aur|lib32-gst-plugins-ugly}}、{{Aur|lib32-gst-libav}} をインストールしてください。<br />
* [[Wikipedia:ja:NTLM|NTLM]] 認証は、{{Pkg|samba}} をインストールしてください。<br />
<br />
=== Prefix 内の依存パッケージ ===<br />
<br />
システムの依存パッケージとは別に、多くのプログラムは追加のフォントや DLL が Wine prefix にインストールされていることを要求します [https://wiki.winehq.org/FAQ#My_application_says_some_DLL_or_font_is_missing._What_do_I_do?]。これらの依存関係は、[https://github.com/Winetricks/winetricks Winetricks] を使うことでインストールすることができます。Winetricks はシンプルなパッケージマネージャで、何かをインストールしたり、設定の調整を行ったりする ''verb'' が用意されています。Winetricks には2つの使い方があります:<br />
<br />
* CLI から: {{ic|winetricks ''verb_name''}} を実行する。<br />
* GUI から: {{Pkg|zenity}} か {{Pkg|kdialog}} をインストールし、{{ic|winetricks}} を実行する。<br />
<br />
依存パッケージ間の衝突により、何でもできる "完璧な" Windows 環境を構築することができない場合があります [https://github.com/Winetricks/winetricks/issues/1580#issuecomment-666604256] [https://github.com/Winetricks/winetricks/issues/469]。そうするよりも、(重要な設定やデータが存在しない限り) prefix を使い捨てにして、異なる依存パッケージを必要とするプログラム毎に個別の prefix を使用するほうが良いです。[[#WINEPREFIX]] 環境変数を使うことで、どの prefix に対して verb を実行するかを指定することができます。<br />
<br />
プログラムが必要とする verb を知るには、多くのトライアンドエラーが必要になる可能性があります。一部のより一般的な依存パッケージは [https://usebottles.com/database/dependencies/ Bottles の依存関係ページ]を、また以下のプログラム固有のリソースを参照してください:<br />
<br />
* [https://appdb.winehq.org/ Wine Application Database]: 公式のリソースですが、古く、他のものと比べてメンテナンスされていないかもしれません。<br />
* [https://lutris.net/ Lutris のウェブサイト]。このサイトで扱われているゲームを実行しようとしているならば、ドロップダウンメニューをクリックして、''View install script'' をクリックすることで Lutris で使用されている Winetricks の verb を見ることができます。<br />
* [https://github.com/bottlesdevs/programs Bottles のプログラムリポジトリ]。小さいですが、ゲーム以外もあります。<br />
* [https://www.protondb.com/ ProtonDB]。Proton は Wine とは異なる互換性があります (それに加え、このサイトを見るなら単に Proton を使うほうが良いかもしれません)。しかし、ユーザーが書き込んだ verb は使えるかもしれません。<br />
** また、[https://github.com/GloriousEggroll/proton-ge-custom proton-ge-custom] に同梱されている変化の速い [https://github.com/Open-Wine-Components/ULWGL-protonfixes/ protonfixes] ツールのソースを参照することもできます。しかし、このツールはゲームを修正する追加の Proton と GE のパッチが存在していることを想定しています。<br />
<br />
ゲームの prefix を管理するのに多くの時間が掛かる場合は、prefix を管理してくれるサードパーティのアプリケーションを使う方が簡単かもしれません。<br />
<br />
=== サードパーティ製アプリケーション ===<br />
<br />
以下のアプリケーションは、独自のコミュニティーとウェブサイトを持っており、メインの Wine コミュニティによって '''サポートされていません'''。詳しくは [https://wiki.winehq.org/Third_Party_Applications Wine Wiki] を見てください。<br />
<br />
* {{App|[[Bottles]]|Wine 用のグラフィカルな prefix マネージャであり、ランナーマネージャ。GTK ベース。|https://usebottles.com/|{{AUR|bottles}}}}<br />
* {{App|[[CrossOver]]|公式の商用版 Wine。グラフィカルなインターフェイスと包括的なエンドユーザーサポートを提供しています。|https://www.codeweavers.com|{{AUR|crossover}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Wine のゲームから Linux ネイティブのゲーム、エミュレータまで、あらゆるゲームに対応するゲームランチャー (prefix の管理機能が存在します)。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|[[Wikipedia:PlayOnLinux|PlayOnLinux]]|Wine のグラフィカルな prefix マネージャです。プログラムのインストールと設定を支援するスクリプトが含まれています。|https://www.playonlinux.com|{{AUR|playonlinux}}}}<br />
* {{App|[[Proton]]|[[Steam]] のために作成された互換ツール。Wine と追加のコンポーネントをベースとしています。互換性のリストは [https://www.protondb.com/ ProtonDB] を見てください。|https://github.com/ValveSoftware/Proton|{{AUR|proton}}}}<br />
* {{App|PyWinery|シンプルでグラフィカルな Wine 用の prefix マネージャ。|https://github.com/ergoithz/pywinery|{{AUR|pywinery}}}}<br />
* {{App|Q4Wine|Wine のグラフィカルな prefix マネージャ。[[Qt]] テーマを Wine の設定に適用することで見た目を統合することができます。|https://sourceforge.net/projects/q4wine/|{{AUR|q4wine-git}}}}<br />
* {{App|WINEgui|ユーザフレンドリーな WINE グラフィカルインターフェイス。|https://gitlab.melroy.org/melroy/winegui|{{AUR|winegui}}, {{AUR|winegui-bin}}}}<br />
<br />
== 設定 ==<br />
<br />
通常 Wine の設定には以下を用います:<br />
<br />
* [https://wiki.winehq.org/Winecfg winecfg] は Wine の GUI 設定ツールです。{{ic|winecfg}} を実行することで起動できます。<br />
* [https://wiki.winehq.org/Regedit regedit] は Wine のレジストリ編集ツールです。{{ic|regedit}} を実行することで起動できます。WineHQ の記事 [https://wiki.winehq.org/Useful_Registry_Keys Useful Registry Keys] を見てください。<br />
* [https://wiki.winehq.org/Control control] は Windows コントロールパネルの Wine 実装です。{{ic|wine control}} を実行することで起動できます。<br />
* 完全なリストは WineHQ の [https://wiki.winehq.org/List_of_Commands List of Commands] を見てください。<br />
<br />
=== WINEPREFIX ===<br />
<br />
デフォルトでは、Wine の設定ファイルとインストールされた Windows プログラムは {{ic|~/.wine}} に置かれます。このディレクトリは一般的に "Wine prefix" や "Wine bottle" と呼ばれます。Windows プログラムを動かしたり、Wine を設定するための {{ic|winecfg}} を動かすと自動的にフォルダが作成されます。そして Wine で動いているプログラムはこのフォルダの下のツリーを {{ic|C:}} (C ドライブ) とみなします。<br />
<br />
{{Note|Wine の prefix には前方互換性がありません。新しいバージョンの Wine は、必要に応じて自動的に古い prefix をアップグレードします。アップグレードされると、その prefix は古いバージョンの Wine で動作しなくなる場合があります。[https://github.com/GloriousEggroll/wine-ge-custom/releases/tag/7.0-GE-8-LoL]}}<br />
<br />
{{ic|WINEPREFIX}} [[環境変数]]を設定することで、Wine が使用する prefix の場所を指定することができます。これは Windows プログラムにそれぞれ違う設定をしたいときに便利です。初めて新しい Wine の prefix を使ってプログラムを起動した時、Wine は自動で C ドライブとレジストリの入ったディレクトリを作成します。<br />
<br />
例えば、{{ic|1=env WINEPREFIX=~/.win-a wine program-a.exe}} と {{ic|1=env WINEPREFIX=~/.win-b wine program-b.exe}} のようにプログラムを動かせば、2つのプログラムは別の C ドライブとレジストリを使います。<br />
<br />
{{Warning|Wine の prefix は[[Wikipedia:ja:サンドボックス (セキュリティ)|サンドボックス]]ではありません!Wine で動いているプログラムは依然として Wine システムの外にアクセスすることが可能です (例えば、Wine の prefix に関係なく、{{ic|Z:}} は {{ic|/}} にマッピングされます)。}}<br />
<br />
Windows プログラムや GUI ツールを実行せずに、デフォルトの prefix を作成するには:<br />
<br />
$ env WINEPREFIX=~/.customprefix wineboot -u<br />
<br />
=== WINEARCH ===<br />
<br />
Wine はデフォルトで 64 ビットの環境を作ります。この挙動は {{ic|WINEARCH}} [[環境変数]]を使うことで変更できます。{{ic|~/.wine}} ディレクトリの名前を変更し、{{ic|1=$ WINEARCH=win32 winecfg}} を実行して新しい Wine 環境を作成してください。これで 32 ビットの Wine 環境が作られます。{{ic|WINEARCH}} を設定しないときは 64 ビット環境が作られます。<br />
<br />
{{ic|WINEPREFIX}} を使うことで {{ic|win32}} 環境と {{ic|win64}} 環境を分離することができます:<br />
<br />
$ WINEARCH=win32 WINEPREFIX=~/win32 winecfg<br />
$ WINEPREFIX=~/win64 winecfg<br />
<br />
{{ic|WINEARCH}} を ''winetricks'' などの他の Wine プログラムと一緒に使うこともできます (以下の例では Steam):<br />
<br />
WINEARCH=win32 WINEPREFIX=~/.local/share/wineprefixes/steam winetricks steam<br />
<br />
prefix のアーキテクチャは、レジストリファイルを見ることで確認できます。以下のコマンドは、{{ic|~/.wine}} prefix のシステムレジストリを読み込み、アーキテクチャタイプに応じて {{ic|1=#arch=win32}} か {{ic|1=#arch=win64}} を返します:<br />
<br />
$ grep '#arch' ~/.wine/system.reg<br />
<br />
=== フォント ===<br />
<br />
Wine アプリケーションで読みづらいフォントや不足しているフォントがある場合、フォントがインストールされていないのかもしれません。Wine からアクセスできるようにシステムフォントにすべてリンクするには:<br />
<br />
$ cd ${WINEPREFIX:-~/.wine}/drive_c/windows/Fonts && for i in /usr/share/fonts/**/*.{ttf,otf}; do ln -s "$i"; done<br />
<br />
Wine はフォントをレンダリングするために FreeType を使用します。FreeType のデフォルトは数リリース前に変更されました。Wine でプログラムを実行する際に以下の[[環境変数]]を使ってみてください:<br />
<br />
FREETYPE_PROPERTIES="truetype:interpreter-version=35"<br />
<br />
他の手段として、Wine prefix に [[MS フォント#インストール|Microsoft の TrueType フォントをインストール]]するというものがあります。これでもうまく行かない場合、まず {{ic|winetricks corefonts}} を実行し、最後の手段として {{ic|winetricks allfonts}} を実行してみてください。<br />
<br />
プログラムを実行した後は、すべての Wine サーバを kill して {{ic|winecfg}} を実行してください。これでフォントが読めるようになるはずです。<br />
<br />
フォントが汚く見える場合、[https://wiki.winehq.org/FAQ#How_do_I_edit_the_Wine_registry.3F regedit] を使って以下のテキストファイルを Wine のレジストリにインポートしてください:<br />
<br />
Windows Registry Editor Version 5.00<br />
[HKEY_CURRENT_USER\Software\Wine\X11 Driver]<br />
"ClientSideWithRender"="N"<br />
<br />
高解像度ディスプレイにおいては、dpi の値を winecfg で調整できます。<br />
<br />
[[フォント設定#fontconfig をサポートしていないアプリケーション]] も参照してください。<br />
<br />
==== フォントスムージングの有効化 ====<br />
<br />
Wine のフォントレンダリングを改善する良い方法として、cleartype フォントスムージングを有効化するというものがあります。<br />
"Subpixel smoothing (ClearType) RGB" を有効化するには:<br />
<br />
{{hc|/tmp/fontsmoothing.reg|2=<br />
REGEDIT4<br />
<br />
[HKEY_CURRENT_USER\Control Panel\Desktop]<br />
"FontSmoothing"="2"<br />
"FontSmoothingOrientation"=dword:00000001<br />
"FontSmoothingType"=dword:00000002<br />
"FontSmoothingGamma"=dword:00000578<br />
EOF<br />
}}<br />
<br />
$ WINE=${WINE:-wine} WINEPREFIX=${WINEPREFIX:-$HOME/.wine} $WINE regedit /tmp/fontsmoothing.reg 2> /dev/null<br />
<br />
詳細は [https://askubuntu.com/a/219795 元になった回答] を見てください。<br />
<br />
=== デスクトップランチャーメニュー ===<br />
<br />
Windows アプリケーションインストーラによってショートカットが作成された場合、Wine は [[.desktop]] ファイルを作成します。Arch Linux ではデフォルトで以下の場所にファイルが作成されます:<br />
<br />
* デスクトップショートカットは {{ic|~/Desktop}} に保存されます<br />
* スタートメニューのショートカットは {{ic|~/.local/share/applications/wine/Programs/}} に保存されます<br />
<br />
{{Note|1=Wine は全てのユーザー共通で Windows アプリケーションをインストールすることはできません。{{ic|.desktop}} ファイルが {{ic|/usr/share/applications}} に作成されることはありません。詳しくは WineHQ バグの [https://bugs.winehq.org/show_bug.cgi?id=11112 11112] を見てください。}}<br />
<br />
{{Tip|メニューがインストールしてもファイルが''作られなかったり''もしくは消えてしまった場合、{{ic|wine winemenubuilder}} を使ってください。}}<br />
<br />
==== Wine ユーティリティのメニューエントリを作成する ====<br />
<br />
デフォルトでは、Wine をインストールしても Wine に付属しているソフトウェア (例:''winecfg'' や ''winebrowser'' など) のデスクトップメニューやアイコンは作られません。{{AUR|wine-installer}} か {{AUR|wine-installer-git}} をインストールすることでこれらを作成できます。あるいは、以下の指示により、これらのアプリケーションのエントリを追加できます。<br />
<br />
まず、ベースメニューを作るために Wine で Windows プログラムをインストールします。ベースメニューが作られたら、{{ic|~/.local/share/applications/wine/}} に以下のファイルを作成してください:<br />
<br />
{{hc|wine-browsedrive.desktop|2=<br />
[Desktop Entry]<br />
Name=Browse C: Drive<br />
Comment=Browse your virtual C: drive<br />
Exec=wine winebrowser c:<br />
Terminal=false<br />
Type=Application<br />
Icon=folder-wine<br />
Categories=Wine;<br />
}}<br />
<br />
{{hc|wine-uninstaller.desktop|2=<br />
[Desktop Entry]<br />
Name=Uninstall Wine Software<br />
Comment=Uninstall Windows applications for Wine<br />
Exec=wine uninstaller<br />
Terminal=false<br />
Type=Application<br />
Icon=wine-uninstaller<br />
Categories=Wine;<br />
}}<br />
<br />
{{hc|wine-winecfg.desktop|2=<br />
[Desktop Entry]<br />
Name=Configure Wine<br />
Comment=Change application-specific and general Wine options<br />
Exec=winecfg<br />
Terminal=false<br />
Icon=wine-winecfg<br />
Type=Application<br />
Categories=Wine;<br />
}}<br />
<br />
そして {{ic|~/.config/menus/applications-merged/}} に次のファイルを作成してください:<br />
<br />
{{hc|wine.menu|<nowiki><br />
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"<br />
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd"><br />
<Menu><br />
<Name>Applications</Name><br />
<Menu><br />
<Name>wine-wine</Name><br />
<Directory>wine-wine.directory</Directory><br />
<Include><br />
<Category>Wine</Category><br />
</Include><br />
</Menu><br />
</Menu><br />
</nowiki>}}<br />
<br />
以上の設定でアイコンが表示されない、あるいはアイコンが醜い場合は、有効になっているアイコンセットにランチャーのためのアイコンが存在しないのが原因です。使いたいアイコンの位置を指定してアイコンの設定を置き換えてください。プロパティメニューのアイコンをクリックしても同じことができます。これらのショートカットをサポートしているアイコンセットは {{AUR|gnome-colors-icon-theme}} です。<br />
<br />
==== メニューエントリを削除する ====<br />
<br />
Wine によって作成されるエントリは {{ic|~/.local/share/applications/wine/Programs/}} にあります。プログラムの ".desktop" エントリを削除すればメニューからアプリケーションが削除されます。<br />
<br />
Wine による不要な拡張を削除するのに加えて、以下のコマンドを実行: [https://wiki.winehq.org/FAQ#How_do_I_clean_the_Open_With_List.3F]<br />
<br />
$ rm ~/.local/share/mime/packages/x-wine*<br />
$ rm ~/.local/share/applications/wine-extension*<br />
$ rm ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*<br />
$ rm ~/.local/share/mime/application/x-wine-extension*<br />
<br />
場合によっては、KDE の Wine サブメニューからアイテムを完全に削除するために、{{ic|wine-*.menu}} も {{ic|/.config/menus/}} から削除する必要があります。<br />
<br />
=== 外観 ===<br />
<br />
XP のような見た目のテーマを[https://archive.org/download/zune-desktop-theme/ZuneDesktopTheme.msi ダウンロード]できます。これをインストールするには、[https://wiki.winehq.org/Wine_User%27s_Guide#Running_.msi_files この上流の wiki 記事] を見てください。最後に、''winecfg'' を使ってそのテーマを選択してください。<br />
<br />
{{Note|上記のリンクのテーマは、Windows XP の prefix バージョンが設定された32ビット prefix にしかインストールできません。64ビット prefix にインストールするには、一時的な32ビット prefix を作成し、テーマをインストールし、{{ic|drive_c/Windows/Resources/Themes}} から {{ic|Zune}} フォルダと {{ic|Zune.theme}} ファイルを64ビットの prefix の同じ場所にコピーする必要があるかもしれません。}}<br />
<br />
Wine staging のユーザは、現在の GTK テーマにマッチさせるために、代わりに ''winecfg'' の Staging セクションの ''Enable GTK3 Theming'' オプションを有効化する必要があるかもしれません。<br />
<br />
=== 印刷 ===<br />
<br />
''win32 prefix'' で wine アプリケーション (例: MS Word) を使ってプリンター (ローカル・ネットワーク両方) を使用するには {{Pkg|lib32-libcups}} パッケージをインストールしてください。それから wine アプリケーションを再起動 (''wineboot'') してください。<br />
<br />
=== ネットワーク ===<br />
<br />
アプリケーションが LTS や HTTPS 接続を行えるようにするために、場合によっては Wine のインストール後に {{pkg|lib32-gnutls}} を[[インストール]]する必要があります。<br />
<br />
ICMP (ping) の場合、[https://wiki.winehq.org/FAQ#Failed_to_use_ICMP_.28network_ping.29.2C_this_requires_special_permissions WineHQ FAQ] で説明されているように Wine はネットワークアクセスを必要とします:<br />
<br />
# setcap cap_net_raw+epi /usr/bin/wine-preloader<br />
<br />
このコマンドを実行した後に問題が発生する場合 (キャッチされない例外や特権命令など)、以下を実行してケーパビリティを削除してください:<br />
<br />
# setcap -r /usr/bin/wine-preloader<br />
<br />
== 使用法 ==<br />
<br />
{{Warning|Wine アプリケーションを root として実行/インストールしないでください! 詳細は [https://wiki.winehq.org/FAQ#Should_I_run_Wine_as_root.3F Wine FAQ] を見てください。}}<br />
<br />
Wine の使用法に関する一般的な情報は [https://wiki.winehq.org/Wine_User%27s_Guide#Using_Wine Wine User's Guide] を見てください。<br />
<br />
Wine における特定の Windows アプリケーションに関する追加の情報は [https://appdb.winehq.org/ Wine Application Database (AppDB)] を見てください。<br />
<br />
=== Wayland ===<br />
<br />
{{Warning|ネイティブな [[Wayland]] ドライバはまだ実験段階です。}}<br />
<br />
デフォルトでは、Wine は Wayland 上で動作する際に [[Xwayland]] を使用します。これは、ほとんどのユーザーにとって十分なエクスペリエンスを得られます。バージョン 9.0rc1 現在、Wine はネイティブな Wayland サポートにおいて大幅な進捗があり、一部のユースケースにおいては使用に適した状態になっています。<br />
<br />
最近の Wine バージョンで追加されたネイティブな Wayland ドライバを試すには、以下の手順を踏んでください:<br />
<br />
* [https://wiki.winehq.org/FAQ#How_do_I_edit_the_Wine_registry.3F regedit] で以下のテキストファイルを Wine レジストリにインポートしてください:<br />
<br />
Windows Registry Editor Version 5.00<br />
[HKEY_CURRENT_USER\Software\Wine\Drivers]<br />
"Graphics"="x11,wayland"<br />
<br />
* {{Ic|DISPLAY}} [[環境変数]]を空にして、Xwayland を使用せずにネイティブな Wayland ドライバを強制してください:<br />
<br />
$ DISPLAY= wine example.exe<br />
<br />
2番目の手順で Wine が停止した場合は、インストールされている Wine のバージョンが新しい Wayland ドライバのサポートありでビルドされていることを確認してください。<br />
<br />
=== Wine の実行を停止する ===<br />
<br />
起動済みのプログラムを停止する ({{ic|wine}} に対して {{ic|wine}}、あるいは {{ic|wineconsole}} に対して Ctrl+C を押す) と、バックグラウンドでプロセスが実行中のままになってしまうかもしれません。例えば:<br />
{{bc|<nowiki>$ ps -xo pid,cmd<br />
PID CMD<br />
297 -bash<br />
933 /usr/bin/wineserver<br />
939 C:\windows\system32\services.exe<br />
942 C:\windows\system32\winedevice.exe<br />
950 C:\windows\system32\explorer.exe /desktop<br />
954 C:\windows\system32\winedevice.exe<br />
965 C:\windows\system32\plugplay.exe<br />
977 C:\windows\system32\svchost.exe -k LocalServiceNetworkRestricted<br />
984 C:\windows\system32\rpcss.exe<br />
997 mbserver.exe<br />
1017 start.exe /exec<br />
1019 C:\windows\system32\conhost.exe --unix --width 169 --height 40 --server 0x10<br />
1021 Z:\home\wineuser\mbserver.exe<br />
1030 ps -xo pid,cmd</nowiki>}}<br />
実行中の {{ic|wine}} と {{ic|wineconsole}} プロセスは、[https://wiki.winehq.org/Wine_User%27s_Guide#-k_%5Bn%5D wineserver -k] コマンドを使って一度にすべて停止できます。例えば:<br />
{{bc|<nowiki>$ wineserver -k 15</nowiki>}}<br />
このコマンドは {{ic|WINEPREFIX}} 変数に依存しているため、カスタムの Wine prefix を使用している場合は、以下のコマンドを使用してください:<br />
{{bc|<nowiki>$ WINEPREFIX=~/wine/my-prefix wineserver -k</nowiki>}}<br />
上記の例で挙げたプログラムを両方停止するコマンドは以下のようになります:<br />
{{bc|<nowiki>$ kill 997 1021</nowiki>}}<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== Wineconsole ===<br />
<br />
''.exe'' を実行してゲームファイルにパッチを適用する必要がある場合 (例えば古いゲームにワイドスクリーン対応 MOD を適用するなど)、通常の方法で Wine から ''.exe'' を実行しても何も起きないことがあります。その場合、ターミナルを開いて以下のコマンドを実行してください:<br />
<br />
$ wineconsole cmd<br />
<br />
そして、プログラムがあるフォルダまで移動して、''.exe'' プログラムを実行してください。<br />
<br />
=== Winetricks ===<br />
<br />
[https://wiki.winehq.org/Winetricks Winetricks] は Windows プログラムを動かすために必要なランタイムなどをインストールするためのスクリプトです。DirectX 9.x や MSXML (Microsoft Office 2007 や Internet Explorer で必要)、Visual ランタイムライブラリなどをインストールできます。<br />
<br />
使うには {{pkg|winetricks}} パッケージ (あるいは {{AUR|winetricks-git}}) を[[インストール]]してください。そして、以下で実行してください:<br />
$ winetricks<br />
<br />
GUI を使う場合、{{pkg|zenity}} (GTK) か {{pkg|kdialog}} (Qt) を[[インストール]]してください。<br />
<br />
=== パフォーマンス ===<br />
<br />
==== CSMT ====<br />
<br />
CSMT は OpenGL 呼び出しに対して別のスレッドを使うことでパフォーマンスを著しく向上させる技術で、Wine によって使われています。Wine 3.2 から CSMT はデフォルトで有効になっています。<br />
<br />
アプリケーションによっては CSMT がパフォーマンスを劣化させることがあります。そのような場合、{{ic|wine regedit}} を実行してレジストリエディタを起動し、''HKEY_CURRENT_USER -> Software > Wine > Direct3D > csmt'' に DWORD の値 0x00 を設定して、CSMT を無効化してください。<br />
<br />
詳細:<br />
:CSMT の開発者 Stefan Dösinger による [https://www.phoronix.com/forums/showthread.php?93967-Wine-s-Big-Command-Stream-D3D-Patch-Set-Updated/page3&s=7775d7c3d4fa698089d5492bb7b1a435 Phoronix Forum の議論]<br />
<br />
==== ゲームで強制的に OpenGL モードにする ====<br />
<br />
多くのゲームには OpenGL モードがあり''多くの場合''デフォルトの DirectX モードより良いパフォーマンスが出ます。OpenGL レンダリングを有効にする方法は''それぞれのアプリケーションによる''一方、多くのゲームは {{Ic|-opengl}} パラメータを認識します。<br />
<br />
$ wine ''/path/to/3d_game.exe'' -opengl<br />
<br />
詳しい情報は、それぞれのアプリケーションのドキュメントや Wine の [https://appdb.winehq.org AppDB] を見てください。<br />
<br />
==== VKD3D-Proton ====<br />
<br />
[https://github.com/HansKristian-Work/vkd3d-proton VKD3D-Proton] は [https://wiki.winehq.org/Vkd3d VKD3D] のフォークで、Vulkan を用いて完全な Direct3D 12 API の実装を目指しています。このプロジェクトは、Proton で Direct3D 12 をサポートし、DirectX 12 ゲームのパフォーマンスと互換性を向上させるものです。<br />
<br />
VKD3D-Proton を使うには、{{AUR|vkd3d-proton-mingw}} または {{AUR|vkd3d-proton-bin}} をインストールしてください。そして、以下のコマンドを実行し、prefix (デフォルトでは {{ic|~/.wine}}) で VKD3D-Proton を有効化してください:<br />
$ WINEPREFIX=''your-prefix'' setup_vkd3d_proton install<br />
<br />
{{Warning|VKD3D-Proton は DirectX 12 の DLL を上書きします。これは、オンラインマルチプレイヤーゲームではチートとみなされる場合があり、あなたのアカウントが '''BAN''' されてしまうかもしれません。自己責任で使用してください!}}<br />
<br />
==== DXVK ====<br />
<br />
[https://github.com/doitsujin/dxvk DXVK] は、DirectX 9、10、11 の Vulkan による実装です。ほとんどのゲームにおいて、こちらのほうが WineD3D ドライバよりもパフォーマンス及び互換性で勝っています。<br />
<br />
DXVK を使うには、{{AUR|dxvk-mingw}} または {{AUR|dxvk-bin}} をインストールしてください。そして、以下のコマンドを実行し、prefix (デフォルトでは {{ic|~/.wine}}) で DXVK を有効化してください:<br />
<br />
$ WINEPREFIX=''your-prefix'' setup_dxvk install<br />
<br />
DXVK をデュアルグラフィックスの環境で使用する場合、Wine は専用の GPU を優先します。ノート PC では、省電力のためにこれを上書きできます:<br />
<br />
$ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/''your_driver''.json wine ''executable''<br />
<br />
===== HDR サポート =====<br />
<br />
[[Gamescope]] と一緒に使用する場合、DXVK (V2.1+) は HDR10 ディスプレイのサポートを提供します ([[AMDGPU]] ユーザのみ)。詳細は [[HDR モニターのサポート]] を参照してください。<br />
<br />
==== Gallium Nine ====<br />
<br />
Gallium ベースの mesa ドライバを使用する場合 (ほとんどの場合 AMD と Intel のカード)、DirectX 9 で優れたパフォーマンスを出すネイティブな [https://docs.mesa3d.org/gallium-nine.html Gallium Direct3D ドライバ]があります。このドライバは DXVK によりほとんど使われなくなりましたが、Vulkan のサポートがない場合に依然として便利である場合があります。DXVK と Gallium Nine のパフォーマンスは[https://www.supergoodcode.com/the-finale/#this-is-no-longer-a-zink-blog ほぼ同じである]はずです。<br />
<br />
Gallium Nine を使うには {{Pkg|wine-nine}} をインストールしてください。これはスタンドアローンパッケージで、どの Wine バージョンとも併用できます。有効化されているか確かめるには {{ic|wine ninewinecfg}} を実行してください。<br />
<br />
古い Intel graphics (4 から 7 世代: GMA 3000, GMA 4500, HD 2000-5000; 2006年-2014年) では、Mesa 21.2 以降 Crocus Gallium ドライバが i965 の代わりに使用されるはずです。Wine を実行する前に以下の環境変数を [[Export]] してください:<br />
<br />
MESA_LOADER_DRIVER_OVERRIDE=crocus<br />
<br />
=== Wine によるファイルの関連付けの解除 ===<br />
<br />
デフォルトで、大量のフォーマットで Wine はデフォルトアプリケーションとして設定されます。Windows にしかないフォーマットもあり (例: {{ic|vbs}} や {{ic|chm}})、その場合 Wine で開けるようになるのは便利かもしれません。しかしながら、他のフォーマット (例: {{ic|gif}}, {{ic|jpeg}}, {{ic|txt}}, {{ic|js}}) が Wine の素っ気ない Internet Explorer やメモ帳で開かれるのは迷惑と感じることもあるでしょう。<br />
<br />
Wine のファイルの関連付けは {{ic|~/.local/share/applications/}} にある {{ic|wine-extension-''extension''.desktop}} というファイルによって設定されます。関連付けを解除したい拡張子の名前が入っているファイルを削除してください。もしくは、Wine の関連付けを全て削除したい場合:<br />
<br />
$ rm -f ~/.local/share/applications/wine-extension*.desktop<br />
$ rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*<br />
<br />
古いキャッシュを削除:<br />
<br />
$ rm -f ~/.local/share/applications/mimeinfo.cache<br />
$ rm -f ~/.local/share/mime/packages/x-wine*<br />
$ rm -f ~/.local/share/mime/application/x-wine-extension*<br />
<br />
キャッシュをアップデート:<br />
<br />
$ update-desktop-database ~/.local/share/applications<br />
$ update-mime-database ~/.local/share/mime/<br />
<br />
削除しても、アプリケーションによってファイルの関連付けが設定されたら、Wine はファイルの関連付けを作成し続けます。<br />
<br />
=== Wine がファイルの関連付けをしないようにする ===<br />
<br />
{{Note|以下の作業は、{{ic|/usr/share/wine/wine.inf}} を変更しない限り、ファイルの関連付けをアップデートさせたくない WINEPREFIX それぞれに対して行わなければなりません。}}<br />
<br />
以下の方法は、ファイルの関連付けを作成することを防止しますが、XDG .desktop ファイルは保持します (メニューなどに表示されるかもしれません)。<br />
<br />
winecfg を通して Wine がファイルの関連付けをしないように設定するには、Desktop Integration タブのチェックボックス "Manage File Associations" のチェックを解除する必要があります。[https://wiki.winehq.org/FAQ#How_can_I_prevent_Wine_from_changing_the_filetype_associations_on_my_system_or_adding_unwanted_menu_entries.2Fdesktop_links.3F Wine FAQ] を見てください。<br />
<br />
レジストリを通して同じ変更を加えるには、以下に文字列 {{ic|Enable}} を {{ic|N}} という値で追加してください:<br />
<br />
HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations<br />
<br />
''まず、{{ic|FileOpenAssociations}} キーを作成する必要があるかもしれません。''<br />
<br />
この変更をコマンドラインを通して加えるには、以下のコマンドを実行してください:<br />
<br />
$ wine reg add "HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations" /v Enable /d N<br />
<br />
新しく作成される WINEPREFIX に対してこの変更をデフォルトで加えるようにしたい場合、{{ic|/usr/share/wine/wine.inf}} を編集し、例えば以下の行を {{ic|[Services]}} セクションに追加してください:<br />
HKCU,"Software\Wine\FileOpenAssociations","Enable",2,"N"<br />
<br />
パッケージのアップグレードの際にこのファイルが上書きされないようにするには、pacman フックを作成して上記の変更が自動的に加えられるようにしてください:<br />
<br />
{{hc|1=/etc/pacman.d/hooks/stop-wine-associations.hook|2=<br />
<br />
[Trigger]<br />
Operation = Install<br />
Operation = Upgrade<br />
Type = Path<br />
Target = usr/share/wine/wine.inf<br />
<br />
[Action]<br />
Description = Stopping Wine from hijacking file associations...<br />
When = PostTransaction<br />
<nowiki>Exec = /bin/sh -c '/usr/bin/grep -q "HKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"" /usr/share/wine/wine.inf || /usr/bin/sed -i "s/\[Services\]/\[Services\]\nHKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"/g" /usr/share/wine/wine.inf'</nowiki><br />
}}<br />
<br />
詳細は [[Pacman#フック]] を見てください。<br />
<br />
=== Windows バイナリを暗黙的に Wine で実行する ===<br />
<br />
{{pkg|wine}} パッケージは ''binfmt'' ファイルをインストールします。このファイルにより、Windows プログラムを直接実行できるようになります。例えば、{{ic|''./myprogram.exe''}} は、{{ic|wine ''./myprogram.exe''}} と入力した時と同じように振る舞います。デフォルトでサービスは起動時に開始されます。Wine をインストールした後に再起動していないのであれば、{{ic|systemd-binfmt.service}} を[[起動]]することで、すぐに使えるようになります。<br />
<br />
{{Note|Windows バイナリが[[実行可能属性|実行可能]]であることを確認してください。さもないと、バイナリは実行されません。}}<br />
<br />
=== 異なる解像度でのデュアルスクリーン ===<br />
<br />
デュアルヘッドの設定でディスプレイの解像度が異なったときに問題が起きる場合はおそらく {{Pkg|lib32-libxrandr}} をインストールしていません。<br />
<br />
{{Pkg|lib32-libxinerama}} をインストールすることでも wine のデュアルスクリーンの問題が解決することがあります (例えば、最右や最下のモニタでアプリケーションのボタンやメニューがクリックできなくなったり、アプリケーションのインターフェイスが再描画されなかったり、アプリケーションのエリアでマウスカーソルがドラッグの状態のまま固まったりします)。<br />
<br />
=== 光学メディアを焼く ===<br />
<br />
CD や DVD を焼くためには、{{ic|sg}} [[カーネルモジュール]]をロードする必要があります。<br />
<br />
=== 光学メディアイメージの適切なマウント ===<br />
<br />
一部のアプリケーションは光学メディアがドライブにあるかの確認をします。ほとんどはデータの確認だけなので、{{ic|winecfg}} で CD-ROM ドライブのパスを正しく設定すれば問題ありません。<br />
しかし、アプリケーションによってはメディアの名前やシリアルナンバーを確認するので、イメージを特別なプロパティを使ってマウントする必要があります。<br />
<br />
fuse ベースの仮想ドライブ (例えば Acetoneiso) など、仮想ドライブツールはこれらのメタデータを扱えないことがあります。[[CDemu]] は適切にこれを処理します。<br />
<br />
=== ゲーム内に FPS オーバーレイを表示 ===<br />
<br />
Wine には全てのグラフィカルアプリケーションで使える FPS モニター機能があります。環境変数 {{ic|1=WINEDEBUG=fps}} を設定してください。FPS は標準出力にアウトプットされます。{{pkg|xosd}} パッケージの ''osd_cat'' を使うことでウィンドウ上に FPS を表示することが可能です。ヘルパースクリプト [https://gist.github.com/anonymous/844aefd70bb50bf72b35 winefps.sh] を見てください。<br />
<br />
=== Wine を別のユーザアカウントで実行する ===<br />
<br />
{{Warning|これは適切なサンドボックス化方法ではなく、ファイルシステムのパーミッションによるホームディレクトリの保護しか行いません。サンドボックス化する必要がある場合は、[[firejail]] や [[bubblewrap]] のようなものを使用するべきです (これらには、rootful Xorg が必要であったり、音声の問題が発生したりといった欠点がありません)。}}<br />
<br />
別のユーザーアカウントで Wine を実行することで、Windows アプリケーションからホームディレクトリにアクセスできてしまうという懸念を減らすことができます。<br />
<br />
まず Wine 用の[[ユーザーアカウント]]を作成:<br />
<br />
# useradd -m -s /bin/bash wineuser<br />
<br />
他の TTY に切り替えて、通常通り X WM や DE を起動するか、このまま読み続けてください。<br />
<br />
{{Note|以下の方法は Xorg の root を有効にしている場合にのみうまく行きます。メインのユーザで {{ic|xhost}} を実行する方法については [[Xorg#Rootless Xorg]] を見てください。}}<br />
<br />
新しいユーザーアカウントを使って Wine アプリケーションを開けるようにするために、X サーバーのパーミッションリストに新しいユーザーを追加してください:<br />
<br />
$ xhost +SI:localuser:wineuser<br />
<br />
以下のコマンドを使って Wine を実行することができます ({{ic|env}} を使用して Wine の起動する環境を設定します):<br />
<br />
$ sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine ''arguments''<br />
<br />
以下のようにシェルスクリプトを使って Wine による Windows アプリケーションの実行を自動化できます:<br />
{{hc|1=/usr/local/bin/runaswine|2=<br />
#!/bin/sh<br />
xhost +SI:localuser:wineuser<br />
sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine "$@"}}<br />
<br />
シェルスクリプトを保存したら、以下のようにして Wine アプリケーションを起動できます:<br />
<br />
$ runaswine ''"C:\path\to\application.exe"''<br />
<br />
Wine を実行するたびにパスワードが要求されないようにしたい場合、sudoers ファイルに次のエントリを追加してください: {{ic|1=''mainuser'' ALL=(wineuser) NOPASSWD: ALL}}。詳しくは [[Sudo#設定]]を参照。<br />
<br />
{{ic|winecfg}} を Wine ユーザーで起動して、"Desktop Integration" タブから Wine ユーザーのホームディレクトリ以外のディレクトリのバインドを全て削除することを推奨します (Wine によって起動したプログラムが Wine ユーザーのホームディレクトリの外のファイルにアクセスできないようにするため)。<br />
<br />
[[PulseAudio]] を使用している場合、Wine プログラムで音が鳴らなくなってしまいます。他のユーザーの PulseAudio デーモンに Wine ユーザーからアクセスできるようにする情報が [[PulseAudio/サンプル#複数のユーザーが同時に PulseAudio を使えるようにする]]にあります。<br />
<br />
=== Temp ディレクトリを tmpfs 上に置く ===<br />
<br />
Wine が物理ディスク上に一時ファイルを書き込まないようにするために、''tmpfs'' のような別の場所を使うことができます。Wine の一時ファイルのデフォルトのディレクトリを削除し、シンボリックリンクを作成してください:<br />
<br />
$ rm -r ~/.wine/drive_c/users/$USER/Temp ~/.wine/drive_c/windows/temp<br />
$ ln -s /tmp/ ~/.wine/drive_c/users/$USER/Temp<br />
$ ln -s /tmp/ ~/.wine/drive_c/windows/temp<br />
<br />
=== Mono/Gecko をインストールさせない ===<br />
<br />
Gecko や Mono がシステムと Wine prefix のどちらにも存在しない場合、Wine はそれらをインターネットからダウンロードするか尋ねるダイアログを表示します。Gecko や Mono が必要ない場合、このダイアログを無効化できます: {{ic|WINEDLLOVERRIDES}} [[環境変数]]に {{ic|1=mscoree=d;mshtml=d}} を設定してください。<br />
<br />
=== Vulkan ===<br />
<br />
デフォルトの Wine Vulkan ICD ローダは、ほとんどのアプリケーションでうまく動作しますが、高度な機能はサポートしていません (例えば Vulkan レイヤー)。これらの機能を使うには、公式の Vulkan SDK をインストールしなければなりません。オリジナルの Vulkan パッチの作者の [https://github.com/roderickc/wine-vulkan GitHub ページ] のステップ 2 から 4 を見てください。<br />
<br />
=== Wine のファイルバインディングを除去する ===<br />
<br />
セキュリティ上の理由により、事前にインストールされている Wine バインディングを削除することは有用である場合があります。これにより、Windows アプリケーションはファイルマネージャやブラウザ (Firefox は EXE ファイルを直接 Wine で開くことができます) から直接起動できなくなります。<br />
以下を {{ic|1= /etc/pacman.conf}} の {{ic|1= [options]}} セクションに追加してください:<br />
<br />
NoExtract = usr/lib/binfmt.d/wine.conf<br />
NoExtract = usr/share/applications/wine.desktop<br />
<br />
=== Wine が自身のアプリケーションをデフォルトとして設定してしまう ===<br />
<br />
Wine は、prefix を作成 (または更新) する度に、それに応じて Notepad や Winebrowser などのバンドルされたアプリをデフォルトのテキストエディタやウェブブラウザとして設定します。<br />
<br />
この望ましくない挙動を回避する方法は、以下の[[環境変数]]を設定することです:<br />
<br />
$ WINEDLLOVERRIDES=winemenubuilder.exe=d ...<br />
<br />
=== WineASIO ===<br />
<br />
Wine で専門的なオーディオサポートが必要な場合、{{Aur|wineasio}} を使うことができます。これは、Wine 用の ASIO インターフェイスを提供し、[[JACK]] で使用できます。<br />
<br />
wineasio を使うためには、あなたのユーザアカウントを {{ic|realtime}} [[ユーザーとグループ#ユーザーグループ|ユーザーグループ]]に追加する必要があります。<br />
<br />
次に、wineasio を wine prefix に登録する必要があります。必要に応じて32ビットバージョンや64ビットバージョンに登録してください:<br />
<br />
$ regsvr32 /usr/lib32/wine/i386-windows/wineasio32.dll<br />
$ wine64 regsvr32 /usr/lib/wine/x86_64-windows/wineasio64.dll<br />
<br />
=== explorer.exe の起動を無効化する ===<br />
<br />
X がインストールされていない状態でテキストモード ([https://www.winehq.org/docs/wineusr-guid%3Cbr%20/%3Ee/cui-programs Command User Interface]) の実行ファイルを実行すると、実行ファイルの起動中に以下のエラーが発生するかもしれません:<br />
<br />
{{bc|0060:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.<br />
0060:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."<br />
0060:err:systray:initialize_systray Could not create tray window<br />
}}<br />
<br />
{{ic|wine}} はデフォルトで explorer.exe を起動することが原因です。{{ic|ps}} の出力を見ればわかる通り、{{ic|wineconsole}} ですら {{ic|explorer.exe /desktop}} を起動します。<br />
<br />
以下のように環境変数を設定することで、systray も含めて explorer の起動を無効化することができます:<br />
<br />
$ WINEDLLOVERRIDES="explorer.exe=d" wine program.exe<br />
<br />
CUI プログラムによっては、services.exe も無効化することによって目盛り使用量を最小限にすることができるかもしれません:<br />
<br />
$ WINEDLLOVERRIDES="explorer.exe,services.exe=d" wine program.exe<br />
<br />
== トラブルシューティング ==<br />
<br />
一般的なヒントは [https://wiki.winehq.org/Wine_User%27s_Guide#Troubleshooting_.2F_Reporting_bugs Wine User's Guide] と [https://wiki.winehq.org/FAQ Wine FAQ] (特に [https://wiki.winehq.org/FAQ#Troubleshooting Troubleshooting] セクション) を見てください。<br />
<br />
また、特定のアプリケーションでの推奨事項は [https://appdb.winehq.org/ Wine AppDB] を見てください。<br />
<br />
=== インストールの一般的な問題 ===<br />
<br />
それぞれの [[#WINEPREFIX|Wine prefix]] には、インストールされているプログラムからレジストリに至るまで多くの永続的な状態があります。プログラムのインストールに関する問題のトラブルシューティングの第一歩として、隔離された prefix を作成するか、{{ic|rm -rf ~/.wine}} でデフォルトの prefix を削除してみるべきでしょう。後者のコマンドは、デフォルトの prefix に追加したプログラムと設定を全て削除します。<br />
<br />
=== libc.so.6 のロードエラー ===<br />
<br />
wine を実行すると以下のエラーが発生することがあります:<br />
<br />
{{hc|$ wine cmd|<br />
/usr/bin/wine: error while loading shared libraries: libc.so.6: cannot create shared object descriptor: Operation not permitted<br />
}}<br />
<br />
これは、{{ic|mmap2}} のシステムコールが失敗したことが原因です:<br />
<br />
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 EPERM (Operation not permitted)<br />
<br />
これは [https://bugzilla.kernel.org/show_bug.cgi?id=198355 Linux カーネルの既知のバグ]です。<br />
<br />
[[sysctl]] の {{ic|vm.mmap_min_addr}} の値をデフォルトの {{ic|65536}} から変更することで、問題が解決するようです:<br />
<br />
# sysctl -w vm.mmap_min_addr=32768<br />
<br />
=== Xwayland の問題 ===<br />
<br />
[[Xwayland]] で Wine を使用する場合、以下のような問題を避けるために winecfg の Graphics タブで "Emulating a virtual desktop" のオプションを有効化できます:<br />
<br />
* チラつき<br />
* 誤ったウィンドウの位置<br />
* 誤ったマウスカーソルの位置とクリック<br />
* キーボード検出<br />
<br />
仮想デスクトップを無効化すると winecfg のウィンドウがマウスとキーボードに反応しなくなってしまう場合、以下のコマンドで明示的にどれかの仮想デスクトップ上で winecfg を起動することで、再び使えるようにできます:<br />
<br />
$ wine explorer /desktop=name,800x600 winecfg<br />
<br />
=== キーボード入力ができない ===<br />
<br />
ウィンドウマネージャがフォーカスを切り替えないことにより発生することがあります。''winecfg'' の ''Graphics'' タブで、'Allow the window manager...' オプションを無効化してください。あるいは、ウィンドウモードを 'Emulate a virtual desktop' に設定してください。<br />
* ''Window settings'' のオプションを全て切り替えて、''Apply'' をクリックし、そしてオプションを全て戻すと問題が解決するという人もいます。これがうまく行かない場合、上記の方法を試してください。<br />
<br />
アプリケーションからフォーカスを移動させた後にキーボードが動作しなくなる場合、レジストリを編集してみてください:<br />
* ''HKEY_CURRENT_USER\Software\Wine\X11 Driver'' に行き、文字列 ''UseTakeFocus'' を追加し、それを ''N'' にセットする。<br />
* あるいは、[[#Winetricks|Winetricks]] を使って値をセットできます: {{bc|1=$ winetricks usetakefocus=n}}<br />
<br />
=== アプリケーションが起動に失敗する ===<br />
<br />
一部の古いゲームやアプリケーションは、[[Wikipedia:ja:カレントディレクトリ|カレントディレクトリ]]が実行ファイルの場所と同じであることを期待します。これらの実行ファイルを他の場所から実行すると、正しく起動しなくなってしまいます。このような問題を防ぐには、Wine を実行する前に {{ic|cd ''exeへのパス''}} を使ってください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.winehq.org/ Wine Homepage]<br />
* [https://wiki.winehq.org/ Wine Wiki]<br />
* [https://appdb.winehq.org/ Wine Application Database (AppDB)] - 特定のアプリケーションを動作させるための情報 (特定のアプリケーションの既知の問題、評価、ガイドなど)<br />
* [https://forum.winehq.org/ Wine Forums] - あなたが FAQ と AppDB を見た''後''に質問するための素晴らしい場所<br />
* [[Gentoo:Wine]]<br />
* [https://www.darlinghq.org/ Darling] - MacOS ソフトウェア向けの Wine と似たプロジェクト<br />
* [https://github.com/wineasio/wineasio WineASIO] - WineASIO プロジェクトの GitHub ページ。追加の情報あり。<br />
<br />
{{TranslationStatus|Wine|2024-03-26|803670}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E4%BB%BB%E6%84%8F%E3%81%AE%E4%BE%9D%E5%AD%98%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8&diff=36629
任意の依存パッケージ
2024-03-25T22:04:12Z
<p>AshMyzk: PKGBUILD#optdependsへの転送ページ</p>
<hr />
<div>#REDIRECT[[PKGBUILD#optdepends]]</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Chromium&diff=36622
Chromium
2024-03-23T21:03:20Z
<p>AshMyzk: /* ハードウェアビデオアクセラレーション */ テンプレートエラー</p>
<hr />
<div>[[Category:ウェブブラウザ]]<br />
[[Category:Google]]<br />
[[de:Chromium]]<br />
[[en:Chromium]]<br />
[[zh-hans:Chromium]]<br />
{{Related articles start}}<br />
{{Related|ブラウザ拡張機能}}<br />
{{Related|Firefox}}<br />
{{Related|Vivaldi}}<br />
{{Related articles end}}<br />
<br />
[[Wikipedia:ja:Chromium|Chromium]] は、[[Wikipedia:ja:Blink (レンダリングエンジン)|Blink]] レンダリングエンジンをベースとした、オープンソースなグラフィカルウェブブラウザです。プロプライエタリな Google Chrome ブラウザの基礎となっています。<br />
<br />
Chromium と Google Chrome との違いについては [https://chromium.googlesource.com/chromium/src/+/master/docs/chromium_browser_vs_google_chrome.md このページ] を見てください。さらに:<br />
<br />
* 同期は Chromium 89 以上 (2021-03-02) で利用できません。[https://archlinux.org/news/chromium-losing-sync-support-in-early-march/]<br />
<br />
{{Note|同期は、[https://gist.github.com/foutrelis/14e339596b89813aa9c37fd1b4e5d9d5 Chrome の OAuth2 認証情報を使用する]か、[https://www.chromium.org/developers/how-tos/api-keys 自分の認証情報を取得する]ことで一時的に利用可能にできますが、免責事項に注意し、この方法を長期的な解決策と考えないでください。<br />
長期的な解決策としては、ブックマークの同期するための [https://www.xbrowsersync.org xbrowsersync] に移行することを検討してください。}}<br />
<br />
他の Chromium ベースのブラウザは [[アプリケーション一覧/インターネット#Blink ベース]] を見てください。<br />
<br />
== インストール ==<br />
<br />
Chromium を[[インストール]]できるパッケージがいくつか存在します:<br />
<br />
* {{Pkg|chromium}} — 安定版<br />
* {{AUR|chromium-dev}} — 開発版<br />
* {{AUR|chromium-snapshot-bin}} — nightly ビルド<br />
<br />
Google Chrome のパッケージは:<br />
<br />
* {{AUR|google-chrome}} — 安定版<br />
* {{AUR|google-chrome-beta}} — ベータ版<br />
* {{AUR|google-chrome-dev}} — 開発版<br />
<br />
{{Note|[https://www.chromium.org/Home/chromium-privacy Chromium プライバシーページ]によると(日本語訳):「Chromium のソースコードをコンパイルすることで利用可能になる Google と通信する機能は、[https://www.google.com/policies/privacy/ Google プライバシーポリシー]に従います。」Google サービスとの統合をすべて避けたい人向けに[[アプリケーション一覧/インターネット#プライバシー重視の chromium 派生版|プライバシー重視の Chromium 派生版]]があります。}}<br />
<br />
== 設定 ==<br />
<br />
=== デフォルトアプリケーション ===<br />
<br />
Chromium をデフォルトのブラウザに設定したり、ダウンロードしたファイルを開くときに Chromium がどのアプリケーションを起動するかを変更したりするには、[[デフォルトアプリケーション]] を見てください。<br />
<br />
=== 証明書 ===<br />
<br />
Chromium は証明書の管理に [[Network Security Services]] を使っています。{{ic|chrome://settings/certificates}} で証明書を管理できます。<br />
<br />
=== フラグを永続化する ===<br />
<br />
{{Note|{{ic|chromium-flags.conf}} ファイルとそれに付随するカスタムランチャースクリプトは、Arch Linux の様々な Chromium パッケージに固有のものです。Google Chrome に対しては、代わりに {{ic|chrome-flags.conf}} (開発版やベータ版の場合は {{ic|chrome-''チャネル名''-flags.conf}}) を使用してください。}}<br />
<br />
フラグは、{{ic|$HOME/.config/}} 内 ({{ic|$XDG_CONFIG_HOME}} 環境変数を設定した場合は、その環境変数が示すディレクトリの中) の {{ic|chromium-flags.conf}} ファイルに記述することができます。グローバルに設定したい場合は、{{ic|/etc/}} 内に配置できます。<br />
<br />
特別な構文は使用されず、フラグはターミナルに書き込まれるのと同じように定義されます。<br />
<br />
* 引数は空白で分割され、シェルの引用符の規則が適用されますが、それ以上の解析は実行されません。<br />
* ファイル中のどこかが不適切に引用符によって囲まれている場合、致命的なエラーが発生します。<br />
* フラグは読みやすくするために個別の行に分けることができますが、これは必須ではありません。<br />
* ハッシュ記号 (#) で始まる行は読み飛ばされます。(これは Chromium のランチャースクリプトでのみサポートされており、Google Chrome を使用している場合は動作しません。)<br />
<br />
以下は、フラグ {{ic|--start-maximized --incognito}} を定義している {{ic|chromium-flags.conf}} ファイルの例です:<br />
<br />
{{hc|~/.config/chromium-flags.conf|<br />
# この行は無視されます。<br />
--start-maximized<br />
--incognito<br />
}}<br />
<br />
=== GPU アクセラレーションを強制する ===<br />
<br />
少なくとも Chromium 110 から、ほとんどのシステムに対して GPU アクセラレーションがデフォルトで有効化されています。あなたのシステム構成が[https://chromium.googlesource.com/chromium/src/gpu/+/master/config/software_rendering_list.json ブラックリスト]と合致する場合、以下のフラグを[[#フラグを永続化する|永続的な設定]]に[[追加]]する必要があります:<br />
<br />
{{Warning|レンダリングブラックリストを無効化すると、ホストのクラッシュなどの不安定な挙動を引き起こすかもしれません。詳細については {{ic|chrome://gpu}} にあるバグレポートを見てください。}}<br />
<br />
{{hc|~/.config/chromium-flags.conf|<br />
--ignore-gpu-blocklist<br />
--enable-zero-copy<br />
}}<br />
<br />
=== ハードウェアビデオアクセラレーション ===<br />
<br />
{{Note|1=<nowiki/><br />
* この機能に対する Chromium や Arch Linux からの公式サポートはありません [https://chromium.googlesource.com/chromium/src/+/master/docs/gpu/vaapi.md#vaapi-on-linux]。しかし、公式リポジトリの {{Pkg|chromium}} は VA-API サポートありでコンパイルされており、[https://bbs.archlinux.org/viewtopic.php?id=244031 専用のフォーラムスレッド]で助けを求めることができます。<br />
* Chromium バージョン 122 から、{{AUR|chromium-wayland-vaapi}} パッケージはもはや必要なくなりました。公式リポジトリの {{Pkg|chromium}} パッケージでネイティブな Wayland バックエンドを使用している場合、VA-API は動作します。<br />
* AMD GPU デバイス上では、[https://bugs.chromium.org/p/chromium/issues/detail?id=1445074&q=VAAPI&can=2 Chromium bug 1445074] により VA-API が動作しません。[https://gist.github.com/thubble/235806c4c64b159653de879173d24d9f パッチ]は存在しますが、X11/XWayland ({{ic|1=--ozone-platform-hint=x11}} フラグを使用した場合) でしか動作しません。<br />
}}<br />
<br />
{{ic|1=vainfo}} ([[ハードウェアビデオアクセラレーション#VA-API の確認]] を参照) の出力を見て VA-API のサポートがあることを確認した場合は、ひとまず以下のフラグだけで試してみてください:<br />
<br />
{{hc|~/.config/chromium-flags.conf|2=<br />
--enable-features=VaapiVideoDecodeLinuxGL<br />
}}<br />
<br />
それ以外の場合は、以下を読んでください。<br />
<br />
Chromium で VA-API サポートを有効にするには:<br />
<br />
* 使用中のビデオカード用の適切な VA-API ドライバをインストールしてください。そして、VA-API が有効化されて正常に動作していることを確認してください。[[ハードウェアビデオアクセラレーション]]を見てください。プロプライエタリな NVIDIA サポートは、{{AUR|libva-vdpau-driver-chromium}}{{Broken package link|package not found}} か {{AUR|libva-vdpau-driver-vp9-git}} をインストールする必要があります。<br />
* {{ic|1=--enable-features=VaapiVideoDecoder}} オプションを設定してください。ANGLE GL レンダラーと {{Pkg|libva-intel-driver}} を使用している場合は、これで十分です。<br />
* ANGLE を使用すると、{{Pkg|intel-media-driver}} が使用されている場合、Chromium は古い i965 ドライバを強制的に使用し失敗します。回避策として、[[ハードウェアビデオアクセラレーション#VA-API の設定|VA-API を手動で設定]]してください。詳細については [https://github.com/intel/media-driver/issues/818] を見てください。<br />
* Xorg か Wayland でシステムの GL レンダラを使用するには、{{ic|1=--use-gl=egl}} を使用してください。Chrome 112 を使用している場合、このオプションはもはや必要ないかもしれず、AMD GPU を使用している場合は GPU アクセラレーションの機能が壊れる場合があります。<br />
* VA-API がまだ動かない場合は、{{ic|1=--enable-features=VaapiIgnoreDriverChecks}} か {{ic|1=--disable-features=UseChromeOSDirectVideoDecoder}} フラグを試してください。<br />
* VA-API が Xorg と古い GPU 上でまだ動かない場合は、{{ic|1=LIBVA_DRI3_DISABLE=1}} [[環境変数]]を設定してください [https://www.phoronix.com/news/VA-API-libva-2.18]。<br />
<br />
==== ヒントとテクニック ====<br />
<br />
使用中の VA-API ドライバでサポートされているコーデックの動画の視聴がうまく行くかどうか確認するには (''vainfo'' はどのコーデックがサポートされているかを表示しますが、Chromium は VP9 と h264 だけをサポートします):<br />
<br />
* {{ic|Ctrl+Shift+I}} を押すか、コンテキスト (右クリック) メニューの ''検証'' ボタンを押して DevTools を開いてください<br />
* Media inspection タブを追加してください: ''ハンバーガーメニュー(︙) > More tools > Media''<br />
* 新しく開いた Media タブで、Video Decoder の Hardware decoder の状態を見てください。<br />
<br />
十分に大きな動画でテストしてください。バージョン 86 から、デスクトップ版の Chromium は [https://bugs.chromium.org/p/chromium/issues/detail?id=684792 720p よりも大きい動画でしかアクセラレーションを使用しません]。<br />
<br />
VP8/VP9 ハードウェアデコードが使用できない Youtube 動画を視聴しているときに CPU 使用率を減らすには、[https://chrome.google.com/webstore/detail/h264ify/aleakchihdccplidncghkekgioiakgal h264ify] や [https://chrome.google.com/webstore/detail/enhanced-h264ify/omkfmpieigblcllmkgbflkikinpkodlk enhanced-h264ify]、[https://chrome.google.com/webstore/detail/not-yet-av1/dcmllfkiihingappljlkffafnlhdpbai Not yet, AV1][https://bbs.archlinux.org/viewtopic.php?pid=2039884#p2039884] 拡張機能を使用してください。<br />
<br />
一部のシステム (特に Xwayland) では、[[#GPU アクセラレーションを強制する]] 必要があるかもしれません。このセクションでの目的に対しては {{ic|--ignore-gpu-blocklist}} のみで十分です。<br />
<br />
Skia レンダラーは、現在ビデオデコードアクセラレーションと互換性がないので、無効化する必要があるかもしれません: {{ic|1=--disable-features=UseSkiaRenderer}}<br />
<br />
=== KDE 統合 ===<br />
<br />
[[Plasma]] との統合は {{Pkg|plasma-browser-integration}} を[[インストール]]してください。詳細は [https://community.kde.org/Plasma/Browser_Integration KDE Plasma Browser Integration] を見てください。<br />
<br />
=== PDF ビューアプラグイン ===<br />
<br />
Chromium と Google Chrome には ''Chromium PDF Viewer'' プラグインがバンドルされています。このプラグインを使用したくない場合は、{{ic|chrome://settings/content/pdfDocuments}} 内の ''Download PDFs'' を確認してください。<br />
<br />
=== Xwayland での動作 ===<br />
<br />
NVIDIA 社のプロプライエタリドライバを使用している場合、Xwayland 上で Chromium を実行すると、GPU プロセスが時々クラッシュすることがあります。GPU プロセスがクラッシュしないようにするには、以下のフラグを追加してください:<br />
<br />
--use-angle=vulkan --use-cmd-decoder=passthrough<br />
<br />
{{Note|これはすべての Xwayland 関連のクラッシュを防止するわけではありません。}}<br />
<br />
=== ネイティブ Wayland サポート ===<br />
<br />
バージョン 97 以降、Chromium でのネイティブ [[Wayland]] サポートは、次のフラグを使用して有効にできます [https://chromium.googlesource.com/chromium/src/+/43cfb2f92a5cdc1a787d7326e74676884abf5052]:<br />
<br />
--ozone-platform-hint=auto<br />
<br />
これがうまくいかない場合 (例えば [[Weston]] バージョン 106 以下の場合)、次を使ってください:<br />
<br />
--ozone-platform=wayland<br />
<br />
永続的な設定については [[#フラグを永続化する]] を参照してください。このフラグは[[#chrome:// URL|ブラウザのフラグメニュー]]からも設定できます。<br />
<br />
この設定により、wayland セッション内では wayland Ozone バックエンドが選択されます。なので、X11 と Wayland を頻繁に切り替える場合でも、デスクトップエントリは一つだけで大丈夫です。<br />
<br />
{{Note|ブラウザのフラグメニューで "ozone-platform-hint" を変更すると、ブラウザが再起動ボタンを表示させます。しかし、これは使用しないでください。ブラウザは、フラグが変更される前のプラットフォームで再起動されるからです。ブラウザを閉じて、その後、再び開く必要があります。}}<br />
<br />
追加で、[https://bugs.chromium.org/p/chromium/issues/detail?id=1422087 インプットメソッドの問題]が発生している場合は、新しい GTK を強制すると良いかもしれません:<br />
<br />
--gtk-version=4<br />
<br />
==== ナビゲーションのタッチパッドジェスチャ ====<br />
<br />
2本の指でスワイプすると戻ったり進んだりする機能を有効にするには、以下のフラグを使用してください:<br />
<br />
--ozone-platform-hint=auto --enable-features=TouchpadOverscrollHistoryNavigation<br />
<br />
== ヒントとテクニック ==<br />
<br />
特に注意書きがなければ以下のヒントとテクニックは Chromium と Chrome の両方で使うことができます。<br />
<br />
=== ブラウズのエクスペリエンス ===<br />
<br />
==== chrome:// URL ====<br />
<br />
多くの調整は Chrome の URL からアクセスすることができます。完全なリストは '''chrome://chrome-urls''' を参照してください。<br />
<br />
* '''chrome://flags''' - WebGL などの実験的な機能や GPU によるウェブページのレンダリングなどにアクセスできます。<br />
* '''chrome://extensions''' - 現在使用している Chromium 拡張を表示・有効化・無効化。<br />
* '''chrome://gpu''' - 様々な GPU オプションの状態。<br />
* '''chrome://sandbox''' - サンドボックスの状態を表示。<br />
* '''chrome://version''' - バージョンや {{ic|/usr/bin/chromium}} を実行するときに使われたスイッチを表示。<br />
<br />
Chromium のスイッチ (コマンドラインパラメータ) の自動的に更新される完全なリストが [https://peter.sh/experiments/chromium-command-line-switches/ こちら] にあります。<br />
<br />
==== Chromium タスクマネージャ ====<br />
<br />
Shift+ESC でブラウザのタスクマネージャを立ち上げることができます。メモリや CPU、ネットワークの使用量が閲覧可能です。<br />
<br />
==== Chromium が Preferences ファイルを上書き/オーバーライドしてしまう ====<br />
<br />
Google アカウントの同期を有効にしている場合、{{ic|~/.config/chromium/Default/Preferences}} 下の Preferences ファイルに直接編集を加えていても Chromium によって上書きされてしまいます。上書きされないようにするには、{{ic|--disable-sync-preferences}} スイッチを付けて Chromium を起動してください:<br />
$ chromium --disable-sync-preferences<br />
<br />
デスクトップ環境のログイン時にバックグラウンドで Chromium を起動する場合、デスクトップ環境から使用するコマンドを以下のようにしてください:<br />
$ chromium --disable-sync-preferences --no-startup-window<br />
<br />
==== 検索エンジン ====<br />
<br />
[https://wiki.archlinux.org wiki.archlinux.org] や [https://en.wikipedia.org wikipedia.org] などのウェブサイトは検索を実行してから ''Settings > Search'' を選択して ''Manage search engines..'' ボタンをクリックすることで簡単に検索できるように設定できます。エントリを "Edit" してキーワードを '''w''' などに変更してください (ショートカットは自由に決めて下さい)。これでアドレスバーに "'''w arch linux'''" と入力するだけで "Arch Linux" で検索できるようになります。<br />
<br />
{{Note|URL バーに何か入力すると自動的に Google 検索が使われます。また、ハードコードされたキーワードトリガとして '''?''' プレフィックスが使えます。}}<br />
<br />
==== Tmpfs ====<br />
<br />
===== tmpfs にキャッシュ =====<br />
<br />
{{Note|Chromium はブラウザのプロファイルディレクトリとキャッシュディレクトリを分離して保存します。}}<br />
<br />
物理ディスクに対する Chromium のキャッシュの書き込みを制限したい場合、{{ic|--disk-cache-dir}} フラグでキャッシュの書き込み先を変更することができます:<br />
<br />
$ chromium --disk-cache-dir="$XDG_RUNTIME_DIR/chromium-cache"<br />
<br />
キャッシュは一時的になり、再起動したりハードロックすると'''消えます'''。もしくは、tmpfs 領域を {{ic|/etc/fstab}} 内でセットアップすることもできます:<br />
<br />
{{hc|/etc/fstab|2=<br />
tmpfs /home/''username''/.cache tmpfs noatime,nodev,nosuid,size=400M 0 0<br />
}}<br />
<br />
または、{{ic|/tmp}} へのシンボリックリンクを作成してください。以下のコマンドを実行する前に、Chromium のキャッシュフォルダは削除しておいてください:<br />
<br />
$ ln -s /tmp /home/''ユーザ名''/.cache/chromium<br />
<br />
===== tmpfs にプロファイル =====<br />
<br />
{{ic|/tmp}} や {{ic|/dev/shm}} などの [[Wikipedia:ja:Tmpfs|tmpfs]] ファイルシステムにプロファイルを保存することで、プロファイル全体が RAM 内に保存されるので、Chromium の応答性が改善されます。<br />
<br />
{{Pkg|profile-sync-daemon}} などの、プロファイルを動的に管理するスクリプトを使うことで信頼性と使いやすさを最大限高めることができます。profile-sync-daemon はブラウザプロファイルのディレクトリのシンボリックリンクを作成し、定期的にメモリと同期をとります。詳細については [[Profile-sync-daemon]] の記事を参照して下さい。<br />
<br />
==== 新しいブラウザインスタンスを起動 ====<br />
<br />
ブラウザを起動すると、最初に同じプロファイルを使っているインスタンスが他にないか確認されます。存在する場合、新しいウィンドウは既存のインスタンスに関連付けられます。以下のように {{ic|--user-data-dir}} パラメータを使って起動することで別のプロファイルでブラウザを起動できます:<br />
<br />
$ chromium --user-data-dir=''/path/to/some/directory''<br />
<br />
{{Note|ユーザーデータのデフォルトパスは {{ic|~/.config/chromium/}} です。}}<br />
<br />
==== torrent クライアントで *.torrent ファイルやマグネットリンクを直接開く ====<br />
<br />
デフォルトでは Chromium は {{ic|*.torrent}} ファイルを直接ダウンロードするため、ファイルを torrent クライアントで開くには画面左下の通知をクリックする必要があります。以下の方法で毎回クリックする手間を省けます:<br />
<br />
* {{ic|*.torrent}} ファイルをダウンロード。<br />
* 画面左下に表示される通知を右クリック。<br />
* "Always Open Files of This Type" チェックボックスにチェックを入れる。<br />
<br />
デフォルトの関連付けの変更については [[xdg-open]] を見てください。<br />
<br />
==== タッチスクリーンデバイスでタッチスクロール ====<br />
<br />
使用するタッチデバイスを指定する必要があります。タッチスクリーンデバイスを {{ic|xinput list}} で確認して、{{ic|1=--touch-devices='''x'''}} パラメータを付けて Chromium を起動してください ("'''x'''" はデバイスの id に置き換えてください)。<br />
{{Note|スレーブポインタのデバイスは使えません。マスターポインタの ID を使ってください。}}<br />
<br />
==== メモリの使用量を減らす ====<br />
<br />
デフォルトでは、Chromium は開いているウェブサイトの数だけ OS プロセスを作成します [https://www.chromium.org/developers/design-documents/process-models#Supported_Models]。Chromium の起動時にコマンドラインスイッチを指定することで挙動を変更することが可能です。<br />
<br />
例えば、全てのウェブサイトでひとつのプロセスを共有するには:<br />
<br />
$ chromium --process-per-site<br />
<br />
シングルプロセスモデルを使うには:<br />
<br />
$ chromium --single-process<br />
<br />
{{Warning|シングルプロセスモデルは安全でなく他のモデルに存在しないバグが含まれている可能性があるため推奨されていません [https://www.chromium.org/developers/design-documents/process-models#TOC-Single-process]。}}<br />
<br />
さらに [https://chrome.google.com/webstore/detail/tab-suspender/fiabciakcmgepblmdkmemdbbkilneeeh?hl=en Tab Suspender] や [https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall?hl=en OneTab] などの拡張を使うことでアクティブでないタブを停止・保存することができます。<br />
<br />
==== ユーザーエージェント ====<br />
<br />
Chromium の起動時に {{Ic|<nowiki>--user-agent="[string]"</nowiki>}} パラメータを指定することでユーザーエージェントは任意に変更することができます。<br />
<br />
==== DOM Distiller ====<br />
<br />
Chromium には Firefox にあるのと似たレンダリングモードが存在します。これは DOM Distiller と呼ばれ、[https://github.com/chromium/dom-distiller オープンソースプロジェクト]です。<br />
デフォルトでは無効化されていますが、{{Ic|chrome://flags/#enable-reader-mode}} フラグを使用することにより有効化できます。このフラグは[[#フラグを永続化する|永続化]]させることができます。<br />
DOM Distiller は、ページのコンテンツから不要なものを取り除くことでより良いレンダリングエクスペリエンスを提供するだけでなく、印刷用にページを単純化してくれます。後者のチェックボックスオプションが印刷ダイアログから削除されたものの、不要なものを取り除いたページを印刷することは依然として可能です。これらには、基本的には同じ効果があります。<br />
<br />
フラグを有効化すると、ウェブサイトから不要なものを取り除くことができると Chromium が判断したときに、"Enter reader mode" メニューアイテムとアイコンがアドレスバーに出現します。<br />
<br />
==== 特定の GPU の使用を強制する ====<br />
<br />
GPU が複数ある環境の場合、Chromium はレンダリングに使用する GPU (ディスクリートや統合 GPU) を自動的に検出します。99% は問題ありませんが、誤った GPU が選択された場合 (VFIO GPU パススルー環境でディスクリートグラフィックが選ばれるなど)、{{ic|chrome://gpu}} は GPU プロセスを初期化できないというエラーを吐きます。同じページの '''Driver Information''' には複数の GPU が表示されます (GPU0, GPU1, ...)。ユーザーフレンドリな方法で GPU を切り替えることはできませんが、デバイス/ベンダー ID を使って Chromium のフラグで使用する GPU を設定できます:<br />
<br />
$ chromium --gpu-testing-vendor-id=0x8086 --gpu-testing-device-id=0x1912<br />
<br />
{{ic|0x8086}} と {{ic|0x1912}} は使用したい GPU の ID に置き換えてください ({{ic|chrome://gpu}} ページで確認できます)。<br />
<br />
==== Firefox からブックマークをインポート ====<br />
<br />
[[Firefox]] から Chromium にブックマークをインポートすることができます。<br />
<br />
Chromium で {{ic|chrome://settings/importData}} を開いてください。<br />
<br />
コンピュータに Firefox がインストールされている場合、直接 Firefox からブックマークなどをインポートできます。<br />
<br />
'''Mozilla Firefox''' を選択してください。不要なアイテムのチェックは外してかまいません。'''Import''' をクリックしてから '''Done''' をクリックすればインポートは完了です。<br />
<br />
{{note|Chromium でまだ何もブックマークを作成していない場合、ブックマークバーにブックマークが表示されます。既にブックマークが存在する場合、ブックマークは "Imported From Firefox" というラベルが付いた新しいフォルダに保存されます。}}<br />
<br />
他の PC からブックマークをインポートする場合、先に Firefox からブックマークをエクスポートする必要があります。<br />
<br />
Firefox で {{ic|Ctrl+Shift+o}} ''Import and Backup > Export Bookmarks To HTML'' を選択してください<br />
<br />
後の作業は同じです。{{ic|chrome://settings/importData}} を開いてください。ただし今度は '''From''' ドロップダウンメニューで '''Bookmarks HTML File''' を選択して '''Choose File''' ボタンをクリックしてブックマークファイルをアップロードします。<br />
<br />
後の作業は同じです。{{ic|chrome://settings/importData}} を開いてください。ただし今度は '''From''' ドロップダウンメニューで '''Bookmarks HTML File''' を選択して '''Choose File''' ボタンをクリックしてブックマークファイルをアップロードします。<br />
<br />
==== ネイティブ通知の有効化 ====<br />
<br />
{{ic|chrome://flags#enable-system-notifications}} を開いて、''Enabled'' を選択してください。<br />
<br />
==== U2F 認証 ====<br />
<br />
{{Pkg|libfido2}} ライブラリをインストールしてください。このパッケージは、(通常) ユーザとして [[U2F]] キーにアクセスできるようにするために必要な udev ルールを提供します。<br />
U2F キーはデフォルトでは root としてしかアクセスできないので、これらのルールが無いと Chromium はエラーを吐きます。<br />
<br />
==== テーマ ====<br />
<br />
Chromium に現在の GTK テーマをブラウザメニューやコントロールで使用させることができます。{{ic|chrome://settings/appearance}} で ''Use GTK'' を押してください。<br />
<br />
==== ダークモード ====<br />
<br />
Chromium 114 から、ユーザの優先外観を自動的に決定するために [[XDG デスクトップ ポータル]] が使用されるようになりました ([https://bugs.chromium.org/p/chromium/issues/detail?id=998903 issue])。よって、ダークモードの有効化とユーザの GTK テーマが切り離されました。この設定は、CSS、JavaScript、設定、そして Dev-Tools の ''prefers-color-scheme'' に適用されます。<br />
<br />
優先外観を変更する方法は、XDG Desktop Portal バックエンドに依存します。例えば、多くのデスクトップ環境はそれぞれの外観設定インターフェイスにモードを切り替えるスイッチを提供しています。または、例えば {{Pkg|xdg-desktop-portal-gtk}} 場合は、以下のコマンドを使って優先モードを {{ic|prefer-light}} や {{ic|prefer-dark}}、{{ic|default}} に設定します:<br />
<br />
$ dconf write /org/gnome/desktop/interface/color-scheme \'prefer-dark\'<br />
<br />
{{Pkg|dbus}} の {{ic|dbus-send}} を使用することで、現在の優先外観をクエリできます ([https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings ドキュメント]):<br />
<br />
$ dbus-send --session --print-reply=literal --dest=org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read string:org.freedesktop.appearance string:color-scheme | tr -s ' ' | cut -d ' ' -f 5<br />
<br />
* '''0''': 設定無し<br />
* '''1''': ダークモードを優先<br />
* '''2''': ライトモードを優先<br />
<br />
===== Chromium 114 より前 =====<br />
<br />
ダークモードを有効化し、ダークテーマ (通常、incognito モードで使用されます) を有効化するには、以下のフラグを[[#フラグを永続化する|永続的な設定]]に[[追加]]してください:<br />
<br />
{{hc|1=~/.config/chromium-flags.conf|2=<br />
--force-dark-mode<br />
--enable-features=WebUIDarkMode<br />
}}<br />
<br />
==== サイドパネルを有効化する ====<br />
<br />
サイドパネルは {{ic|chrome://flags}} から有効化できます。'''Side panel''' を有効化/無効化することができ、'''Side panel border''' や '''Side panel drag and drop''' といったオプションを変更できます。<br />
<br />
=== プロファイルのメンテナンス ===<br />
<br />
Chromium は [[Sqlite]] データベースを使用して履歴やお気に入りを管理しています。Sqlite データベースは使っているうちに断片化していきます。しかしながら、データベースをチェックしたり最適化するプロセスが存在しないため、断片化によって段々とパフォーマンスに影響が出て来ます。デフラグを行ってデータベースから未使用領域を削除することで、起動時間やブックマークや履歴に関連する作業を素早く実行することができます。<br />
<br />
{{Pkg|profile-cleaner}} と {{AUR|browser-vacuum}} でメンテナンスができます。<br />
<br />
=== セキュリティ ===<br />
<br />
==== JIT を無効化 ====<br />
<br />
[https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/ JS エンジンにおけるセキュリティ上の脆弱性のうち約半分]は JIT に原因があります。パフォーマンスが劣化しますが、{{ic|1=--js-flags=--jitless}} フラグを使用することで、JavaScript からネイティブなコードへの just-in-time コンパイルを無効化できます。<br />
<br />
==== WebRTC ====<br />
<br />
WebRTC は JavaScript を使用する通信プロトコルですが、VPN を使っている場合でもマシンの IP アドレスやハードウェアのハッシュ値が漏洩する可能性があります。VPN ソフトウェアによってはスクリプトの実行が阻止されることもありますが、プロトコルを直接ブロックしてしまう方が安全です。2016年10月現在、デスクトップ版 Chromium で WebRTC を無効化する方法はありませんが、ローカル IP アドレスの漏洩を阻止する拡張が存在します 。そのひとつがこの[https://chrome.google.com/webstore/detail/webrtc-network-limiter/npeicpdbkakmehahjeeohfdhnlpdklia 拡張機能]です。<br />
<br />
WebRTC は https://browserleaks.com/webrtc でテストできます。<br />
<br />
{{Warning|IP の漏洩は防げても、Chromium はユニークなハッシュを送信しており、それを止める方法はありません。詳しくは https://www.browserleaks.com/webrtc#webrtc-disable を読んでください。}}<br />
<br />
==== SSL 証明書 ====<br />
<br />
Chromium には SSL 証明書マネージャが存在しません。Chromium は NSS の共有データベース {{ic|~/.pki/nssdb}} を使用しています。データベースに SSL 証明書を追加するには、シェルを使う必要があります。<br />
<br />
===== 自己署名証明書の CAcert 証明書を追加 =====<br />
<br />
CAcerts を取得して {{ic|nssdb}} を作成してください (存在しない場合)。作成するには {{Pkg|nss}} パッケージをインストールして以下を実行する必要があります:<br />
<br />
$ mkdir -p $HOME/.pki/nssdb<br />
$ cd $HOME/.pki/nssdb<br />
$ certutil -N -d sql:.<br />
<br />
$ curl -k -o "cacert-root.crt" "http://www.cacert.org/certs/root.crt"<br />
$ curl -k -o "cacert-class3.crt" "http://www.cacert.org/certs/class3.crt"<br />
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org" -i cacert-root.crt <br />
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org Class 3" -i cacert-class3.crt<br />
<br />
{{Note|データベースのパスワードを作成していない場合、作成する必要があります。}}<br />
<br />
これでユーザーは手動で自己署名証明書をインポートできるようになります。<br />
<br />
===== 例 1: シェルスクリプトを使って TomatoUSB から証明書を分離 =====<br />
<br />
以下は証明書を展開してユーザーの {{ic|nssdb}} に追加するシンプルなスクリプトです:<br />
<br />
#!/bin/sh<br />
#<br />
# usage: import-cert.sh remote.host.name [port]<br />
#<br />
REMHOST=$1<br />
REMPORT=${2:-443}<br />
exec 6>&1<br />
exec > $REMHOST<br />
echo | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'<br />
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n "$REMHOST" -i $REMHOST <br />
exec 1>&6 6>&-<br />
<br />
使用方法はコメント化されている行を見てください。<br />
<br />
参照:<br />
*https://web.archive.org/web/20180718193807/https://blog.avirtualhome.com/adding-ssl-certificates-to-google-chrome-linux-ubuntu<br />
*https://chromium.googlesource.com/chromium/src/+/master/docs/linux/cert_management.md<br />
<br />
===== 例 2: Firefox を使って TomatoUSB から証明書を分離 =====<br />
<br />
{{Pkg|firefox}} ブラウザを使って証明書をファイルに保存してデータベースに手動でインポートすることができます。<br />
<br />
Firefox を使って:<br />
#取得先の URL を開く。<br />
#"This Connection is Untrusted" 警告画面が表示されたら ''I understand the Risks > Add Exception...'' をクリック。<br />
#''View > Details > Export'' をクリックしてどこか一時的な場所に証明書を保存 (以下の例では {{ic|/tmp/easy.pem}} を使用)。<br />
<br />
Chromium で使用する証明書をインポート:<br />
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "easy" -i /tmp/easy.pem<br />
<br />
{{Note|名前は証明書にあわせて変更してください。上記の例では "easy" が証明書の名前です。}}<br />
<br />
参照:<br />
*https://sahissam.blogspot.com/2012/06/new-ssl-certificates-for-tomatousb-and.html<br />
<br />
==== Canvas Fingerprinting ====<br />
<br />
Canvas Fingerprinting は HTML5 の canvas のレンダリング結果の差異を使ってユーザーを識別する技術です。{{ic|--disable-reading-from-canvas}} フラグを使うことで Canvas Fingerprinting を使えないようにすることができます。<br />
<br />
フラグが機能しているかどうか確認するには [https://panopticlick.eff.org こちらのテスト] を実行して "hash of canvas fingerprint" の結果を確認してください。<br />
<br />
{{Note|1=<nowiki></nowiki><br />
* 一部の拡張機能は canvas からの読み込みを必要としており、{{ic|--disable-reading-from-canvas}} を設定すると壊れる場合があります。<br />
* YouTube プレイヤーは canvas からの読み込みができないと正しく動作しません。[https://github.com/qutebrowser/qutebrowser/issues/5345][https://bbs.archlinux.org/viewtopic.php?pid=1907406]<br />
}}<br />
<br />
==== プライバシー拡張 ====<br />
<br />
[[ブラウザ拡張機能#プライバシー]] を参照してください。<br />
<br />
{{Tip|あまりにも多くの拡張機能をインストールしてしまうと、ツールバーのスペースを圧迫してしまうかもしれません。ユーザと対話しない拡張機能 (例: [https://chrome.google.com/webstore/detail/gcbommkclmclpchllfjekcdonpmejbdp HTTPS Everywhere]{{Dead link|2023|04|22|status=404}}) は、拡張機能を右クリックして ''Hide in Chromium menu'' を選択することで隠すことができます。}}<br />
<br />
==== Do Not Track ====<br />
<br />
[[wikipedia:Do Not Track|Do Not Track]] を有効化するには、{{ic|chrome://settings}} を開き、''Advanced'' まで下へスクロールして、''Privacy and security'' の ''Send a "Do Not Track" request with your browsing traffic'' にチェックを入れてください。<br />
<br />
==== 特定のパスワードストアを強制する ====<br />
<br />
Chromium はパスワードストアを使ってパスワードと (cookie の値を暗号化するのに使われる) ''Chromium Safe Storage'' キーを保存します [https://codereview.chromium.org/24734007]。<br />
<br />
デフォルトでは Chromium は使用するパスワードストアを自動的に認識しますが、デスクトップ環境やウィンドウマネージャを変えたときにパスワードと cookie が失われてしまう可能性があります。<br />
<br />
{{ic|--password-store}} フラグで以下のどれかの値を指定して Chromium を起動することで特定のパスワードストアを強制的に使うようにすることができます [https://chromium.googlesource.com/chromium/src/+/master/docs/linux/password_storage.md]:<br />
<br />
* {{ic|gnome-libsecret}} - [https://gitlab.gnome.org/GNOME/libsecret libsecret] 経由で [[Gnome Keyring]] を使用<br />
* {{ic|kwallet}} - [[KDE Wallet]] を使用<br />
* {{ic|basic}} - {{ic|Login Data}} ファイルにプレーンテキストとしてパスワードと cookie の暗号鍵を保存<br />
* {{ic|detect}} - デフォルトの自動認識<br />
<br />
例えば、Gnome Keyring を使うようにするには {{ic|1=--password-store=gnome-libsecret}} を付けてください。永続化する方法は [[#フラグを永続化する]] を参照。<br />
<br />
他のデスクトップ環境のパスワードストアを使う場合、自動的にアンロックされるように設定すると良いでしょう。[[GNOME/Keyring#キーリングを使用する]] や [[KDE Wallet#ログイン時に KDE ウォレットを自動的にアンロック]] を参照。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== フォント ===<br />
<br />
{{Note|Chromium は独自のサンドボックスを使っているため、fontconfig/GTK/Pango/X などと完全な統合がされていません。詳しくは [https://dev.chromium.org/developers/linux-technical-faq Linux Technical FAQ] を参照してください。}}<br />
<br />
==== タブのフォントサイズが大きすぎる ====<br />
<br />
[[GTK#設定]] で言及されているように、Chromium は GTK の設定を使用します。Chromium はタブに {{ic|gtk-font-name}} の設定を使用します (これにより、ウインドウのフォントサイズと合わなくなる場合があります)。この設定を上書きするには、{{ic|1=--force-device-scale-factor=1.0}} を使用してください。<br />
<br />
=== WebGL ===<br />
<br />
使用中のグラフィックカードが Chromium のブラックリストに入っている可能性があります。[[#GPU アクセラレーションを強制する]] を見てください。<br />
<br />
[[Bumblebee]] で Chromium を使っている場合、GPU のサンドボックスによって WebGL がクラッシュすることがあります。このようなときは、{{ic|optirun chromium --disable-gpu-sandbox}} で GPU のサンドボックスを無効にできます。<br />
<br />
WebGL サポートのデバッグ情報は {{ic|chrome://gpu/}} を見てください。<br />
<br />
Chromium はユーザプロファイルに GPU に関する誤った情報を保存することがあります。例えば、Optimus を使って Nvidia カードから Intel カードに切り替えた場合、たとえ Nvidia カードや primusrun/optirun を使用していなくても、{{ic|chrome://gpu}} に Nvidia カードが表示されます。異なるユーザデータディレクトリを使って実行することにより (例: {{ic|1=chromium --user-data-dir=$(mktemp -d)}})、この問題を解決できる場合があります。持続的な解決策として、{{ic|~/.config/chromium/Local\ State}} を削除して GPU の情報をリセットできます。<br />
<br />
=== HiDPI の描画がおかしい ===<br />
<br />
Chromium は自動的に [[HiDPI]] ディスプレイでの倍率設定を行います。しかし、これにより GUI の描画がおかしくなることがあります。<br />
<br />
{{ic|1=--force-device-scale-factor=1}} フラグをを使用して、自動倍率設定を上書きできます。<br />
<br />
[[#ネイティブ Wayland サポート|ネイティブの Wayland サポート]] が有効化されている場合、Chromium は、各モニタに設定された倍率を元に自動的に倍率を設定します。<br />
<br />
=== GNOME Keyring を使用していると起動するたびにパスワードを要求される ===<br />
<br />
[[GNOME/Keyring#パスワードが保存されない]] を見てください。<br />
<br />
=== ネットワーク内の Chromecast が検出されない ===<br />
<br />
{{ic|chrome://flags/#load-media-router-component-extension}} 内の Media Router Component Extension を有効化する必要があります。<br />
<br />
=== パスワードだけが同期されない ===<br />
<br />
同期がパスワードに対してだけ機能しない場合 ({{ic|chrome://sync-internals/}} で確認できます)、プロファイルのログインデータを削除してください:<br />
<br />
$ rm ~/.config/chromium/Default/Login\ Data*<br />
<br />
詳細は [https://support.google.com/chrome/thread/9947763?hl=en&msgid=23687608 Google Chrome Help forum] を見てください。<br />
<br />
=== デスクトップ環境を切り替えると cookie とパスワードが消える ===<br />
<br />
Chromium を起動したときにターミナルに {{ic|Failed to decrypt token for service AccountId-*}} というメッセージが表示される場合、Chromium が間違ったパスワード保存バックエンドを使おうとしたのかもしれません。これはデスクトップ環境を切り替えたときに起こりえます。<br />
<br />
[[#特定のパスワードストアを強制する]] を見てください。<br />
<br />
=== Google Sync を有効化すると起動時に固まる ===<br />
<br />
{{ic|1=--password-store=basic}} フラグを使うか、他の適切なパスワードストアを使って Chrome を起動してみてください。<br />
<br />
[[#特定のパスワードストアを強制する]] を見てください。<br />
<br />
=== デフォルトのブラウザとして設定するかを毎回尋ねてくる ===<br />
<br />
KDE を使用していて、一度 Firefox を (Firefox 内のボタンをクリックして) デフォルトのブラウザとして設定したことがある場合、たとえ "デフォルトに設定" ボタンをクリックしたとしても 、Chromium を起動するたびに毎回 Chromium をデフォルトのブラウザとして設定するかを尋ねられることがあります。<br />
<br />
Chromium は {{ic|xdg-settings check default-web-browser chromium.desktop}} を実行することで chromium がデフォルトのブラウザであるかを確認します。そのコマンドの出力が "no" である場合、chromium がデフォルトのブラウザでないと認識します。{{ic|xdg-settings}} スクリプトは以下の MIME の関連付けを確認し、すべてが {{ic|chromium.desktop}} であることを期待します:<br />
<br />
{{bc|<br />
x-scheme-handler/http<br />
x-scheme-handler/https<br />
text/html}}<br />
<br />
これを直すには、''システム設定 > アプリケーション > デフォルトのアプリケーション > Web browser'' を開いて、Chormium を指定してください。そして、{{ic|text/html}} の MIME の関連付けを設定してください:<br />
<br />
$ xdg-mime default chromium.desktop text/html<br />
<br />
最後に、[[XDG_MIME_Applications#新しい MIME タイプ|MIME のデータベースを更新]]してください:<br />
<br />
$ update-mime-database ~/.local/share/mime<br />
<br />
=== "このブラウザまたはアプリは安全でない可能性があります" Google へのログインエラー ===<br />
<br />
2020年04月20日以降、Web 開発用に {{ic|1=--remote-debugging-port=9222}} フラグを指定して chromium を実行すると、 Google アカウントにログインできません。このフラグを一時的に無効にしてログインすると、再び有効にできます。<br />
<br />
=== 60 FPS より高いリフレッシュレートのディスプレイを使用しているのに Chromium は 60 FPS で描画される ===<br />
<br />
一般的な問題に関する上流のバグレポートは[https://bugs.chromium.org/p/chromium/issues/detail?id=1200167 ここ]にあり、その他の回避策が見つかるかもしれません。また、混合リフレッシュレートに関する問題は[https://bugs.chromium.org/p/chromium/issues/detail?id=1138080 ここ]で報告されています。<br />
<br />
==== 混合リフレッシュレート ====<br />
<br />
{{Tip|この問題は Wayland バックエンドには存在しない可能性があります。要検証。}}<br />
<br />
混合リフレッシュレート (例えば 60 Hz と 144 Hz) のあるディスプレイを使用している場合、Chromium は最も低いリフレッシュレートのディスプレイに合わせて描画するかもしれません。<br />
<br />
この問題に対する適切な回避策があります。以下のフラグを[[#フラグを永続化する|永続的な設定]]に[[追加]]してください:<br />
<br />
{{hc|1=~/.config/chromium-flags.conf|2=<br />
--use-gl=egl<br />
--ignore-gpu-blocklist<br />
--enable-gpu-rasterization<br />
}}<br />
<br />
これにより、コンポジタが 144 FPS でリフレッシュする場合、144Hz ディスプレイ上で使用すると Chromium が 144 FPS で実行されます。これにより、少しカクつくかもしれないことを留意してください {{Bug|67035}}。しかし、60 FPS で止まるよりはマシです。<br />
<br />
==== Wayland バックエンドで実行する ====<br />
<br />
この問題を引き起こす Wayland コンポジタ固有の問題があるようです。<br />
<br />
特に、Plasma 5 は環境によらず 60Hz で描画されるようですが、Plasma 6 (この記事の時点では rc1) では Chromium が高いリフレッシュレートでも問題なく動作します。<br />
<br />
その他の解決策がうまく行かなかった場合は、XWayland バックエンドに切り替えてみてください。<br />
<br />
=== Chromium でスクロール速度が遅い ===<br />
<br />
Chromium や Electron ベースのアプリケーションでマウスホイールのスクロールが遅すぎることがあります。以下にいくつか解決法を挙げます。<br />
<br />
[[Libinput#マウスホイールのスクロール速度の調整]] では libinput の {{ic|libinput_event_pointer_get_axis_value}} 関数をインジェクトし、スケール係数を変更するインターフェイスを提供します。これはアプリケーションレベルのインジェクションではないので、アプリケーション固有のスケール係数調整用の追加スクリプトが必要です。Chromium の縦幅の小さい開発者ツールでは、スケール係数を十分大きくするとスクロールが速くなりすぎるかもしれないことに注意してください。<br />
<br />
[[imwheel]] は X のホイールボタンのイベントを複数回リプレイすることでスクロールの距離を増やします。しかし、chromium は実際のスクロールとリプレイされたスクロールを2つのイベントとして認識します。これらの間には小さいですが感知できる遅延が存在します。なので、一回のマウスホイールスクロールで2回のページジャンプが発生します。タッチパッドのスクロールでも注意が必要です。<br />
<br />
[https://chrome.google.com/webstore/detail/linux-scroll-speed-fix/mlboohjioameadaedfjcpemcaangkkbp Linux Scroll Speed Fix] と [https://chrome.google.com/webstore/detail/smoothscroll/nbokbjkabcmbfdlbddjidfmibcpneigj SmoothScroll] はスクロール距離の変更をサポートする chromium 拡張機能です。ウェブページ内でスクロールすると、現在フォーカスされているノードの最も近いスクロールできる祖先を見つけて、たとえその祖先が一番下までスクロールされていたとしても、その祖先に対してスクロールメソッドがピクセル距離を使って呼ばれます。なので、テキストエディタやスクロール可能な要素にスクロールすると、マウスを動かす以外の方法でその要素からスクロールして出ることはできません。また、拡張機能ベースの手段は Chromium 外では利用できません。<br />
<br />
=== 動画がロードされるが再生されない ===<br />
<br />
これは PulseAudio の問題である場合があります。[[PulseAudio/トラブルシューティング#ブラウザが動画をロードするが、再生しない]] で提案されている修正方法を確認してください。<br />
<br />
=== データベースの破損によりパスワードが保存されない ===<br />
<br />
パスワードデータベースは破損することがあり、その場合、再ビルドする必要があります。再ビルドすると、データベース内の全データが破壊され、保存されているパスワードは失われます。<br />
<br />
ターミナルから Chromium を起動すると、以下のように出力されます:<br />
<br />
[472531:472565:1207/055404.688559:ERROR:login_database.cc(1048)] Password decryption failed, encryption_result is 2<br />
<br />
Chromium を終了し、3つのデータベースファイル ({{ic|~/.config/chromium/Default/Login Data*}}) を削除してください。<br />
<br />
Chromium を再度起動すると、データベースファイルが再作成されるはずです。<br />
<br />
=== KDE Wayland でカーソルが正しく描画されない ===<br />
<br />
[[KDE#Plasma のカーソルがときどきおかしくなる]] を参照してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.chromium.org/ Chromium ホームページ]<br />
* [https://chromereleases.googleblog.com/ Google Chrome リリースノート]<br />
* [https://chrome.google.com/webstore/ Chrome ウェブストア]<br />
* [[Wikipedia:Chromium (web browser)#Differences from Google Chrome|Chromium と Google Chrome の違い]]<br />
* [https://peter.sh/experiments/chromium-command-line-switches/ Chromium コマンドラインスイッチのリスト]<br />
* [[Profile-sync-daemon]] - Chromium プロファイルを tmpfs に保存し、ディスクと同期する systemd サービス<br />
* [[Tmpfs]] - {{ic|/etc/fstab}} での tmpfs ファイルシステム<br />
* [https://docs.kernel.org/filesystems/tmpfs.html 公式の tmpfs カーネルドキュメント]<br />
<br />
{{TranslationStatus|Chromium|2024-02-22|800913}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Wayland&diff=36610
Wayland
2024-03-22T01:04:30Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:グラフィカルユーザーインターフェイス]]<br />
[[en:Wayland]]<br />
[[es:Wayland]]<br />
[[pt:Wayland]]<br />
[[ru:Wayland]]<br />
[[zh-hans:Wayland]]<br />
{{Related articles start}}<br />
{{Related|カーネルモード設定}}<br />
{{Related|Xorg}}<br />
{{Related|スクリーンショットの取得#Wayland}}<br />
{{Related articles end}}<br />
<br />
[https://wayland.freedesktop.org/ Wayland] はディスプレイサーバープロトコルです。[[Xorg|X Window System]] の後継となることを目指しています。[[Wikipedia:Wayland_(display_server_protocol)#Differences_between_Wayland_and_X|Wikipedia に Wayland と Xorg の比較]] が掲載されています。<br />
<br />
Wayland プロトコルを使用するディスプレイサーバは、[[Wikipedia:ja:コンポジット型ウィンドウマネージャ|コンポジット型ウィンドウマネージャ]] としても機能するため、'''コンポジタ''' と呼ばれます。以下に[[#コンポジタ|Wayland コンポジタのリスト]]を示します。<br />
<br />
ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、[[#Xwayland|Xwayland]] を使うことができます。これは Wayland に X サーバを提供します。<br />
<br />
== 要件 ==<br />
<br />
ほとんどの Wayland コンポジタは、[[カーネルモード設定]]を利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: [[GNOME]]、[[Plasma]]) が必要となります。<br />
<br />
GPU ドライバと Wayland コンポジタは、同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: [[Wikipedia:Generic Buffer Management|GBM]] と [https://www.phoronix.com/scan.php?page=news_item&px=XDC2016-Device-Memory-API EGLStreams] です。<br />
<br />
{| class="wikitable"<br />
|-<br />
! バッファ API !! GPU ドライバーのサポート !! Wayland コンポジタのサポート<br />
|-<br />
| GBM || [[NVIDIA]] < 495* 以外の全てのドライバー || 全て<br />
|-<br />
| EGLStreams || [[NVIDIA]] || [[GNOME]]<br />
|-<br />
|}<br />
<br />
: * Nvidia ≥ 495 は EGLStreams と GBM の両方をサポートします。[https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-495.44-Linux-Driver]<br />
<br />
NVIDIA が GBM のサポートを導入して以来、NVIDIA ≥ 495 で多くのコンポジタ (Mutter と KWin を含む) がデフォルトで GBM を使用し始めました。GBM は一般的にベターでより幅広いサポートがあると考えられています。EGLStreams がサポートされていた理由は、NVIDIA GPU をプロプライエタリドライバで Wayland 下で使用する代替の方法を NVIDIA が提供しなかったからだけです。さらに、GBM が NVIDIA に導入された後、KWin は [https://invent.kde.org/plasma/kwin/-/merge_requests/1638 EGLStreams のサポートを打ち切りました]。<br />
<br />
人気なデスクトップ環境/コンポジタと、NVIDIA によってまだサポートされている GPU を使用している場合、おそらくすでに GBM バックエンドを使用しています。確認するには、次を実行してください: {{ic|journalctl -b 0 --grep "renderer for"}}。GBM をバックエンドとして強制的に使用させるには、次の[[環境変数]]を設定してください:<br />
<br />
GBM_BACKEND=nvidia-drm<br />
__GLX_VENDOR_LIBRARY_NAME=nvidia<br />
<br />
== コンポジタ ==<br />
<br />
'''タイル型''' と '''スタック型''' の違いは、[[ウィンドウマネージャ#種類]] を参照してください。<br />
<br />
=== タイル型 ===<br />
<br />
* {{App|[[Cagebreak]]|cage をベースに、[[ratpoison]] にインスパイアされています。|https://github.com/project-repo/cagebreak|{{AUR|cagebreak}}}}<br />
* {{App|dwl|wlroots ベースの [[dwm]] ライクな Wayland コンポジタ。|https://codeberg.org/dwl/dwl|{{AUR|dwl}}}}<br />
* {{App|[[Hyprland]]|見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。|https://hyprland.org|{{Pkg|hyprland}}}}<br />
* {{App|japokwm|wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。|https://github.com/werererer/japokwm|{{AUR|japokwm-git}}}}<br />
* {{App|newm|ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ ''(現在、メンテナンスされていません)''。|https://github.com/jbuchermn/newm/|{{AUR|newm-git}}}}<br />
* {{App|niri|スクロール可能なタイル型 Wayland コンポジタ。|https://github.com/YaLTeR/niri/|{{AUR|niri}}}}<br />
* {{App|Polonium|Bismuth のフォークであり、後継。[[KDE]] のためのタイル型ウィンドウマネージャ。|https://github.com/zeroxoneafour/polonium|{{AUR|kwin-polonium}}}}<br />
* {{App|[[Qtile]]|Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。|https://github.com/qtile/qtile|{{Pkg|qtile}}}}<br />
* {{App|[[river]]|dwm と [[bspwm]] にインスパイアされた動的なタイル型 Wayland コンポジタ。|https://github.com/ifreund/river|{{Pkg|river}}}}<br />
* {{App|[[Sway]]|wlroots ベースの [[i3]] 互換 Wayland コンポジタ。|https://github.com/swaywm/sway|{{Pkg|sway}}}}<br />
* {{App|SwayFx|魅力的な視覚効果機能を追加した [[Sway]]。|https://github.com/WillPower3309/swayfx|{{AUR|swayfx}}}}<br />
* {{App|Velox|swc ベースのシンプルなウィンドウマネージャです。[[dwm]] と [[xmonad]] の影響を受けています。|https://github.com/michaelforney/velox|{{AUR|velox-git}}}}<br />
* {{App|Vivarium|wlroots を使用するダイナミックタイル型 Wayland コンポジタ。[[xmonad]] にインスパイアされたデスクトップセマンティクスを持ちます。|https://github.com/inclement/vivarium|{{AUR|vivarium-git}}}}<br />
<br />
=== スタック型 ===<br />
<br />
* {{App|[[Enlightenment]]|[[Enlightenment]]|[[Enlightenment#手動]] を参照してください。詳細: [https://git.enlightenment.org/enlightenment/enlightenment/src/branch/master/README.md] [https://www.enlightenment.org/about-wayland]|https://www.enlightenment.org/|{{Pkg|enlightenment}}}}<br />
* {{App|hikari|FreeBSD で活発に開発されている [[cwm]] にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしています。|https://hikari.acmelabs.space/|{{AUR|hikari}}}}<br />
* {{App|KDE [[w:KWin|KWin]]|[[KDE#Plasma の起動]] を参照。|https://userbase.kde.org/KWin|{{Pkg|kwin}}}}<br />
* {{App|Liri Shell|[[Liri]] の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。|https://github.com/lirios/shell|{{AUR|liri-shell-git}}}}<br />
* {{App|labwc|Openbox にインスパイアされた wlroots ベースのコンポジタ。|https://github.com/labwc/labwc|{{AUR|labwc-git}}}}<br />
* {{App|[[w:Mutter (software)|Mutter]]|[[GNOME#GNOME の起動]] を参照。|https://gitlab.gnome.org/GNOME/mutter|{{Pkg|mutter}}}}<br />
* {{App|wayfire|[[Compiz]] にインスパイアされ、wlroots に基づく 3D コンポジタ。|https://wayfire.org/|{{AUR|wayfire}}}}<br />
* {{App|[[Weston]]|正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。|https://gitlab.freedesktop.org/wayland/weston|{{Pkg|weston}}}}<br />
* {{App|wio|Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。|https://gitlab.com/Rubo/wio|{{AUR|wio-wl}}}}<br />
<br />
=== その他 ===<br />
<br />
* {{App|Cage|キオスクのような単一のフルスクリーンアプリケーションを表示します。|https://www.hjdskes.nl/projects/cage/|{{Pkg|cage}}}}<br />
* {{App|nwg-shell|Sway と Hyprland Wayland コンポジタのための GTK ベースシェル。|https://github.com/nwg-piotr/nwg-shell|{{AUR|nwg-shell}}}}<br />
* {{App|kiwmi|完全にプログラミング可能な Wayland コンポジタ。|https://github.com/buffet/kiwmi|{{AUR|kiwmi-git}}}}<br />
* {{App|phoc|モバイル端末のための wlroots ベースの小さなコンポジタ。|https://gitlab.gnome.org/World/Phosh/phoc|{{Pkg|phoc}}}}<br />
<br />
上記のいくつかは [[ディスプレイマネージャ]] をサポートする場合があります。<br />
それらがどのように開始されるかを {{ic|/usr/share/wayland-sessions/''compositor''.desktop}} を見て確認してください。<br />
<br />
== ディスプレイマネージャ ==<br />
<br />
Wayland コンポジタの実行をサポートしている[[ディスプレイマネージャ]]は以下の表の通りです。<br />
<br />
{| class="wikitable sortable"<br />
! 名前<br />
! それ自体は Wayland で動作するか?<br />
! 説明<br />
|-<br />
| {{AUR|emptty}}<br />
| {{No}}<br />
| TTY で動作するシンプルな CLI ディスプレイマネージャ。<br />
|-<br />
| [[GDM]]<br />
| {{Yes}}<br />
| [[GNOME]] ディスプレイマネージャ。<br />
|-<br />
| [[greetd]]<br />
| {{G|Wayland の greeter を使用した場合}}<br />
| 最小でありながら柔軟なログインデーモン。<br />
|-<br />
| {{AUR|lemurs}}<br />
| {{No}}<br />
| Rust で書かれた TUI ディスプレイマネージャ。<br />
|-<br />
| [[LightDM]]<br />
| {{No|https://github.com/canonical/lightdm/issues/267}}<br />
| 様々なデスクトップに対応したディスプレイマネージャ。<br />
|-<br />
| [[Ly]]<br />
| {{No}}<br />
| C で書かれた TUI ディスプレイマネージャ。<br />
|-<br />
| [[SDDM]]<br />
| {{Yes}}<br />
| QML ベースのディスプレイマネージャ。<br />
|-<br />
| [[tbsm]]<br />
| {{No}}<br />
| bash のみに依存するシンプルな CLI セッションランチャー。<br />
|}<br />
<br />
== Xwayland ==<br />
<br />
[https://wayland.freedesktop.org/xserver.html Xwayland] は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな [[X11]] アプリケーションに互換性を提供します。これを使用するには、{{Pkg|xorg-xwayland}} パッケージを[[インストール]]します。<br />
<br />
Xwayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、Xwayland との互換性についてや、Xwayland の起動方法に関する指示を確認しておく必要があります。<br />
<br />
{{Note|<br />
* セキュリティ: Xwayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。<br />
* パフォーマンス: Xwayland は X11 と[https://openbenchmarking.org/result/2202053-NE-NVIDIARTX35 ほぼ同等のパフォーマンス]を発揮します。しかし、一部のケースで (特に NVIDIA カード上で) パフォーマンスの低下を感じるかもしれません。<br />
* 互換性: Xwayland は X11 と完全な後方互換性があるわけではありません。一部のアプリケーションは Xwayland 下では正しく動作しない場合があります。}}<br />
<br />
=== NVIDIA ドライバ ===<br />
<br />
{{Note|バージョン 470 より前の Nvidia ドライバ(例: {{aur|nvidia-390xx-dkms}}) はハードウェア支援のある Xwayland をサポートしておらず、非 Wayland ネイティブなアプリケーションは Wayland セッションでのパフォーマンスが低下します。}}<br />
<br />
なお、[[NVIDIA#DRM カーネルモード設定|DRM KMS]] を有効にする必要があります。また、お使いのディスプレイマネージャ(例: [[GDM#Wayland と独自の NVIDIA ドライバ|GDM]])の[https://download.nvidia.com/XFree86/Linux-x86_64/515.48.07/README/xwayland.html 公式ドキュメント]に記載されている情報も見てください。<br />
<br />
=== Kwin Wayland デバッグコンソール ===<br />
<br />
{{pkg|kwin}} を使用している場合、以下を実行すると、どのウィンドウが Xwayland とネイティブ Wayland を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。<br />
<br />
$ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole<br />
<br />
=== Xwayland アプリケーションであることを視認する ===<br />
<br />
アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、{{AUR|extramaus}} を使用します。<br />
アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。<br />
<br />
または、{{pkg|xorg-xeyes}} を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。<br />
<br />
他の方法として、({{Pkg|xorg-xwininfo}} の) ''xwininfo'' をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。{{ic|Ctrl+C}} を押すことで xwininfo を終了できます。<br />
<br />
== GUI ライブラリ ==<br />
<br />
[https://wayland.freedesktop.org/toolkits.html 公式ウェブサイト] で詳細を確認してください。<br />
<br />
=== GTK ===<br />
<br />
{{Pkg|gtk3}} と {{Pkg|gtk4}} パッケージは Wayland バックエンドが有効になっています。GTK ではデフォルトで Wayland バックエンドを使いますが、[[環境変数]]を設定することで Xwayland を使うように上書きできます: {{ic|1=GDK_BACKEND=x11}}。<br />
<br />
テーマの問題は [[GTK#Wayland バックエンド]] を見てください。<br />
<br />
=== Qt ===<br />
<br />
[[Qt]] 5 または 6 で Wayland のサポートを有効化するには、Qt 5 と 6 に対してそれぞれ {{Pkg|qt5-wayland}} または {{Pkg|qt6-wayland}} パッケージをインストールしてください。これで、Qt アプリケーションは Wayland セッション上では Wayland で動作するようになります。<br />
<br />
必須ではないはずですが、明示的に Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[https://wiki.qt.io/QtWayland#How_do_I_use_QtWayland.3F] にあるように、{{ic|1=-platform wayland}} を使用するか、[[環境変数]] {{ic|1=QT_QPA_PLATFORM=wayland}} をセットして下さい。<br />
<br />
一方、Wayland セッション上で [[X11]] を使用させるには、{{ic|1=QT_QPA_PLATFORM=xcb}} と設定してください。これは、{{AUR|zoom}} など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。<br />
また、{{ic|1=QT_QPA_PLATFORM="wayland;xcb"}} を使用すると、Qt が Wayland を利用できない場合に、代わりに xcb (X11)プラグインを使用させることができます。[https://www.qt.io/blog/2018/05/29/whats-new-in-qt-5-11-for-the-wayland-platform-plugin]<br />
<br />
[[sway]] などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。たとえば、[https://keepassxc.org KeepassXC] はトレイに最小化できません。これは、アプリケーションを実行する前に {{Pkg|qt5ct}} をインストールし、{{ic|1=QT_QPA_PLATFORMTHEME=qt5ct}} を設定することで解決できます。<br />
<br />
=== Clutter ===<br />
<br />
Clutter ツールキットには Wayland バックエンドがあり、Clutter を Wayland のクライアントとして動作させることが可能です。このバックエンドは {{Pkg|clutter}} パッケージで有効になっています。<br />
<br />
Clutter アプリを Wayland 上で動作させるには、環境変数 {{ic|1=CLUTTER_BACKEND=wayland}} を設定する必要があります。<br />
<br />
=== SDL2 ===<br />
<br />
SDL2 アプリケーションを Wayland 上で動作させるには、{{ic|1=SDL_VIDEODRIVER=wayland}} を設定してください。<br />
<br />
{{ic|1=SDL_VIDEODRIVER="wayland,x11"}} とすることにより、Wayland が利用できない場合に代わりに X11 ビデオドライバを使用するように SDL2 を設定できます [https://wiki.libsdl.org/SDL2/FAQUsingSDL]。ウィンドウ装飾を有効化するために {{Pkg|libdecor}} をインストールすると良いかもしれません (例えば、GNOME で)。<br />
<br />
=== GLFW ===<br />
<br />
{{Pkg|glfw}} パッケージには Wayland に対するサポートがあります。{{ic|1=XDG_SESSION_TYPE}} が {{ic|1=wayland}} に設定されていて、かつアプリケーションの開発者が特定のバックエンドを使用するようにしていなければ、Wayland バックエンドが使用されます。<br />
<br />
詳細は GLFW の[https://github.com/glfw/glfw/blob/3.4/src/platform.c#L87-L99 ソースコード]を参照してください。<br />
<br />
=== GLEW ===<br />
<br />
{{AUR|glew-wayland}} パッケージは現在のところ、多くの GLEW ベースのアプリケーションでまだ動作しませんので、唯一の選択肢は Xwayland で {{Pkg|glew}} を使うことです。{{Bug|62713}} を参照してください。<br />
<br />
=== EFL ===<br />
<br />
EFL は Wayland を完全にサポートしています。Wayland で EFL アプリケーションを動かすには、Wayland の [https://wayland.freedesktop.org/efl.html プロジェクトページ] を見て下さい。<br />
<br />
=== winit ===<br />
<br />
Winit は [[Rust]] で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます:<br />
<br />
* バージョン 0.29.2 より前の場合、{{ic|1=WINIT_UNIX_BACKEND=x11}} を設定してください。<br />
* バージョン 0.29.2 以降の場合、{{ic|1=WAYLAND_DISPLAY}} を unset してください。そうすることで、強制的に {{ic|1=DISPLAY}} 変数を使用して X にフォールバックされます。[https://github.com/rust-windowing/winit/blob/baf10de95843f156b0fbad6b10c3137f1ebd4f1e/src/changelog/v0.29.md?plain=1#L134]<br />
<br />
=== Electron ===<br />
<br />
Wayland サポートを有効化する方法は次の2つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。<br />
<br />
アプリケーションがどの electron バージョンを使用しているか確認する方法については [https://stackoverflow.com/q/50345957] を見てください。<br />
<br />
{{Note|Plasma では、一部の Electron アプリケーションで間違ったアイコン (デフォルトの Wayland アイコン) がウィンドウに表示され、一方タスクバーには正しいアイコンが表示されることがあります。この問題は、デスクトップファイルの名前を強制する特殊なアプリケーション/ウィンドウルールを作成することで解決できます。}}<br />
<br />
==== 環境変数 ====<br />
<br />
Electron 28 及びそれ以降を使用するアプリケーションは、[[環境変数]] [https://github.com/electron/electron/blob/main/docs/api/environment-variables.md#electron_ozone_platform_hint-linux {{ic|ELECTRON_OZONE_PLATFORM_HINT}}] を {{ic|auto}} または {{ic|wayland}} に設定することで、Wayland モードを使用することができます。<br />
<br />
コマンドラインフラグは、この環境変数より優先されます。<br />
<br />
==== コマンドラインフラグ ====<br />
<br />
Electron がベースとしている Chromium とは異なり、Electron アプリケーションはデフォルトで PipeWire による WebRTC 画面共有を有効化しません。なので、Wayland 上で画面共有の問題を防ぐために {{ic|1=--enable-features=WebRTCPipeWireCapturer}} を使用することが推奨されます。画面共有は {{Pkg|xdg-desktop-portal}} をベースとしています。<br />
<br />
環境変数を使うことが望ましくない、または不可能である場合に、{{Pkg|electron}} ベースのアプリケーションを Wayland でネイティブに使用するには、Electron 20 以降では {{ic|1=--ozone-platform-hint=auto}} フラグを使用することで可能です。<br />
<br />
トップバーが消失してしまう場合、{{ic|1=--enable-features=WaylandWindowDecorations}} フラグを使用することで解決します。これは、典型的には [[GNOME]] で必須です ([https://github.com/electron/electron/pull/29618 electron17] からsパオートされています)。<br />
<br />
これらのフラグを永続的に設定する方法は2つあります。1つ目は、アプリケーションの [[デスクトップエントリ#desktop ファイルの変更|.desktop ファイルを変更]]して {{ic|1=Exec=}} 行の末尾にフラグを追加する方法。もう一つは、以下で説明している設定ファイルを使用する方法で、こちらはよりきれいに設定できます。<br />
<br />
{{Note|一部のアプリケーションは、Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。}}<br />
<br />
==== 設定ファイル ====<br />
<br />
ファイル {{ic|${XDG_CONFIG_HOME}/electron25-flags.conf}} ({{ic|${XDG_CONFIG_HOME} }} が設定されていない場合、{{ic|1=~/.config/electron25-flags.conf}} がデフォルトです) を作成/編集し、先に説明したフラグを追加してください (1行につき1オプション、空の行は無し):<br />
<br />
{{hc|~/.config/electron25-flags.conf|2=<br />
--enable-features=WaylandWindowDecorations<br />
--ozone-platform-hint=auto<br />
}}<br />
<br />
{{Note|このような設定ファイルは、公式リポジトリ内の Electron のパッケージと、それらの設定ファイルを使用するパッケージでのみ機能します。{{AUR|slack-desktop}} などのような Electron の独自のビルドをバンドルしているパッケージでは機能しません。{{AUR|slack-electron}} のように代替のパッケージが存在する場合があります。}}<br />
<br />
==== 古い Electron バージョン ====<br />
<br />
{{ic|electron25-flags.conf}} は Electron バージョン 25 に対してだけ適用されます。それより古い Electron のバージョンは {{ic|electron<バージョン>-flags.conf}} ファイルで設定できます。<br />
<br />
古いバージョンでは、対応する Chromium バージョンによって異なるフラグが必要になる場合があります。例えば、以下のフラグは Electron 13 で機能します:<br />
<br />
{{hc|~/.config/electron13-flags.conf|2=<br />
--enable-features=UseOzonePlatform<br />
--ozone-platform=wayland<br />
}}<br />
<br />
=== Java ===<br />
<br />
[[Java]] プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。<br />
OpenJDK に Wayland を実装することを目的としたプロジェクトである [https://openjdk.java.net/projects/wakefield/ Wakefield] が実用できるようになるまでは、Xwayland を代わりに使用できます。<br />
<br />
[[Debian:Wayland#Java Programs (supported since OpenJDK 16?)]] を参照してください: <br />
<br />
:OpenJDK 16から、JRE は (Wayland をサポートしている) GTK3 を動的にロードできるようになりました。この[https://stackoverflow.com/questions/39197208/java-gui-support-on-wayland 議論]によると、これがサポートされているかもしれません。<br />
:{{ic|_JAVA_AWT_WM_NONREPARENTING}} [[環境変数]]を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 自動化 ===<br />
<br />
* [https://github.com/ReimuNotMoe/ydotool ydotool] ({{Pkg|ydotool}}) - 汎用のコマンドラインツール (wayland 以外でも利用可能)。{{ic|ydotool.service}} [[ユーザーユニット]]を[[起動/有効化]]してください。{{man|8|ydotoold}}、{{man|1|ydotoold|url=https://github.com/ReimuNotMoe/ydotool/blob/master/manpage/ydotool.1.scd}} を参照。<br />
* [https://github.com/atx/wtype wtype] ({{Pkg|wtype}}) - Wayland 用 xdotool type。{{man|1|wtype}} を参照。<br />
* [https://github.com/boppreh/keyboard keyboard] - Windows と Linux で動作する Python ライブラリ。実験的な OS X サポートあり。[https://github.com/boppreh/mouse mouse] ライブラリも参照。<br />
* [https://git.sr.ht/~brocellous/wlrctl wlrctl] ({{AUR|wlrctl}}) - 雑多な wlroots 拡張のためのコマンドラインユーティリティ (foreign-toplevel-management、virtual-keyboard、virtual-pointer をサポート)。<br />
<br />
=== キーボードやマウスキーのリマップ ===<br />
<br />
[[入力リマップユーティリティ]] を見てください。<br />
<br />
=== X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする ===<br />
<br />
[[スクリーンキャプチャ#X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする]] を見てください。<br />
<br />
==トラブルシューティング==<br />
<br />
=== 色補正 ===<br />
<br />
[[バックライト#色補正]]を参照。<br />
<br />
=== 動作が遅い、表示がおかしい、クラッシュする ===<br />
<br />
Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に {{ic|1=CLUTTER_PAINT=disable-clipped-redraws:disable-culling}} が設定されている可能性があります。{{ic|/etc/environment}} や rc ファイルから該当箇所を削除してみてください。<br />
<br />
=== リモートディスプレイ ===<br />
<br />
* ([[sway]] で使用されている) {{pkg|wlroots}} は、バージョン 0.10 より、{{Pkg|wayvnc}} を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [https://github.com/swaywm/wlroots/releases/tag/0.10.0]。<br />
* {{pkg|mutter}} はコンパイル時にリモートデスクトップが有効化されています。詳細は [https://wiki.gnome.org/Projects/Mutter/RemoteDesktop] と {{Pkg|gnome-remote-desktop}} を見てください。<br />
* {{pkg|krfb}} は {{pkg|kwin}} に VNC サーバを提供します。{{ic|krfb-virtualmonitor}} を使えば、他のデバイスを外部モニタとしてセットアップすることが可能です。<br />
* 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。{{Pkg|weston}} パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。<br />
* {{AUR|waypipe}} (や {{AUR|waypipe-git}}) は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。<br />
** 以下は、Plasma デスクトップでリモートの KDE kcalc を起動する例です:<br />
$ waypipe ssh example.local env QT_QPA_PLATFORM=wayland-egl QT_QPA_PLATFORMTHEME=KDE dbus-launch kcalc<br />
<br />
=== ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力捕捉 ===<br />
<br />
Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません (例: [https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html キーボード]、[https://tronche.com/gui/x/xlib/input/XGrabPointer.html マウス])。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。<br />
<br />
入力グラブが変わったことで以下のように既存のアプリケーションで問題が発生します:<br />
<br />
* ホットキーや修飾キーがコンポジタによって認識されてしまい、リモートデスクトップや仮想マシンのウィンドウに送信されなくなります。<br />
* マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。<br />
<br />
Wayland と Xwayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。Xorg アプリケーションの場合、Xwayland のサポートで十分であるため、アプリケーションやウィジェット・ツールキットに変更を加える必要はありません。<br />
<br />
これらの拡張はすでに {{pkg|wayland-protocols}} に含まれており、{{pkg|xorg-xwayland}} によってサポートされています。<br />
<br />
関連する拡張:<br />
<br />
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml Xwayland keyboard grabbing protocol]<br />
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml Compositor shortcuts inhibit protocol]<br />
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/relative-pointer/relative-pointer-unstable-v1.xml Relative pointer protocol]<br />
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml Pointer constraints protocol]<br />
<br />
サポートしている Wayland コンポジタ:<br />
<br />
* Mutter, [[GNOME]] のコンポジタ ([https://bugzilla.gnome.org/show_bug.cgi?id=783342 リリース 3.28] 以降)。<br />
* wlroots (Relative pointer protocols と Pointer constraints protocol に対応)<br />
* Kwin<br />
** [[KDE#Wayland で X11 のショートカットが衝突する]]<br />
** [https://invent.kde.org/plasma/kwin/-/blob/master/src/wayland/keyboard_shortcuts_inhibit_v1_interface.cpp Keyboard shortcuts inhibit]<br />
<br />
サポートしているウィジェットツールキット:<br />
<br />
* GTK (リリース 3.22.18 以降)。<br />
<br />
=== GTK テーマが動かない ===<br />
<br />
https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland を参照してください。<br />
<br />
=== NVIDIA モジュールを読み込まないようにする ===<br />
<br />
[[sway]] などの Wayland コンポジターを起動する前に {{ic|1=__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json}} を [[環境変数]] として追加します。<br />
<br />
=== 拡大/サーフェススケーリング ===<br />
<br />
スクリーンの拡大は、まだ解決していません。[https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/145 wp-surface-scale プロトコルを提供する]プルリクエストが2022年半ばにマージされました。<br />
<br />
== 参照 ==<br />
<br />
* [https://wayland.freedesktop.org/docs/html/ Wayland オンラインドキュメント]<br />
* [https://gitlab.freedesktop.org/wayland 公式リポジトリ]<br />
* [[Fedora:How to debug Wayland problems]]<br />
* [https://arewewaylandyet.com/ Are we Wayland yet?]<br />
* [https://awesomeopensource.com/projects/wayland Awesome Wayland projects]<br />
* [[カーソルテーマ]]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=107499 Arch Linux forum discussion]<br />
* [https://github.com/swaywm/sway/wiki/i3-Migration-Guide#common-x11-apps-used-on-i3-with-wayland-alternatives i3 Migration Guide - Common X11 apps used on i3 with Wayland alternatives]<br />
* [https://wayland.app/protocols/ Wayland Explorer - A better way to read Wayland documentation]<br />
* [https://askubuntu.com/questions/1393618/how-can-i-tell-if-an-application-is-using-xwayland How can I tell if an application is using XWayland]<br />
<br />
{{TranslationStatus|Wayland|2024-03-22|803938}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%BD%E3%83%AA%E3%83%83%E3%83%89%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96&diff=36609
ソリッドステートドライブ
2024-03-22T00:48:50Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ストレージ]]<br />
[[en:Solid state drive]]<br />
[[es:Solid State drive]]<br />
[[ru:Solid state drive]]<br />
[[zh-hans:Solid state drive]]<br />
{{Related articles start}}<br />
{{Related|ソリッドステートドライブ/NVMe}}<br />
{{Related|ソリッドステートドライブ/メモリセルの消去}}<br />
{{Related|ベンチマーク/データストレージデバイス}}<br />
{{Related|パフォーマンスの向上#ストレージデバイス}}<br />
{{Related articles end}}<br />
<br />
この記事では、[[Wikipedia:ja:ソリッドステートドライブ|ソリッドステートドライブ]] (SSD) や他のフラッシュメモリベースのストレージデバイスの取り扱いに関するトピックをカバーしています。<br />
<br />
特定の目的のために SSD をパーティショニングしたい場合、[[Wikipedia:List of file systems#File systems optimized for flash memory, solid state media|フラッシュメモリ向けに最適化されたファイルシステムのリスト]]で検討すると良いかもしれません。<br />
<br />
一般的な利用では、自由に[[ファイルシステム]]を選び、[[#TRIM]] を有効化すると良いでしょう。<br />
<br />
== 使用法 ==<br />
<br />
=== TRIM ===<br />
<br />
ファイルの削除がファイルシステムレベルのみで処理される[https://www.redhat.com/sysadmin/linux-delete-file-rm]ハードドライブと比較して、SSD は、メモリブロックが解放されて再利用可能になったときにディスクコントローラに通知することで利益を得ます。SSD を構成するフラッシュセルは書き込み操作の度に少しづつ摩耗するため、ディスクコントローラは全てのセルに書き込み操作を分散させるアルゴリズムを使用します: この処理は[[Wikipedia:ja:ウェアレベリング|ウェアレベリング]]と呼ばれます。NVMe の [[Wikipedia:Trim (computing)#NVM_Express|DEALLOCATE]] や、SAS の [[Wikipedia:Trim (computing)#SCSI|UNMAP]]、[[Wikipedia:ATA_TRIM|ATA_TRIM]] コマンドが無ければ、空きメモリブロックがなくなると、1つセルに書き込む前にそのセルを削除するためにデータを移動しなければならないため、ディスクコントローラは書き込み操作により多くの時間を消費するようになってしまいます ([[Wikipedia:ja:ライトアンプリフィケーション]] を参照): [https://www.techspot.com/review/737-ocz-vector-150-ssd/page9.html TechSpot のベンチマーク]では、SSD をデータで埋める前と後でのパフォーマンスへの影響を表しています。<br />
<br />
{{Note|TRIM を使用したいのであれば、定期的な TRIM か連続的な TRIM のどちらか一方'''のみ'''を使用してください。連続的な TRIM は、TRIM コマンドを発行する方法として Linux コミュニティの間で最も好まれているわけでは'''ありません'''。例えば、Ubuntu は定期的な TRIM をデフォルトで有効化しており [https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation]、Debian は [[Debian:SSDOptimization#Mounting SSD filesystems|連続的な TRIM]] の使用を推奨しておらず、Red Hat は可能であれば連続的な TRIM よりも定期的な TRIM を使用することを推奨しています [https://web.archive.org/web/20160917183831/https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/ch02s04.html]。}}<br />
<br />
Linux カーネルバージョン 3.8 以降、異なる[[ファイルシステム]]に対する TRIM のサポートが継続的に追加されました。概要は以下の表を見てください:<br />
<br />
{| class="wikitable sortable"<br />
! ファイルシステム !! 連続的な TRIM <br> ({{ic|discard}} オプション) !! 定期的な TRIM <br> (''fstrim'') !! 参照<br> と備考<br />
|-<br />
| [[Bcachefs]] || {{Yes}} || {{No}} ||<br />
|-<br />
| [[Btrfs]] || {{Yes}} || {{Yes}} || カーネル 6.2 から非同期 discard がデフォルトで[[Btrfs#SSD TRIM|有効化]]されています。<br />
|-<br />
| [[Wikipedia:ja:exFAT|exFAT]] || {{Yes}} || {{Yes}} || ''fstrim'' はカーネル 5.13 以降、サポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=654762df2ec7d61b05acc788afbffaba52d658fe]<br />
|-<br />
| [[ext3]] || {{Yes}} || {{Yes}} || <br />
|-<br />
| [[ext4]] || {{Yes}} || {{Yes}} || [https://docs.kernel.org/admin-guide/ext4.html?highlight=discard,%20nodiscard(*)#options] の "discard, nodiscard(*)"<br />
|-<br />
| [[F2FS]] || {{Yes}} || {{Yes}} ||<br />
|-<br />
| [[JFS]] || {{Yes}} || {{Yes}} || [https://www.phoronix.com/scan.php?page=news_item&px=MTE5ODY]<br />
|-<br />
| [[Wikipedia:ja:NILFS|NILFS2]] || {{Yes}} || {{Yes}} ||<br />
|-<br />
| rowspan=2 | [[NTFS]]<br />
| {{Yes}} || {{No}} || [https://docs.kernel.org/filesystems/ntfs3.html ntfs3] カーネルドライバは連続的な TRIM のみをサポートしています。<br />
|-<br />
| {{No}} || {{Yes}} || [[NTFS-3G]] ドライバは定期的な TRIM のみをサポートしています。<br />
|-<br />
| [[VFAT]] || {{Yes}} || {{Yes}} || ''fstrim'' はカーネル 4.19 以降、サポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f663b5b38fffeb31841f8bfaf0ef87a445b0ffee]<br />
|-<br />
| [[XFS]] || {{Yes}} || {{Yes}} || [https://xfs.org/index.php/FITRIM/discard]{{Dead link|2024|03|03|status=SSL error}}<br />
|}<br />
<br />
{{Warning|TRIM を試みる前に、SSD が TRIM をサポートしていることを確認する必要があります。さもないと、データを失うかもしれませんよ!}}<br />
<br />
TRIM のサポートを確認するには、以下を実行してください:<br />
<br />
$ lsblk --discard<br />
<br />
そして、DISC-GRAN (discard granularity) と DISC-MAX (discard max bytes) 列の値を確認してください。値が 0 でなければ、TRIM をサポートしていることを意味します。<br />
<br />
SATA SSD の場合にのみ、{{Pkg|hdparm}} パッケージは、{{ic|hdparm -I /dev/sda {{!}} grep TRIM}} を [[ユーザーとグループ#概要|root ユーザ]]として実行することにより、TRIM サポートを検出することができます。{{Pkg|hdparm}} は、NVMe SSD をサポートしていません。<br />
<br />
==== 定期的な TRIM ====<br />
<br />
{{Pkg|util-linux}} パッケージは {{ic|fstrim.service}} と {{ic|fstrim.timer}} [[systemd]] ユニットファイルを提供しています。タイマーを[[有効化]]すれば毎週サービスが実行されます。このサービスは、''discard'' 操作をサポートしているデバイス上のマウント済みのファイルシステムすべてに対して {{man|8|fstrim}} を実行します。<br />
<br />
タイマーは最後に実行してから一週間経過したことを知るために (最初に実行したときに作成される) {{ic|/var/lib/systemd/timers/stamp-fstrim.timer}} のタイムスタンプを使います。そのため、''anacron'' のように、何度も頻繁に実行される恐れはありません。<br />
<br />
ユニットの活動と状態を取得するには、[[journalctl]] を見てください。タイマーの周期や実行されるコマンドを変更するには、提供されているユニットファイルを[[編集]]してください。<br />
<br />
==== 連続的な TRIM ====<br />
<br />
TRIM コマンドを定期的に ({{ic|fstrim.timer}} を使用する場合はデフォルトで1週間に1度) 発行するのではなく、ファイルが削除されるたびに TRIM コマンドを発行することも可能です。後者は、連続的な TRIM (continuous TRIM) として知られています。<br />
<br />
{{Warning|[[Wikipedia:Serial ATA#SATA revision 3.1|SATA 3.1]] 以前ではすべての TRIM コマンドはキューされなかったので、連続的な TRIM はシステムを頻繁にフリーズさせていました。この場合、低頻度で [[#定期的な TRIM]] を適用するのがより良い代替策です。また、深刻なデータ破損を引き起こすためキューに入れられた TRIM コマンドの実行がブラックリスト化されているデバイスの多くでも似たような問題が発生します ([https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/ata/libata-core.c Linux ソースコード]の {{ic|ata_device_blacklist}} を参照)。そのような場合、デバイスにも依りますが、システムはキューの TRIM コマンドではなく非キューの TRIM コマンドを SSD に送信することを強制される場合があります。詳細は [[Wikipedia:ja:TRIM#短所]] を見てください。}}<br />
<br />
{{ic|/etc/fstab}} 内で {{ic|discard}} オプションを使うことにより、デバイスオペレーションでの連続的な TRIM を有効化します:<br />
<br />
/dev/sda1 / ext4 defaults,'''discard''' 0 1<br />
<br />
{{Note|1=XFS {{ic|/}} パーティションの場合、{{ic|/etc/fstab}} 内で discard オプションを指定しても、うまく行きません。[https://bbs.archlinux.org/viewtopic.php?id=143254 このスレッド]によると、{{ic|1=rootflags=discard}} [[カーネルパラメータ]]を使用して設定しなければならないようです。}}<br />
<br />
ext4 ファイルシステムでは、''tune2fs'' を使って {{ic|discard}} フラグを[[アクセス制御リスト#ACL の有効化|デフォルトマウントオプション]]として設定することもできます:<br />
<br />
# tune2fs -o discard /dev/sd'''XY'''<br />
<br />
外部ドライブの場合は、{{ic|/etc/fstab}} 内のエントリではなくデフォルトマウントオプションを使うと便利です。そのようなパーティションは、他のマシンでもデフォルトのオプションを使ってマウントされるからです。この方法では、すべてのマシンで {{ic|/etc/fstab}} を編集する必要はありません。<br />
<br />
{{Note|デフォルトマウントオプションは、{{ic|/proc/mounts}} にリストアップされません。}}<br />
<br />
==== デバイス全体を trim する ====<br />
<br />
一度に SSD 全体を trim したい場合 (例えば、新しいインストールのためや、そのドライブを売りたい場合など)、[[ソリッドステートドライブ/メモリセルの消去#blkdiscard による一般的な方法|blkdiscard]] コマンドが使えます。<br />
<br />
==== LVM ====<br />
<br />
ファイルシステムから論理ボリュームへ渡された TRIM 要求は、自動的に物理ボリュームへ渡されます。追加の設定は必要ありません。<br />
<br />
デフォルトでは、[[LVM]] のオペレーション (''lvremove''、''lvreduce''、そしてその他すべて) は物理ボリュームに TRIM 要求を発行しません。これは、{{man|8|vgcfgrestore}} を使って以前のボリュームグループ設定を復元できるようにするためです。{{ic|/etc/lvm/lvm.conf}} 内の {{ic|issue_discards}} は、論理ボリュームがその基底となる物理ボリュームの領域をもはや使用しなくなった時に、その物理ボリュームに discard 要求を送信するかどうかを制御します。<br />
<br />
{{Note|{{ic|issue_discards}} の設定を変更する前に {{ic|/etc/lvm/lvm.conf}} 内のコメントをよく読んでください。この設定は、ファイルシステムからディスクへ渡される TRIM 要求 (例: ファイルシステム内でのファイル削除) には全く影響を与えませんし、シンプール内の領域管理にも影響を与えません。}}<br />
<br />
{{Warning|{{ic|issue_discards}} を有効化すると、''vgcfgrestore'' によるボリュームグループメタデータの復元ができなくなります。LVM コマンドを誤って発行した場合のリカバリオプションは無くなります。}}<br />
<br />
==== dm-crypt ====<br />
<br />
{{Warning|discard オプションは、暗号化されているブロックデバイスを通して discard 要求を渡せるようにします。これは、SSD ストレージのパフォーマンスを向上させるかもしれませんし、しないかもしれません[https://lore.kernel.org/linux-raid/508FA2C6.2050800@hesbynett.no/]。しかし、セキュリティに影響を与えます。詳細は以下の記事を見てください:<br />
<br />
* [[Debian:SSDOptimization#Mounting SSD filesystems]]<br />
* [[dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]]<br />
}}<br />
<br />
ルート以外のファイルシステムの場合、{{ic|/etc/crypttab}} を編集して、SSD 上の暗号化されているブロックデバイスのオプションリストに {{ic|discard}} を追加してください ([[dm-crypt/システム設定#crypttab]] を見てください)。<br />
<br />
ルートファイルシステムの場合、[[dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]] の指示に従って、ブートローダーの設定に適切なカーネルパラメータを追加してください。<br />
<br />
=== パフォーマンスを最大化する ===<br />
<br />
[[パフォーマンスの向上#ストレージデバイス]] のヒントに従ってドライブのパフォーマンスを最大化しましょう。<br />
<br />
==== セクタサイズ ====<br />
<br />
[[Advanced Format#NVMe ソリッドステートドライブ]] を見てください。<br />
<br />
==== SSD のメモリセルのクリア ====<br />
<br />
時々、SSD のセルを完全にリセットしてデバイスにインストールした時と同じ初めの状態にすることで[https://www.anandtech.com/show/2738/8 製造時の書き込みパフォーマンス]を取り戻したいと思うことがあるかもしれません。SSD の書き込みパフォーマンスはネイティブの TRIM サポートを使っていても時間経過で落ちていきます。TRIM はファイル削除に対するセーフガードとして働くだけで、増加保存などの代わりにはなりません。<br />
<br />
[[ソリッドステートドライブ/メモリセルの消去#SATA ドライブ|#SATA]] や [[ソリッドステートドライブ/メモリセルの消去#NVMe ドライブ|#NVMe]] の場合、[[ソリッドステートドライブ/メモリセルの消去]] に書かれている適切な手順に従うことでリセットすることができます。<br />
<br />
{{Note|リセットする目的がデータの消去ならば、SSD のコントローラに頼って安全に消去を行うことを望まない場合があるでしょう (例えば、あなたが SSD の製造業者を信頼していなかったり、潜在的なバグを不安に思っていたりする場合など)。この場合、手動消去を行う例やさらなる情報を [[ディスクの完全消去#フラッシュメモリ]] で見てください。}}<br />
<br />
=== セキュリティ ===<br />
<br />
==== Frozen モード ====<br />
<br />
一部のマザーボードファームウェアは初期化時に ATA SECURITY FREEZE LOCK コマンドを SATA デバイスに発行します。これによりドライブは frozen モードになり、SEC2 状態 (セキュリティ無効、未ロック、frozen 状態) に遷移します。同様に、一部の SSD (と HDD) も工場出荷時にこの状態にすでに設定されています。このことは [[hdparm]] と [[smartctl]] の出力から確認できます:<br />
<br />
{{hc|head=# hdparm -I /dev/sda |output=<br />
Security: <br />
Master password revision code = 65534<br />
supported<br />
'''not enabled'''<br />
'''not locked'''<br />
'''frozen'''<br />
not expired: security count<br />
supported: enhanced erase<br />
4min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.<br />
}}<br />
<br />
{{hc|# smartctl -g security /dev/sda|<br />
ATA Security is: Disabled, frozen [SEC2]<br />
}}<br />
<br />
デバイスのフォーマットやオペレーティングシステムのインストールといった操作は、frozen モードの影響を受けません。<br />
<br />
上記の ''hdparm'' の出力は、デバイスが起動時に HDD パスワードによって'''ロックされていない'''こと、そして '''frozen''' 状態によってデバイスを (実行時にパスワードを設定してデバイスをロックさせてしまうような) マルウェアから保護していることを示しています。<br />
<br />
"frozen" 状態のデバイスにパスワードを設定したい場合、それに対応しているマザーボード BIOS が必要です。[[自己暗号化ドライブ|ハードウェア暗号化]]に必要なので、多くのノートパソコンでサポートされていますが、デスクトップやサーバーのボードではサポートがあるかどうかはっきりしないことがあります。<br />
<br />
例えば、Intel DH67CL/BL マザーボードの場合、設定にアクセスするには物理的なジャンパによってマザーボードを "maintenance mode" に設定する必要があります。[https://sstahlman.blogspot.in/2014/07/hardware-fde-with-intel-ssd-330-on.html?showComment=1411193181867#c4579383928221016762]<br />
<br />
{{Warning|よくわからないときは ''hdparm'' を使って上記の'''ロック'''セキュリティ設定を変更しないで下さい。}}<br />
<br />
SSD を消去するときは、[[ディスクの完全消去#hdparm]] や [[ソリッドステートドライブ/メモリセルの消去]] を見て下さい。<br />
<br />
===== スリープから復帰したあとに SSD 状態を frozen モードにする =====<br />
<br />
SSD は S3 スリープから復帰すると SEC1 状態 (セキュリティ無効、未ロック、非 frozen) に戻っていることが多く、[[ソリッドステートドライブ/メモリセルの消去]] で説明されているように ATA SECURITY ERASE UNIT コマンドに対して脆弱になっています。<br />
<br />
この問題を回避するために、[[電源管理/サスペンドとハイバネート#/usr/lib/systemd/system-sleep のフック|スリープからの復帰後]]にスクリプトを実行することができます:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/ssd-freeze.sh|2=<br />
#!/bin/sh<br />
if [ "$1" = 'post' ]; then<br />
sleep 1<br />
if hdparm --security-freeze /dev/disk/by-id/''ata-name-of-disk''; then<br />
logger "$0: SSD freeze command executed successfully"<br />
else<br />
logger "$0: SSD freeze command failed"<br />
fi <br />
fi<br />
}}<br />
<br />
システムに複数のストレージデバイスやポータブル USB ドライブが存在している場合、[[Hdparm#udev ルールによる永続的な設定]] に書かれてあるテクニックを利用して、{{ic|--security-freeze}} を全ドライブ (HDD も含む) に発行することもできます。<br />
<br />
==== ハードウェア暗号化 ====<br />
<br />
[[#Frozen モード]] で説明されているように、BIOS でストレージデバイス (SSD/HDD) のパスワードを設定すると、それをサポートしているデバイスのハードウェア暗号化も初期化される場合があります。デバイスが OPAL 規格にも準拠している場合、パスフレーズを設定する機能が BIOS に無くとも、これを行える場合があります。[[自己暗号化ドライブ]] を見てください。<br />
<br />
== トラブルシューティング ==<br />
<br />
あなたが今遭遇している問題は、Linux 固有でないファームウェアのバグである可能性があります。ゆえに、SSD に影響を与える問題のトラブルシューティングに挑戦する前に、以下のアップデートが利用可能であるかをチェックするべきです:<br />
<br />
* [[#ファームウェア|SSD のファームウェア]]<br />
* [[Linux から BIOS を書き換える|マザーボードの BIOS/UEFI ファームウェア]]<br />
<br />
ファームウェアのバグであったとしても、解決できることがあります。ファームウェアにアップデートが存在しなかったり、ファームウェアのアップデートをしたくない場合、以下のセクションが役に立つかもしれません。<br />
<br />
=== NCQ エラーを解消する ===<br />
<br />
SSD や SATA チップセットによっては Linux Native Command Queueing (NCQ) が正しく動作しないことがあります。[[journal]] に以下のようなエラーが表示されます:<br />
<br />
ata9: exception Emask 0x0 SAct 0xf SErr 0x0 action 0x10 frozen<br />
ata9.00: failed command: READ FPDMA QUEUED<br />
ata9.00: cmd 60/04:00:d4:82:85/00:00:1f:00:00/40 tag 0 ncq 2048 in<br />
res 40/00:18:d3:82:85/00:00:1f:00:00/40 Emask 0x4 (timeout)<br />
<br />
起動時に NCQ を無効にするには、[[ブートローダー]]の設定におけるカーネルコマンドラインに {{ic|1=libata.force=noncq}} を追加してください。ポート 9 のディスク 0 の NCQ だけを無効化するには次を使用: {{ic|1=libata.force=9.00:noncq}}。<br />
<br />
また、sysfs を使うことで再起動せずに特定のドライブの NCQ を無効化することもできます:<br />
<br />
# echo 1 > /sys/block/sdX/device/queue_depth<br />
<br />
問題が解決しなかったり他の問題が発生する場合は、[[バグ報告ガイドライン|バグレポートを作成]]してください。<br />
<br />
=== SATA の電源管理関連のエラーを解消する ===<br />
<br />
SATA Active Link Power Management ([[wikipedia:Aggressive Link Power Management|ALPM]]) が有効になっている場合にエラーを吐く SSD も存在します (例: Transcend MTS400)。ALPM はデフォルトで無効になっており、省電力デーモンによって有効になります (例: [[TLP]], [[Laptop Mode Tools]])。<br />
<br />
そのようなデーモンを使っていて SATA 関連のエラーが表示される場合、バッテリーと AC 電源のプロファイルを {{ic|max_performance}} に設定して ALPM を無効化してみてください。<br />
<br />
=== 外部 SSD での TRIM サポート ===<br />
<br />
いくつかの USB から SATA へのブリッジチップ (VL715、VL716 など) や USB から PCIe へのブリッジチップ ([https://icybox.de/en/product.php?id=71 IB-1817M-C31] のような外部 NVMe エンクロージャで使用されている [https://www.jmicron.com/PDF/brief/jms583.pdf JMicron JMS583] など) は、[[Wikipedia:ja:USB Attached SCSI|USB Attached SCSI]] ドライバ (Linux では "uas" と呼ばれています) を通して送信できる TRIM ライクなコマンドをサポートしています。<br />
<br />
しかし、カーネルはこの機能を自動的に検出しない場合があり、この機能を使用しないかもしれません。<br />
問題のブロックデバイスが /dev/sdX であると仮定すると、{{Pkg|sg3_utils}} パッケージのコマンドを使えばそのケースに当てはまっているかどうかを確認できます:<br />
<br />
# sg_readcap -l /dev/sdX<br />
<br />
このコマンドの出力に "Logical block provisioning: lbpme=0" と始まる行がある場合、(LBPME) ビットがセットされていないためカーネルはそのデバイスが "[https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068k.pdf#G4.1427908 Logical Block Provisioning Management]" をサポートしていないと推定していることを示しています。<br />
<br />
この場合、デバイスの [https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068k.pdf#G4.3076244 "Logical Block Provisioning" の "Vital Product Data" (VPD) ページ]でデータのアンマッピングのためのサポートされている機能を確認する必要があります。以下のコマンドでこれを行うことができます:<br />
<br />
# sg_vpd -a /dev/sdX<br />
<br />
出力から以下のような行を探してください:<br />
<br />
Unmap command supported (LBPU): 1<br />
Write same (16) with unmap bit supported (LBPWS): 0<br />
Write same (10) with unmap bit supported (LBPWS10): 0<br />
<br />
この例では、デバイスが "UNMAP" コマンドをサポートしていることを示しています。<br />
<br />
以下のコマンドの出力を見てください:<br />
<br />
$ cat /sys/block/sdX/device/scsi_disk/*/provisioning_mode<br />
<br />
カーネルがデバイスのデータアンマッピング機能を検出していない場合、このコマンドはおそらく "full" を返します。<br />
"full" の他に、カーネルの SCSI ストレージドライバは現在以下の provisioning_mode 値が登録されています:<br />
<br />
unmap<br />
writesame_16<br />
writesame_10<br />
writesame_zero<br />
disabled<br />
<br />
上記の例の場合、"provisioning_mode" を "unmap" に設定することで、カーネルにそれを使用するように要求することができます:<br />
<br />
# echo "unmap" >/sys/block/sdX/device/scsi_disk/*/provisioning_mode<br />
<br />
このコマンドを実行すると即座に、/dev/sdX 上で "blkdiscard" のようなツールを使ったり、/dev/sdX 上にマウントされているファイルシステム上で "fstrim" を実行したりできるようになるはずです。<br />
<br />
特定のベンダ/製品の外部デバイスが接続されたときに "provisioning_mode" を自動的に有効化したいならば、"[[udev]]" の機構を使うことで可能です。まず、USB Vendor と Product ID を調べてください:<br />
<br />
$ cat /sys/block/sdX/../../../../../../idVendor<br />
$ cat /sys/block/sdX/../../../../../../idProduct<br />
<br />
そして、[[udev]] ルールのファイルに以下の内容を記述してください (この例では、idVendor 152d と idProduct 0583 を使っています):<br />
<br />
# echo 'ACTION=="add|change", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="0583", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' >>/etc/udev/rules.d/10-uas-discard.rules<br />
<br />
(関連する idVendor/idProduct は {{ic|lsusb}} を使うことでも取得できます。)<br />
<br />
== ファームウェア ==<br />
<br />
デバイスのベンダーによってサポートされていれば、[[fwupd]] ユーティリティを使ってファームウェアをアップデートすることが推奨されます。<br />
<br />
現在のファームウェアバージョンを確認するには:<br />
<br />
# smartctl -i /dev/''ssd_device''<br />
<br />
=== ADATA ===<br />
<br />
Linux での SSD ファームウェアのアップデートは ADATA によってサポートされていません。Windows でのみ利用できるユーティリティ SSD ToolBox が ADATA によって ADATAの[https://www.adata.com/en/support/consumer?tab=downloads&download=driver サポートページ]と ADATA XPG の[https://www.xpg.com/en/support/xpg?tab=downloads&download=driver サポートページ]で提供されています。このツールにより、監視、TRIM、ベンチマーク、ADATA SSD ファームウェアのアップデートができます。<br />
<br />
{{Warning|[[Wine]] を使ってファームウェアをアップデートすることは推奨されていません。Wine はハードウェアインターフェイスを扱うようには設計されておらず、不完全なファームウェアアップデートはデバイスを文鎮化させる可能性があります。}}<br />
<br />
=== Crucial ===<br />
<br />
Crucial は ISO イメージを使ってファームウェアをアップデートする方法を提供しています。[https://www.crucial.com/usa/en/support-ssd SSD サポートページ]から製品を選んで "Manual Boot File" をダウンロードすることでイメージを入手できます。<br />
<br />
{{Note|Crucial が提供している ISO イメージはハイブリッドではないようです。{{ic|dd}} コマンドを使って [[MBR]] が存在しないデバイスにイメージをコピーした場合、デバイスが起動できなくなります。{{Pkg|syslinux}} をインストールし、{{ic|isohybrid path/to/image.iso}} を実行してください。}}<br />
<br />
M4 Crucial モデルを使っている場合、{{ic|smartctl}} でファームウェアのアップグレードが必要かどうかチェックすることが可能です。<br />
<br />
{{hc|$ smartctl --all /dev/sd'''X'''|<br />
==> WARNING: This drive may hang after 5184 hours of power-on time:<br />
https://www.tomshardware.com/news/Crucial-m4-Firmware-BSOD,14544.html<br />
See the following web page for firmware updates:<br />
https://www.crucial.com/usa/en/support-ssd<br />
}}<br />
<br />
上記の警告が表示された場合は、重要なデータをバックアップしてから'''直ちにアップグレードを行うこと'''が推奨されます。ISO イメージと Grub を使用して Crucial MX100 のファームウェアをアップデートする手順は [https://www.rojtberg.net/1008/updating-crucial-mx100-firmware-with-ubuntu/ こちら] を参照してください。<br />
<br />
=== Intel ===<br />
<br />
Intel は、Windows の [https://downloadcenter.intel.com/download/30380/ Intel® Memory and Storage Tool (GUI)] ソフトウェアに対応していないオペレーティングシステム向けに、Linux ライブシステムをベースとする [https://downloadcenter.intel.com/download/18363 Firmware Update Tool] を配布しています。<br />
<br />
また、ファームウェアをリフラッシュできる、[https://downloadcenter.intel.com/download/29337/Intel-Memory-and-Storage-Tool-CLI-Command-Line-Interface-?product=83425 Intel Memory and Storage (MAS) Tool] という新しい Linux コマンドラインユーティリティもあります。{{AUR|intel-mas-cli-tool}} パッケージで利用できます。[https://downloadmirror.intel.com/646992/CLI-Intel-MAS-1.10-User-Guide-Public-342245-011US.pdf PDF のユーザガイド]があります。<br />
<br />
ファームウェアの状態をチェックすると例えば以下のように表示されます:<br />
<br />
{{hc|# intelmas show -intelssd 0|<br />
DevicePath : /dev/nvme0n1<br />
DeviceStatus : Healthy<br />
Firmware : 002C<br />
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.<br />
}}<br />
<br />
システム上に1つしか SSD が存在しない場合、{{ic|-intelssd 0}} は省略できます。2番目の SSD は {{ic|-intelssd 1}} となります。<br />
<br />
アップデートが利用できる場合は、{{ic|intelmas load -intelssd 0}} を実行することでアップデートできます。上記の PDF ユーザガイドでは、この手順は Linux で2回 (間に電源の切断と再投入を挟んで) 行う必要があると書かれています。すべてのデバイス用の最新のファームウェアは、MAS Tool 自体の一部として配布されており、別途ダウンロードする必要はありません。<br />
<br />
=== Kingston ===<br />
<br />
Sandforce ベースのドライバ向けに KFU ツールが利用できます ({{AUR|kingston_fw_updater}})。<br />
<br />
===Mushkin===<br />
<br />
マイナーな Mushkin ブランドのソリッドステートドライブも Sandforce コントローラーを使っており、ファームウェアをアップデートする Linux ユーティリティ (Kingston のものとほとんど同じ) が存在します。<br />
<br />
=== OCZ ===<br />
<br />
OCZ は Linux 用の [https://www.ocz.com/us/download/clout Command Line Online Update Tool (CLOUT)] を用意しています。{{AUR|ocz-ssd-utility}}, {{AUR|ocztoolbox}}, {{AUR|oczclout}} パッケージでインストールすることができます。<br />
<br />
=== Samsung ===<br />
<br />
Samsung は Magician ソフトウェア以外の方法によるアップデートを"サポートしない"としていますが、不可能ではありません。Magician ソフトウェアは、ファームウェアのアップデートを含むブータブルな USB ドライブを作成することはできますが、Samsung はもはやコンシューマ SSD 向けのソフトウェアを提供していません。また、Samsung は 、ファームウェアをアップデートできる作成済みの[https://www.samsung.com/semiconductor/minisite/ssd/download/tools.html ブータブルな ISO イメージ]も提供しています。他のオプションは、{{AUR|samsung_magician-consumer-ssd}} によって提供されている、Samsung の ''magician'' ユーティリティを使うことです。Magician は Samsung ブランドの SSD のみをサポートしています。OEM (Lenovo など) 向けに Samsung によって製造された SSD はサポートされていません。<br />
<br />
{{Note|Samsung はファームウェアアップデートをわかりやすく提供していません。ファームウェアアップデートに関連するページが4つあり、それぞれで別々の方法が示されています。}}<br />
<br />
(Microsoft Windows で Samsung の "Magician" ソフトウェアを使わずに) Linux で作成したライブ USB スティックからファームウェアアップデートを実行したい場合は、[https://web.archive.org/web/20160322230114/fomori.org/blog/?p=933] を参照してください。注意点として、このブログ記事では Master Boot Record ([[MBR]]) を使ってブート可能な USB ドライブを作成する方法が説明されており、最近のマザーボートでは MBR がサポートされていないことがあります (例えば、[https://www.intel.com/content/www/us/en/support/articles/000057401/intel-nuc.html Intel NUC] はもはや MBR をサポートしていません)。<br />
<br />
==== Linux でのアップデート ====<br />
<br />
SSD のファームウェアは以下に示すように (ブータブルな USB スティックを作らなくても) ネイティブにアップデートできます。まず、[https://www.samsung.com/semiconductor/minisite/ssd/download/tools Samsung downloads ページ]を開き、"Samsung SSD Firmware" セクションへ行き、あなたの SSD 用の最新のファームウェア (ISO イメージであるはずです) をダウンロードしてください。<br />
<br />
{{Note|一部の ISO イメージには、以下で言及されている {{ic|initrd}} Linux イメージが欠落しています。その場合、代わりに [[#古い SSD]] を見てください。}}<br />
<br />
ISO イメージから {{ic|initrd}} Linux イメージを抽出してください:<br />
<br />
$ bsdtar xf ''samsung_ssd_firmware''.iso initrd<br />
<br />
{{ic|root/fumagician/}} を抽出してください。このディレクトリには、ファームウェアのアップデートファイルが含まれています:<br />
<br />
$ bsdtar xf initrd root/fumagician<br />
<br />
最後に、{{ic|root/fumagician/fumagician}} を root 権限で実行し、(ファームウェアが正常にアップデートされたのであれば) システムを[[再起動]]してください。<br />
<br />
再起動後にファームウェアのバージョンが変わっていない場合は、{{ic|root/fumagician/fumagician 2> log}} を実行して、出力されたログファイルからエラーを探してください。例えば、ログに 'unzip is not available' という記述がある場合は、unzip をインストールするか、initrd から抽出してください。<br />
<br />
===== 古い SSD =====<br />
<br />
SSD ファームウェアの ISO イメージのいくつかには、{{ic|initrd}} Linux イメージではなく FreeDOS イメージが含まれています。ゆえに、SSD ファームウェアのアップデートに必要なステップは上記とは異なります。以下の表は、そのような SSD (とそれに関連するパス) のリストです:<br />
<br />
{| class="wikitable"<br />
! SSD モデル !! FreeDOS イメージパス !! ファームウェアパッケージパス<br />
|-<br />
| 470, 830 || {{ic|BTDSK.IMG}} || {{ic|SSR/}}<br />
|-<br />
| 840 || {{ic|isolinux/btdsk.img}} || rowspan="2" | {{ic|samsung/DSRD/}}<br />
|-<br />
| 840 EVO (mSATA), Pro || {{ic|ISOLINUX/BTDSK.IMG}}<br />
|}<br />
<br />
まず、ISO イメージから FreeDOS イメージを抽出してください:<br />
<br />
$ bsdtar xf ''samsung_ssd_firmware''.iso ''freedos_image_path''<br />
<br />
FreeDOS イメージを {{ic|/mnt/}} にマウントしてください:<br />
<br />
# mount ''freedos_image_path'' /mnt<br />
<br />
Magician SSD 管理ユーティリティから ''Disk Number'' にある SSD のディスク番号を入手してください:<br />
<br />
# magician --list<br />
<br />
ファームウェアパッケージのパスを指定し、指定したディスクに対して SSD ファームウェアをアップデートしてください:<br />
<br />
# magician --disk ''disk_num'' --firmware-update --fwpackage-path /mnt/''firmware_package_path''<br />
<br />
最後に、(root 権限で実行した) {{ic|magician --list}} の出力から ''Firmware'' にあるバージョンを確認し、ファームウェアが正常にアップデートできたか検証してください。ファームウェアが正常にアップデートされたのであれば、システムを再起動してください。<br />
<br />
=== SanDisk ===<br />
<br />
SanDisk は、SanDisk SSD Toolkit でサポートされていないオペレーティングシステムにおいて SSD のファームウェアアップデートをするための ISO ファームウェアイメージを作成しています。<br />
<br />
適切な ''SSD モデル'' '''だけでなく'''、適切な SSD ''容量'' (例: 60 GB '''または''' 256GB) も合わせて、ファームウェアを選択しなければなりません。ISO ファームウェアイメージを焼いたあと、PC を再起動し、新しく作成した CD/DVD ブートディスクを起動してください (USB スティックでも動作するかもしれません)。<br />
<br />
ISO イメージには、Linux カーネルと initrd が含まれています。それらを {{ic|/boot}} パーティションに抽出し、[[GRUB]] や [[Syslinux]] でそれらを起動して、ファームウェアをアップデートしてください。<br />
<br />
参照:<br />
<br />
* SanDisk Extreme SSD [https://forums.sandisk.com/t/sandisk-extreme-ssd-firmware-download-for-mac-and-linux-and-pc/74022 手動ファームウェアアップデート バージョン R211]<br />
* SanDisk Ultra SSD [https://forums.sandisk.com/t/sandisk-ultra-ssd-firmware-download-for-mac-and-linux-and-pc/74277 手動ファームウェアアップデート バージョン 365A13F0]<br />
* SanDisk Ultra+ SSD [https://forums.sandisk.com/t/sandisk-ultra-ssd-manual-firmware-update-version-x2316rl/74263 手動ファームウェアアップデート バージョン X2316RL] - "H2" モデルと "HP" モデルのうちどちらが使用されているかを確認するには、{{ic|smartctl -i dev/disk/by-id/*SanDisk!(*part*)}} を root として実行してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ SSD に Arch をインストールすることについての Reddit における討論]<br />
* [https://lore.kernel.org/linux-btrfs/20120830215008.GB2879@localhost.localdomain/ Re: Varying Leafsize and Nodesize in Btrfs]<br />
* [https://lore.kernel.org/linux-btrfs/5052700D.4020003@gmail.com/ Re: SSD alignment and Btrfs sector size]<br />
* [https://forums.anandtech.com/threads/erase-block-alignment-misinformation.2266113/ Erase Block (Alignment) Misinformation?]<br />
* [https://superuser.com/questions/492084/is-alignment-to-erase-block-size-needed-for-modern-ssds Is alignment to erase block size needed for modern SSD's?]<br />
* [https://lore.kernel.org/linux-btrfs/jgui4j$th5$1@dough.gmane.org/ Btrfs support for efficient SSD operation (data blocks alignment)]<br />
<br />
{{TranslationStatus|Solid state drive|2024-03-22|802360}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%92%B0%E5%A2%83%E3%81%AE%E6%AF%94%E8%BC%83&diff=36608
デスクトップ環境の比較
2024-03-22T00:42:37Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:デスクトップ環境]]<br />
[[Category:ソフトウェア比較]]<br />
[[en:Comparison of desktop environments]]<br />
[[es:Comparison of desktop environments]]<br />
[[pt:Comparison of desktop environments]]<br />
[[ru:Comparison of desktop environments]]<br />
[[zh-hans:Comparison of desktop environments]]<br />
メインの記事については、[[デスクトップ環境]] を参照してください。<br />
<br />
[[Wikipedia:Comparison of X Window System desktop environments]] も参照してください。<br />
<br />
{| class="wikitable sortable" style="text-align:center;"<br />
! デスクトップ環境 !! ウィジェットツールキット !! ウィンドウマネージャ !! タスクバー !! ターミナルエミュレータ !! ファイルマネージャ !! 電卓 !! テキストエディタ !! イメージビューア !! メディアプレイヤ !! ドキュメントビューア !! ウェブブラウザ !! ディスプレイマネージャ !! Wayland サポート<br />
|-<br />
! [[Budgie]]<br />
| {{Pkg|gtk3}} || {{Pkg|budgie-desktop}} || {{Pkg|budgie-desktop}} || {{Pkg|gnome-terminal}} || {{Pkg|nautilus}} || {{Pkg|gnome-calculator}} || {{Pkg|gedit}} || {{Pkg|eog}} || {{Pkg|totem}} || {{Pkg|evince}} || {{Pkg|epiphany}} || {{Pkg|gdm}}<br />
|-<br />
! [[Cinnamon]]<br />
| {{Pkg|gtk3}} || {{Pkg|muffin}} || {{Pkg|cinnamon}} || {{Pkg|gnome-terminal}} || {{Pkg|nemo}} || {{Pkg|gnome-calculator}} || {{Pkg|xed}} || {{AUR|xviewer}} || {{AUR|xplayer}} || {{pkg|xreader}} || [[Firefox]] || {{Pkg|lightdm-gtk-greeter}} || [https://www.linuxmint.com/rel_virginia_whatsnew.php 実験的]<br />
|-<br />
! [[Deepin Desktop Environment|Deepin]]<br />
| {{Pkg|gtk3}} {{Pkg|qt5-base}} || {{Pkg|deepin-kwin}} || {{Pkg|deepin-dock}} || {{Pkg|deepin-terminal}} || {{Pkg|deepin-file-manager}} || {{Pkg|deepin-calculator}} || {{Pkg|deepin-editor}} || {{Pkg|deepin-image-viewer}} || {{Pkg|deepin-movie}} || {{Pkg|evince}} || [[Chromium]] || {{Pkg|deepin-session-ui}}<br />
|-<br />
! [[Equinox Desktop Environment|EDE]]<br />
| {{Pkg|fltk}} || {{Pkg|pekwm}} || {{AUR|ede}} || {{Pkg|xterm}} || {{Pkg|pcmanfm}} || {{AUR|zalc}} || {{AUR|fltk-editor}} || {{AUR|ede}} || {{AUR|flmusic}} || {{AUR|flaxpdf-git}} || {{Pkg|dillo}} || {{Pkg|xorg-xdm}}<br />
|-<br />
! [[Enlightenment]]<br />
| {{Pkg|efl}} || {{Pkg|enlightenment}} || {{Pkg|enlightenment}} || {{Pkg|terminology}} || {{Pkg|enlightenment}} || equate || {{Pkg|ecrire}} || {{Pkg|ephoto}} || {{Pkg|rage}} || eevee || {{Pkg|links}} || {{Pkg|xorg-xdm}} || 実験的<br />
|-<br />
! [[GNOME]]<br />
| {{Pkg|gtk4}} {{Pkg|libadwaita}} || {{Pkg|mutter}} || {{Pkg|gnome-shell}} || {{Pkg|gnome-console}} || {{Pkg|nautilus}} || {{Pkg|gnome-calculator}} || {{Pkg|gnome-text-editor}} || {{Pkg|eog}} || {{Pkg|totem}} || {{Pkg|evince}} || {{Pkg|epiphany}} || {{Pkg|gdm}} || Yes<br />
|-<br />
! [[GNOME Flashback]]<br />
| {{Pkg|gtk3}} || {{Pkg|metacity}} || {{Pkg|gnome-panel}} || {{Pkg|gnome-terminal}} || {{Pkg|nautilus}} || {{Pkg|gnome-calculator}} || {{Pkg|gedit}} || {{Pkg|eog}} || {{Pkg|totem}} || {{Pkg|evince}} || {{Pkg|epiphany}} || {{Pkg|gdm}}<br />
|-<br />
! [[KDE Plasma]]<br />
| {{Pkg|qt5-base}} || {{Pkg|kwin}} || {{Pkg|plasma-desktop}} || {{Pkg|konsole}} || {{Pkg|dolphin}} || {{Pkg|kcalc}} || {{Pkg|kate}} (''kwrite'' も含まれています) || {{Pkg|gwenview}} || {{Pkg|dragon}} || {{Pkg|okular}} || {{Pkg|falkon}} 或いは {{Pkg|konqueror}} || {{Pkg|sddm}} || Yes<br />
|-<br />
! [[Liri]]<br />
| {{Pkg|qt5-base}} || {{AUR|greenisland}} || {{AUR|liri-shell-git}} || {{Pkg|liri-terminal}} || {{Pkg|liri-files}} || {{Pkg|liri-calculator}} || {{Pkg|liri-text}} || {{AUR|eyesight}}{{Broken package link|package not found}} || liri-player || {{AUR|qpdfview}} || {{AUR|liri-browser-git}} || {{Pkg|sddm}}<br />
|-<br />
! [[LXDE]] GTK 2<br />
| {{Pkg|gtk2}} || [[Openbox]] || {{Pkg|lxpanel}} || {{AUR|lxterminal-gtk2}} || {{Pkg|pcmanfm}} || {{AUR|galculator-gtk2}} || {{Pkg|leafpad}} || {{Pkg|gpicview}} || {{Pkg|lxmusic}} || {{Pkg|atril}} || {{AUR|midori}} || {{Pkg|lxdm}}<br />
|-<br />
! [[LXDE]] GTK 3<br />
| {{Pkg|gtk3}} || [[Openbox]] || {{Pkg|lxpanel-gtk3}} || {{Pkg|lxterminal}} || {{Pkg|pcmanfm-gtk3}} || {{Pkg|galculator}} || {{Pkg|l3afpad}} || {{Pkg|gpicview}} || {{Pkg|lxmusic}} || {{Pkg|atril}} || {{AUR|midori}} || {{Pkg|lxdm-gtk3}}<br />
|-<br />
! [[LXQt]]<br />
| {{Pkg|qt5-base}} || [[Openbox]] || {{Pkg|lxqt-panel}} || {{Pkg|qterminal}} || {{Pkg|pcmanfm-qt}} || {{Pkg|speedcrunch}} || {{Pkg|featherpad}} || {{Pkg|lximage-qt}} || {{Pkg|smplayer}} || {{AUR|qpdfview}} || {{Pkg|falkon}} || {{Pkg|sddm}} || [https://github.com/lxqt/lxqt/wiki/TODO-for-Wayland 部分的]<br />
|-<br />
! [[MATE]]<br />
| {{Pkg|gtk3}} || {{Pkg|marco}} || {{Pkg|mate-panel}} || {{Pkg|mate-terminal}} || {{Pkg|caja}} || {{Pkg|mate-calc}} || {{Pkg|pluma}} || {{Pkg|eom}} || {{Pkg|parole}} || {{Pkg|atril}} || {{AUR|midori}} || {{Pkg|lightdm-gtk-greeter}} || [https://wiki.mate-desktop.org/developers-corner/wayland-meson/ 部分的]<br />
|-<br />
! [[Pantheon]]<br />
| {{Pkg|gtk3}} || {{Pkg|gala}} || {{Pkg|plank}} {{Pkg|wingpanel}} || {{Pkg|pantheon-terminal}} || {{Pkg|pantheon-files}} || {{Pkg|pantheon-calculator}} || {{Pkg|pantheon-code}} || {{Pkg|pantheon-photos}} || {{Pkg|pantheon-videos}} || {{Pkg|evince}} || {{Pkg|epiphany}} ||<br />
{{Pkg|lightdm-pantheon-greeter}}<br />
|-<br />
! [[Sugar]]<br />
| {{Pkg|gtk3}} || {{Pkg|metacity}} || {{Pkg|sugar}} || {{Pkg|sugar-activity-terminal}} || {{Pkg|sugar}} || {{Pkg|sugar-activity-calculate}} || {{Pkg|sugar-activity-write}} || {{Pkg|sugar-activity-imageviewer}} || {{Pkg|sugar-activity-jukebox}} || {{Pkg|sugar-activity-read}} || {{Pkg|sugar-activity-browse}} || {{Pkg|lightdm-gtk-greeter}}<br />
|-<br />
! [[theShell]]<br />
| {{Pkg|qt5-base}} || {{Pkg|kwin}} || {{AUR|theshell}} || {{AUR|theterminal}} || {{AUR|thefile}} || {{AUR|thecalculator}} || {{Pkg|kate}} (''kwrite'' も含まれています) || {{Pkg|gwenview}} || {{AUR|themedia}} || {{Pkg|okular}} || {{Pkg|konqueror}} || {{AUR|lightdm-webkit-theme-contemporary}}<br />
|-<br />
! [[Trinity]]<br />
| TQt || TWin || Kicker || Konsole || Konqueror || KCalc || Kwrite Kate || Kuickshow || Kaffeine || KPDF || Konqueror || TDM<br />
|-<br />
! [[Xfce]]<br />
| {{Pkg|gtk3}} || {{Pkg|xfwm4}} || {{Pkg|xfce4-panel}} || {{Pkg|xfce4-terminal}} || {{Pkg|thunar}} || {{Pkg|galculator}} || {{Pkg|mousepad}} || {{Pkg|ristretto}} || {{Pkg|parole}} || {{Pkg|atril}} || {{AUR|midori}} || {{Pkg|lightdm-gtk-greeter}} || [https://wiki.xfce.org/releng/wayland_roadmap No]<br />
|-<br />
|}<br />
<br />
{{TranslationStatus|Comparison of desktop environments|2024-03-22|803337}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=NVIDIA/%E3%83%92%E3%83%B3%E3%83%88%E3%81%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF&diff=36607
NVIDIA/ヒントとテクニック
2024-03-22T00:39:40Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:グラフィック]]<br />
[[Category:X サーバー]]<br />
[[en:NVIDIA/Tips and tricks]]<br />
[[ru:NVIDIA/Tips and tricks]]<br />
メインの記事は [[NVIDIA]] です。<br />
<br />
== ターミナルの解像度を修正する ==<br />
<br />
nouveau からドライバーを変えた場合、起動時のターミナルが低解像度で表示されるようになることがあります。<br />
<br />
GRUB を使用している場合、[[GRUB/ヒントとテクニック#フレームバッファの解像度を設定する]]を見てください。<br />
<br />
[[systemd-boot]] を使用している場合、{{ic|''esp''/EFI/loader/loader.conf}} 内で {{ic|console-mode}} を設定してください。詳しくは [[systemd-boot#ローダー設定]] をご覧ください。[https://forums.fedoraforum.org/showthread.php?t=306271] [https://web.archive.org/web/20170405115954/https://www.reddit.com/r/archlinux/comments/4gwukx/nvidia_drivers_and_high_resolution_tty_possible/]<br />
<br />
[[rEFInd]] を使用している場合、{{ic|''esp''/EFI/refind/refind.conf}} と {{ic|/etc/refind.d/refind.conf}} に以下を追加してください(後者のファイルは任意ですが、両方に追加することを推奨します): [https://www.reddit.com/r/archlinux/comments/86lqc5/tty_resolution_nvidia_psaish/]<br />
<br />
use_graphics_for linux<br />
<br />
ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。<br />
<br />
{{Tip|上記の方法でターミナルの解像度を修正できない場合、UEFI の設定で Legacy BIOS モード (しばしば、Compatibility Support Module、CSM、Legacy Boot と呼ばれます) を完全に無効化する必要があるかもしれません。無効化する前に、すべてのデバイスが UEFI ブートを使用するように設定されていることを確認してください。}}<br />
<br />
== TV 出力を使う ==<br />
<br />
[[Wikibooks:NVIDIA/TV-OUT]] を見てください。<br />
<br />
== X で TV (DFP) を唯一のディスプレイとして使う ==<br />
<br />
モニターが自動的に検出されない場合、X サーバーは CRT-0 にフォールバックします。これは、DVI 接続の TV をメインディスプレイとして使用していて TV がオフまたは切断されているときに X が起動すると問題になります。<br />
<br />
強制的に NVIDIA が DFP を使用するようにするには、EDID のコピーをファイルシステムのどこかに保存して、X がTV/DFP から EDID を読み込まずにそのファイルをパースできるようにします。<br />
<br />
EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し (対応するエントリは "GPU-0" などのような名前であるはずです)、{{ic|DFP}} セクションをクリックして ({{ic|DFP-0}} などのような名前です)、{{ic|Acquire Edid}} ボタンをクリックしてファイルをどこかに保存してください (例: {{ic|/etc/X11/dfp0.edid}})。<br />
<br />
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します:<br />
$ startx -- -logverbose 6<br />
X サーバーの初期化が完了したら、サーバーを閉じて {{ic|/var/log/Xorg.0.log}} にログファイルがあるか確認してください。nvidia-xconfig を使って EDID ブロックを抽出できます:<br />
$ nvidia-xconfig --extract-edids-from-file=/var/log/Xorg.0.log --extract-edids-output-file=/etc/X11/dfp0.bin<br />
<br />
{{ic|xorg.conf}} を編集して {{ic|Device}} セクションに以下を追加:<br />
Option "ConnectedMonitor" "DFP"<br />
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin"<br />
{{ic|ConnectedMonitor}} オプションはドライバーに強制的に DFP を認識させます。{{ic|CustomEDID}} にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。<br />
<br />
ブート時に自動的にディスプレイマネージャを起動して適切な X ディスプレイが設定されてから TV の電源を入れることができます。<br />
<br />
上記の変更でうまくいかない場合、{{ic|xorg.conf}} の中の {{ic|Device}} セクションで {{ic|Option "ConnectedMonitor" "DFP"}} を削除して以下の行を追加してみてください:<br />
Option "ModeValidation" "NoDFPNativeResolutionCheck"<br />
Option "ConnectedMonitor" "DFP-0"<br />
<br />
{{ic|NoDFPNativeResolutionCheck}} を設定することで NVIDIA はネイティブ解像度に適合しないモードも無効化しなくなります。<br />
<br />
== ヘッドレス (モニターなし) 解像度 ==<br />
<br />
ヘッドレスモードでは解像度は VNC や Steam Link で利用される 640x480 に落ちます。より高い解像度(例えば、1920x1080)で開始するには、{{ic|xorg.conf}} 内の {{ic|Screen}} サブセクションの下にある {{ic|Virtual}} エントリ で指定します:<br />
<br />
Section "Screen"<br />
[...]<br />
SubSection "Display"<br />
Depth 24<br />
Virtual 1920 1080<br />
EndSubSection<br />
EndSection<br />
<br />
{{Tip|ヘッドレスモードは扱いづらく、エラーが発生しがちかもしれません。例えば、ヘッドレスモードではデスクトップ環境や {{Pkg|nvidia-utils}} は解像度を変更するためのグラフィカルな手段を提供しません。解像度の設定を容易にするためには、ポートにモニターが接続されているように見せかける、ダミーの DP や HDMI アダプターを使うことができます。そうすれば、VNC や Steam Link のようなリモートセッションを使って、解像度を普通に変更できます。}}<br />
<br />
== 電源を確認 ==<br />
<br />
NVIDIA の X.org ドライバーを使って GPU の現在の電源を検出することもできます。現在の電源を表示するには、読み取り専用パラメータの 'GPUPowerSource' をチェックしてください (0 - AC, 1 - バッテリー):<br />
<br />
{{hc|$ nvidia-settings -q GPUPowerSource -t|1}}<br />
<br />
== ACPI イベントを Listen する ==<br />
<br />
NVIDIA ドライバーは自動的に [[acpid]] デーモンに接続して、バッテリー電源やドッキング、ホットキーなどの ACPI イベントを listen します。接続が失敗した場合、X.org は以下のような警告を出力します:<br />
<br />
{{hc|~/.local/share/xorg/Xorg.0.log|<br />
NVIDIA(0): ACPI: failed to connect to the ACPI event daemon; the daemon<br />
NVIDIA(0): may not be running or the "AcpidSocketPath" X<br />
NVIDIA(0): configuration option may not be set correctly. When the<br />
NVIDIA(0): ACPI event daemon is available, the NVIDIA X driver will<br />
NVIDIA(0): try to use it to receive ACPI event notifications. For<br />
NVIDIA(0): details, please see the "ConnectToAcpid" and<br />
NVIDIA(0): "AcpidSocketPath" X configuration options in Appendix B: X<br />
NVIDIA(0): Config Options in the README.<br />
}}<br />
<br />
上記の警告は完全に無害ですが、{{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}} で {{ic|ConnectToAcpid}} オプションを無効にすることでメッセージを消すことができます:<br />
<br />
Section "Device"<br />
...<br />
Driver "nvidia"<br />
Option "ConnectToAcpid" "0"<br />
...<br />
EndSection<br />
<br />
ノートパソコンを使っている場合、代わりに [[acpid]] デーモンをインストールして有効化すると良いかもしれません。<br />
<br />
== GPU の温度をシェルに表示する ==<br />
<br />
GPU の温度を確認する方法は3つあります。''nvidia-settings'' は X を使用する必要があります。X を使っていない場合は ''nvidia-smi'' や ''nvclock'' による方法を使って下さい。また、''nvclock'' は GeForce 200 シリーズのカードや Zotac IONITX の 8800GS などの内蔵 GPU など新しい NVIDIA カードでは機能しません。<br />
<br />
=== nvidia-settings ===<br />
<br />
GPU の温度をシェルに表示するには、以下のように ''nvidia-settings'' を使って下さい:<br />
<br />
{{hc|$ nvidia-settings -q gpucoretemp|<br />
Attribute 'GPUCoreTemp' (hostname:0[gpu:0]): 49.<br />
'GPUCoreTemp' is an integer attribute.<br />
'GPUCoreTemp' is a read-only attribute.<br />
'GPUCoreTemp' can use the following target types: GPU.<br />
}}<br />
<br />
上記の場合、ボードの GPU 温度は 49 °C になります。<br />
<br />
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを表示したいときは:<br />
<br />
{{hc|$ nvidia-settings -q gpucoretemp -t|49}}<br />
<br />
=== nvidia-smi ===<br />
<br />
X を全く使わず (例: Wayland を実行している場合やヘッドレスサーバの場合) GPU から直接温度を読み込むことができる ''nvidia-smi'' を使います。<br />
<br />
GPU の温度をシェルに表示するには、''nvidia-smi'' を使って下さい:<br />
<br />
{{hc|$ nvidia-smi|<nowiki><br />
Wed Feb 28 14:27:35 2024<br />
+-----------------------------------------------------------------------------------------+<br />
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |<br />
|-----------------------------------------+------------------------+----------------------+<br />
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |<br />
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |<br />
| | | MIG M. |<br />
|=========================================+========================+======================|<br />
| 0 NVIDIA GeForce GTX 1660 Ti Off | 00000000:01:00.0 On | N/A |<br />
| 0% 49C P8 9W / 120W | 138MiB / 6144MiB | 2% Default |<br />
| | | N/A |<br />
+-----------------------------------------+------------------------+----------------------+<br />
<br />
+-----------------------------------------------------------------------------------------+<br />
| Processes: |<br />
| GPU GI CI PID Type Process name GPU Memory |<br />
| ID ID Usage |<br />
|=========================================================================================|<br />
| 0 N/A N/A 223179 G weston 120MiB |<br />
+-----------------------------------------------------------------------------------------+<br />
</nowiki>}}<br />
<br />
温度だけ見るには:<br />
<br />
{{hc|$ nvidia-smi -q -d TEMPERATURE|2=<br />
==============NVSMI LOG==============<br />
<br />
Timestamp : Wed Feb 28 14:27:35 2024<br />
Driver Version : 550.54.14<br />
CUDA Version : 12.4<br />
<br />
Attached GPUs : 1<br />
GPU 00000000:01:00.0<br />
Temperature<br />
GPU Current Temp : 49 C<br />
GPU T.Limit Temp : N/A<br />
GPU Shutdown Temp : 95 C<br />
GPU Slowdown Temp : 92 C<br />
GPU Max Operating Temp : 90 C<br />
GPU Target Temperature : 83 C<br />
Memory Current Temp : N/A<br />
Memory Max Operating Temp : N/A<br />
}}<br />
<br />
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを取得したいときは:<br />
<br />
{{hc|1=$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits|2=49}}<br />
<br />
=== nvclock ===<br />
<br />
{{AUR|nvclock}} パッケージを[[インストール]]してください。<br />
<br />
{{Note|''nvclock'' は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。}}<br />
<br />
たまに ''nvclock'' と ''nvidia-settings''/''nv-control'' が報告する温度が食い違うことがあります。''nvclock'' の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、''nvclock'' の値のほうが正確なようです。<br />
<br />
== オーバークロックと冷却 ==<br />
<br />
=== オーバークロックを有効化する ===<br />
<br />
{{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}}<br />
<br />
{{Note|<br />
* rootless モードで Xorg サーバを実行している場合、オーバークロックの設定は適用できません。[[Xorg#root として Xorg を実行|Xorg を root として実行]]することを検討してください。<br />
* DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。}}<br />
<br />
オーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:<br />
<br />
Option "Coolbits" "''値''"<br />
<br />
{{Tip| ''Coolbits'' オプションは、Xorg の設定ファイルを操作する ''nvidia-xconfig'' を使って簡単に設定できます: {{bc|1=# nvidia-xconfig --cool-bits=''value''}}}}<br />
<br />
''Coolbits'' の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです:<br />
<br />
* {{ic|1}} (ビット0) - ''nvidia-settings'' の ''Clock Frequencies'' ページで古い(Fermi以前)コアをオーバークロックできるようにします。<br />
* {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」<br />
* {{ic|4}} (ビット2) - ''nvidia-settings'' の ''Thermal Monitor'' ページで GPU ファンの速度を手動設定できるようにします。<br />
* {{ic|8}} (ビット3) - ''nvidia-settings'' の ''PowerMizer'' ページでオーバークロック出来るようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 337.12 から利用可能です。[https://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item]<br />
* {{ic|16}} (ビット4) - ''nvidia-settings'' の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[https://www.phoronix.com/scan.php?page=news_item&px=MTg0MDI]<br />
<br />
複数の機能を有効化するには ''Coolbits'' の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は {{ic|Option "Coolbits" "24"}} をセットします。<br />
<br />
''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/xconfigoptions.html#Coolbits ここ]にあります。<br />
<br />
{{Note| 別の手段としては DOS(推奨) 内から、あるいは [https://www.techpowerup.com/download/nvidia-nvflash/ nvflash] と [https://www.guru3d.com/files-details/nvidia-bios-editor-download-nibitor.html NiBiTor 6.0] を Win32 環境内で使って、GPU BIOS を編集しリフラッシュするというものがあります。BIOS をフラッシュする利点は電圧制限を上げられることだけでなく、一般に Coolbit のようなソフトウェアオーバークロッキングの方法で安定性が向上することです。[https://ivanvojtko.blogspot.sk/2014/03/how-to-overclock-geforce-460gtx-fermi.html Fermi BIOS modification tutorial]}}<br />
<br />
==== 静的な 2D/3D クロックを設定する ====<br />
<br />
{{Out of date|RegistryDwords は Xorg の設定ファイルで無視されるようになりました。}}<br />
<br />
以下の文字列を Device セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):<br />
<br />
Option "RegistryDwords" "PerfLevelSrc=0x2222"<br />
<br />
==== GPU のブーストクロックを下げる ====<br />
<br />
[https://nouveau.freedesktop.org/CodeNames.html#NV170 Ampere (NV170/GA''XXX'')] GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。<br />
<br />
これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。<br />
<br />
ブーストクロックの制限は nvidia-smi を使用して変更できます:<br />
<br />
* サポートされているクロックレートを表示: {{bc|$ nvidia-smi -q -d SUPPORTED_CLOCKS}}<br />
* GPU のブーストクロックの制限を 1695 MHz に設定: {{bc|1=# nvidia-smi --lock-gpu-clocks=0,1695 --mode=1}}<br />
* メモリのブーストクロックの制限を 5001 MHz に設定: {{bc|1=# nvidia-smi --lock-memory-clocks=0,5001}}<br />
<br />
電力効率の最適化をするには、ゲームをプレイしながら nvidia-smi で GPU 使用率を確認してください。VSync はオンにしておく必要があります。ブーストクロックの制限を下げると、GPU 使用率が増加します。遅い GPU では、各フレームを描画するのにより長い時間がかかるからです。GPU 使用率が 100% になり、かつ、カクつきが発生しない程度にまでクロックを下げれば、効率は最大になります。このとき、各フレームはリフレッシュレートを維持するのにちょうど十分なほど高速に描画できていることになります。<br />
<br />
例として、RTX 3090 Ti でデフォルトから上記の設定に変更した場合、Hitman 3 を 4K 60 FPS でプレイしたところ、電力消費量が 30% 減少し、温度は 75 度から 63 度に、ファンの速度は 73% から 57% に低下しました。<br />
<br />
==== オーバークロックの設定を保存する ====<br />
<br />
通常、''nvidia-settings'' インターフェイスで設定したクロックと電圧のオフセットは保存されず、再起動すると消えてしまいます。幸い、プロプライエタリドライバにおいてオーバークロック用のインターフェイスを提供し、ユーザのオーバークロック設定を保存することが可能で、起動時に自動的に設定を適用するツールがあります。以下にその一部を挙げます:<br />
<br />
* {{AUR|gwe}} - グラフィカル。デスクトップセッションの開始時に設定を適用します。<br />
* {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。<br />
* {{AUR|nvoc}} - テキストベース。プロファイルは {{ic|/etc/nvoc.d/}} 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。<br />
<br />
あるいは、{{ic|GPUGraphicsClockOffset}} 属性と {{ic|GPUMemoryTransferRateOffset}} 属性を[[自動起動|起動時に]] ''nvidia-settings'' のコマンドラインインターフェイスでセットすることができます。例えば:<br />
<br />
$ nvidia-settings -a "GPUGraphicsClockOffset[''performance_level'']=''offset''"<br />
$ nvidia-settings -a "GPUMemoryTransferRateOffset[''performance_level'']=''offset''"<br />
<br />
{{ic|''performance_level''}} は最も高いパフォーマンスレベルとなります。マシンに複数の GPU が存在する場合、GPU ID を指定する必要があります: {{ic|1=[gpu:''gpu_id'']GPUGraphicsClockOffset[''performance_level'']=''offset''}}。<br />
<br />
=== カスタムの TDP 制限 ===<br />
<br />
最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。<br />
<br />
例えば、電力制限を 160.30W に設定するには:<br />
<br />
# nvidia-smi -pl 160.30<br />
<br />
(ドライバの永続化なしで)電力制限を起動時に設定するには:<br />
<br />
{{hc|/etc/systemd/system/nvidia-tdp.timer|2=<br />
[Unit]<br />
Description=Set NVIDIA power limit on boot<br />
<br />
[Timer]<br />
OnBootSec=5<br />
<br />
[Install]<br />
WantedBy=timers.target<br />
}}<br />
<br />
{{hc|/etc/systemd/system/nvidia-tdp.service|2=<br />
[Unit]<br />
Description=Set NVIDIA power limit<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/bin/nvidia-smi -pl 160.30<br />
}}<br />
<br />
そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。<br />
<br />
=== ログイン時にファンの速度を設定する ===<br />
<br />
''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#オーバークロックを有効化する|Coolbits]] オプションでビット2を有効化していることを確認してください。<br />
<br />
{{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}}<br />
<br />
Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=''n''"<br />
<br />
GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \<br />
-a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" &<br />
<br />
[[GDM]] や [[KDM]] などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。{{ic|~/.config/autostart/nvidia-fan-speed.desktop}} を作成してその中に以下のテキストを入力してください。{{ic|''n''}} は速度のパーセンテージに置き換えて下さい。<br />
<br />
[Desktop Entry]<br />
Type=Application<br />
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''"<br />
X-GNOME-Autostart-enabled=true<br />
Name=nvidia-fan-speed<br />
<br />
{{Note|ドライバーのバージョン 349.16 から、{{ic|GPUCurrentFanSpeed}} は {{ic|GPUTargetFanSpeed}} に置き換わっています [https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]。}}<br />
<br />
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行:<br />
$ nvidia-xconfig --enable-all-gpus<br />
$ nvidia-xconfig --cool-bits=4<br />
<br />
{{Note| 一部のラップトップ(ThinkPad [https://devtalk.nvidia.com/default/topic/1052110/linux/can-t-control-gtx-1050-ti-max-q-fan-on-thinkpad-x1-extreme-laptop/post/5340658/#5340658 X1 Extreme] や [https://devtalk.nvidia.com/default/topic/1048624/linux/how-to-set-gpu-fan-speed/post/5321818/#5321818 P51/P52] を含む)においては、2つのファンがあるものの、どちらも nvidia によって制御されません。}}<br />
<br />
== カーネルモジュールパラメータ ==<br />
<br />
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは {{ic|modinfo nvidia}} を実行するか {{ic|nv-reg.h}} を見てください。[[Gentoo:NVidia/nvidia-drivers/ja#カーネルモジュールのパラメーター]] も見てください。<br />
<br />
例えば、以下を有効化すると PAT 機能 [https://docs.kernel.org/arch/x86/pat.html] が有効になります。PAT 機能はメモリの割り当て方に影響を及ぼします。PAT は Pentium III に初めて導入され [https://www.kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf]、それよりも新しい CPU の殆どでサポートされています([[wikipedia:Page attribute table#Processors]] を参照)。あなたのシステムでこの機能がサポートされている場合、パフォーマンスが向上するはずです。<br />
<br />
{{hc|/etc/modprobe.d/nvidia.conf|2=<br />
options nvidia NVreg_UsePageAttributeTable=1<br />
}}<br />
<br />
一部のノートパソコンでは NVIDIA の設定を有効化するために以下のオプションを含めなければなりません。さもないと "Setting applications clocks is not supported" などと表示されます。<br />
<br />
{{hc|/etc/modprobe.d/nvidia.conf|2=<br />
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"<br />
}}<br />
<br />
{{Note|[[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[Initramfs を再生成する]]必要があります。}}<br />
<br />
モード設定を有効化し、かつ {{ic|simpledrm}} ドライバとの衝突を防ぐには、以下のオプションをブートファイル内でカーネルコマンドラインに追加する必要があります。注意点として、このパラメータは {{ic|/etc/modprobe.d}} 内のファイル内で設定すると、(たとえそのファイルが initramfs イメージ内に保存されたとしても) 正しく反映されません。{{Bug|73720}} を参照してください。<br />
<br />
nvidia_drm.modeset=1<br />
<br />
== サスペンド後にビデオメモリを保持する ==<br />
<br />
デフォルトでは、システムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く:<br />
:結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。<br />
<br />
"まだ実験段階の" インターフェイスを使用すれば、ビデオメモリ全てを保存できるようになります (ただし、ディスクまたは RAM に十分な領域がある場合)。<br />
<br />
ビデオメモリの内容を全て保存し復元するようにするには、{{ic|nvidia}} カーネルモジュールに対して {{ic|1=NVreg_PreserveVideoMemoryAllocations=1}} [[カーネルモジュールパラメータ]]を設定し、{{ic|nvidia-suspend.service}}、{{ic|nvidia-hibernate.service}}、{{ic|nvidia-resume.service}} を[[有効化]]してください。<br />
<br />
詳細は [https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/powermanagement.html NVIDIA のドキュメント]を参照してください。<br />
<br />
{{Accuracy|[[NVIDIA#早期ロード|KMS を早期開始]]する場合 (つまり、initramfs の段階で {{ic|nvidia}} モジュールがロードされる場合)、initramfs の時点では、以前のビデオメモリの内容が保存されている {{ic|NVreg_TemporaryFilePath}} にアクセスできません。つまり、ハイバーネートを使用する場合は、KMS の早期開始を使用するべきではありません。}}<br />
<br />
{{Note|<br />
* [[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[initramfs を再生成する]]必要があります。<br />
* デフォルトでは、ビデオメモリの内容は ([[tmpfs]] である) {{ic|/tmp}} に保存されます。NVIDIA は、最高のパフォーマンスを得るために[https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/powermanagement.html#PreserveAllVide719f0 他のファイルシステムを使うことを推奨]しています。また、{{ic|/tmp}} のサイズがメモリの容量に対して不十分である場合も、他のファイルシステムを使う必要があります: {{ic|NVreg_TemporaryFilePath}} カーネルモジュールパラメータで別の場所を指定してください (例えば、{{ic|1=NVreg_TemporaryFilePath=/var/tmp}})。<br />
* ビデオメモリの内容を保存するファイルシステムは、無名一時ファイルをサポートし (例えば、ext4 や XFS)、かつビデオメモリの割り当てを保存するのに十分な容量がある必要があります (つまり、すべての NVIDIA GPU のメモリ容量合計の 1.05 倍以上)。コマンド {{ic|1=nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits}} を使えば、システム上のすべての GPU ビデオメモリの容量を一覧表示できます。<br />
* {{ic|nvidia-resume.service}} を有効化するのは任意です。このサービスの機能は {{man|8|systemd-sleep}} フック ({{ic|/usr/lib/systemd/system-sleep/nvidia}}) によって提供され、このフックは自動的に実行されるからです。ただし、[https://gitlab.gnome.org/GNOME/gdm/-/issues/784 GDM を Wayland で使用している場合]は、{{ic|nvidia-resume.service}} を明示的に有効化する必要があります。<br />
}}<br />
<br />
== ドライバーの持続 ==<br />
<br />
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [https://devtalk.nvidia.com/default/topic/1044421/linux/nvidia-persistenced-causing-60-second-reboot-delays]。詳細については NVIDIA ドキュメントの [https://docs.nvidia.com/deploy/driver-persistence/index.html#persistence-daemon Driver Persistence] 章をご覧ください。<br />
<br />
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。<br />
<br />
{{TranslationStatus|NVIDIA/Tips and tricks|2024-03-22|801505}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Intel_graphics&diff=36606
Intel graphics
2024-03-22T00:34:44Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:グラフィック]]<br />
[[Category:X サーバー]]<br />
[[de:Intel]]<br />
[[en:Intel graphics]]<br />
[[es:Intel graphics]]<br />
[[ru:Intel graphics]]<br />
[[zh-hans:Intel graphics]]<br />
{{Related articles start}}<br />
{{Related|Intel GMA 3600}}<br />
{{Related|Xorg}}<br />
{{Related|カーネルモード設定}}<br />
{{Related|Xrandr}}<br />
{{Related|ハイブリッドグラフィック}}<br />
{{Related|Vulkan}}<br />
{{Related|GPGPU}}<br />
{{Related articles end}}<br />
<br />
Intel はオープンソースドライバの提供とサポートを行なっているので、Intel graphics は基本的にプラグアンドプレイです。<br />
<br />
Intel GPU のモデルや関連するチップセットと CPU の包括的なリストは、[[Wikipedia:Intel Graphics Technology]] と [[Gentoo:Intel#Feature support]] を見てください。<br />
<br />
{{Note|<br />
* PowerVR ベースのグラフィックカード ([[Intel GMA 3600|GMA 3600]] シリーズ) はオープンソースドライバではサポートされていません。<br />
* Intel 第 ''N'' 世代 (Gen ''N'') ハードウェアという記述は、CPU の世代を指すものではなく、[[Wikipedia:List of Intel graphics processing units|GPU の世代]]を指しています。これは CPU の世代とは異なります。<br />
* あなたのカードを特定する方法については [[Xorg#ドライバーのインストール]] を参照してください。<br />
}}<br />
<br />
== インストール ==<br />
<br />
* 以下のパッケージのうち1つを[[インストール]]してください。これらは、3D アクセラレーションのための [[wikipedia:ja:ダイレクト・レンダリング・インフラストラクチャ|DRI]] ドライバを提供します。<br />
** {{Pkg|mesa}} は、第3世代ハードウェアおよびそれ以降用のモダンな Gallium3D ドライバを含む最新の [[Mesa]] パッケージです。これを使うことが推奨されます。<br />
** {{Pkg|mesa-amber}} は、第2世代から第11世代までのハードウェア用のクラシックドライバ (Gallium3d でない) です。このドライバは、第7世代及びそれ以前のハードウェアにおいて高いパフォーマンスや安定性をもたらすかもしれませんが、メンテナンスされていません。<br />
* 32ビットアプリケーションのサポートは、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} か {{Pkg|lib32-mesa-amber}} パッケージもインストールしてください。<br />
* [[Xorg]] で 2D アクセラレーションを提供する [[wikipedia:X.Org_Server#DDX|DDX]] ドライバに関しては、以下のうち1つを使ってください:<br />
** {{Pkg|xorg-server}} パッケージに含まれる ''modesetting'' ドライバは、第4世代及びそれ以降のハードウェアにおいて推奨されます。これは、''glamor'' モジュール経由で DRI ドライバを使用してアクセラレーションを提供します。<br />
** {{Pkg|xf86-video-intel}} パッケージは、第2世代から第9世代までのハードウェアにおいてレガシーな Intel DDX ドライバを提供します。一般に、このパッケージを使用することは推奨されません。下記のノートを参照してください。<br />
* [[Vulkan]] サポート (Haswell 及びそれ以降; それより古いチップにおけるサポートは[https://gitlab.freedesktop.org/mesa/mesa/-/issues/8249#note_1758622 不完全であるか存在しません]) については、{{Pkg|vulkan-intel}} パッケージをインストールしてください。32 ビット [[Vulkan]] サポートについては、{{Pkg|lib32-vulkan-intel}} パッケージをインストールしてください。<br />
<br />
[[ハードウェアビデオアクセラレーション]]も見てください。<br />
<br />
{{Note|1=<nowiki/><br />
* 一部のディストリビューション ([https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Debian-Abandon-Intel-DDX Debian & Ubuntu]、[https://www.phoronix.com/scan.php?page=news_item&px=Fedora-Xorg-Intel-DDX-Switch Fedora]、[https://community.kde.org/Plasma/5.9_Errata#Intel_GPUs KDE]) では、{{Pkg|xf86-video-intel}} ドライバのインストールが推奨されておらず、代わりに modesetting ドライバにフォールバックさせることが推奨されています。[https://web.archive.org/web/20160714232204/https://www.reddit.com/r/archlinux/comments/4cojj9/it_is_probably_time_to_ditch_xf86videointel/]、[https://www.phoronix.com/scan.php?page=article&item=intel-modesetting-2017&num=1]、[[Xorg#インストール]]、{{man|4|modesetting}} を参照してください。しかし、modesetting ドライバは次のような問題を引き起こす可能性があります: [https://gitlab.freedesktop.org/xorg/xserver/-/issues/1364 XFCE での画面のチラツキやマウスのジッタリング]、[https://bugs.chromium.org/p/chromium/issues/detail?id=370022 仮想デスクトップの切り替えを行ったときに Chromium でアーティファクトが発生する]、[https://gitlab.freedesktop.org/xorg/xserver/-/issues/928 vsync のジッタリング、mpv での動画のスタッタリング]。<br />
* {{Pkg|xf86-video-intel}} ドライバには、第11世代及びそれ以降のハードウェアに対する適切なサポートがありません。それによって、アクセラレーションが提供されなかったり、レンダリングの問題が発生したりし、その結果として Plasma Desktop がほぼ利用不能な状態になります。[https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/commit/7181c5a41c3f00eaf996caa156523c708a18081e] を参照してください。<br />
* {{Pkg|xf86-video-intel}} がインストールされている場合、グラフィックススタック全体がハードフリーズし、({{ic|Ctrl+Alt+F''n''}} を押して) 他の仮想コンソールに切り替えることすらできなくなり、[[SysRq]] でユーザプロセスを kill することしかできなくなるという問題が2件報告されています [https://bbs.archlinux.org/viewtopic.php?id=263323] [https://github.com/qutebrowser/qutebrowser/issues/4641]。<br />
}}<br />
<br />
== ローディング ==<br />
<br />
Intel カーネルモジュールは、システムの起動時に自動的に正常にロードされるはずです。<br />
<br />
正常にロードされない場合は:<br />
<br />
* Intel は カーネルモード設定を必要とするので、[[カーネルパラメータ]] に {{ic|nomodeset}} を指定して '''いない''' ことを確認してください。<br />
* また、{{ic|/etc/modprobe.d/}} や {{ic|/usr/lib/modprobe.d/}} で modprobe ブラックリストを使って Intel を無効にしていないか確認してください。<br />
<br />
=== 早い段階で KMS を有効にする ===<br />
<br />
[[カーネルモード設定]] (KMS) は、i915 DRM ドライバーを使用するインテルチップセットでサポートされています。KMS は必須であり、デフォルトで有効になっています。<br />
<br />
[[mkinitcpio]] v32 からは、{{ic|kms}} フックがデフォルトで含まれているため、典型的な環境において Early KMS がすでに有効化されているはずです。他の環境については、起動プロセスにおいてできるだけ早く KMS を有効にする方法に関する [[カーネルモード設定#KMS の早期開始]] を参照してください。<br />
<br />
=== GuC/HuC ファームウェアのロードを有効にする ===<br />
<br />
{{Accuracy|Intel のドキュメントに反し、Tiger Lake と Rocket Lake の GPU は実際 {{ic|1=enable_guc=3}} をサポートし、{{ic|1=enable_guc=1}} がデフォルトとなっている場合があります。}}<br />
<br />
第9世代から (Skylake およびそれ以降)、Intel GPU には以下の機能を提供する ''Graphics micro (μ) Controller'' (GuC) が搭載されています [https://01.org/linuxgraphics/downloads/firmware]{{Dead link|2023|04|23|status=403}}:<br />
* 一部のメディアデコード機能を CPU から ''HEVC/H.265 micro (µ) Controller'' (HuC) にオフロードする。[[ハードウェアビデオアクセラレーション]]に {{Pkg|intel-media-driver}} を使用する場合にのみ、適用可能です。第9世代から導入されました。<br />
* GuC をスケジューリング、コンテキスト送信、電源管理に使用する。第12世代、Alder Lake-P (Mobile) で導入されました。<br />
<br />
この機能を使うには、GuC ファームウェアがロードされていなければなりません。HuC のサポートに関して、一部のビデオ機能 (例: SKL 低電力符号化モードにおける CBR レート制御) は HuC ファームウェアもロードされている必要があります [https://github.com/intel/media-driver#known-issues-and-limitations]。GuC と HuC ファームウェアのファイルは両方 {{Pkg|linux-firmware}} によって提供されています。<br />
<br />
GuC の機能は {{ic|1=i915.enable_guc}} [[カーネルパラメータ]] によって制御されます。このパラメータの使用法は次のとおりです。:<br />
<br />
{| class="wikitable"<br />
! enable_guc の値 !! GuC 送信 !! HuC ファームウェアのロード !! デフォルトとなっているプラットフォーム !! サポートされているプラットフォーム<br />
|-<br />
|0 || {{No}} || {{No}} || Tiger Lake、Rocket Lake、Gen12 以前 [https://github.com/torvalds/linux/blob/b3454ce0b2c8a56e760e6baa88ed10278585072b/drivers/gpu/drm/i915/gt/uc/intel_uc.c#L26-L36] || すべて<br />
|-<br />
|1 || {{Yes}} || {{No}} || {{-}} || Alder Lake-P (Mobile) およびそれ以降<br />
|-<br />
|2 || {{No}} || {{Yes}} || Alder Lake-S (Desktop) [https://github.com/torvalds/linux/blob/b3454ce0b2c8a56e760e6baa88ed10278585072b/drivers/gpu/drm/i915/gt/uc/intel_uc.c#L38-L42] [https://lore.kernel.org/all/87ee6wit2r.fsf@intel.com/T/] || Gen9 およびそれ以降<br />
|-<br />
|3 || {{Yes}} || {{Yes}} || Alder Lake-P (Mobile) 及びそれ以降 || Gen 9.5 及びそれ以降 (一部個体ではこちらがより良い)<br />
|}<br />
<br />
GuC 送信や HuC ファームウェアのロードがあなたの GPU ではデフォルトで有効になっていない場合、手動で有効化できます。<br />
<br />
{{Warning|1=GuC / HuC ファームウェアのロードを手動で有効化すると、[https://bugs.freedesktop.org/show_bug.cgi?id=111918 たとえその機能がサポートされていない場合でも]、カーネルに汚染マークが付きます。さらに、GuC/HuC ファームウェアのロードを有効化すると、一部のシステムで問題が発生する可能性があります。(ハイバネートから復帰したあとなどに) フリーズが発生する場合は、無効化してください。}}<br />
<br />
まず、{{Pkg|linux-firmware}} が[[インストール]] されていることを確認してください。<br />
<br />
{{ic|1=i915.enable_guc}} [[カーネルパラメータ]] を設定してください。例えば:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 enable_guc=2<br />
}}<br />
<br />
[[Initramfs を再生成する|Initramfs を再生成]] してください。次回の起動時に [[dmesg]] を使うことで GuC と HuC が両方有効化されていることを確認できます:<br />
<br />
{{hc|# dmesg|2=<br />
[30130.586970] i915 0000:00:02.0: [drm] GuC firmware i915/icl_guc_33.0.0.bin version 33.0 submission:disabled<br />
[30130.586973] i915 0000:00:02.0: [drm] HuC firmware i915/icl_huc_9.0.0.bin version 9.0 authenticated:yes<br />
}}<br />
<br />
あなたのグラフィックアダプタで GuC と HuC がサポートされていない場合、以下が出力されます<br />
<br />
{{hc|# dmesg|2=<br />
[ 0.571339] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - GuC is not supported!<br />
[ 0.571340] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - HuC is not supported!<br />
}}<br />
<br />
あるいは、以下で確認できます:<br />
<br />
# cat /sys/kernel/debug/dri/0/gt/uc/guc_info<br />
# cat /sys/kernel/debug/dri/0/gt/uc/huc_info<br />
<br />
{{Note|1=GuC/HuC が有効化されている場合に {{ic|1=enable_gvt=1}} を設定して [[Intel GVT-g|GVT-g graphics virtualization]] を使用することは、linux 4.20.11 現在ではサポートされていません。システムのジャーナルに出力される通り、i915 モジュールの初期化に失敗します。<br />
<br />
{{hc|# journalctl|<br />
... kernel: [drm:intel_gvt_init [i915]] *ERROR* i915 GVT-g loading failed due to Graphics virtualization is not yet supported with GuC submission<br />
... kernel: i915 0000:00:02.0: [drm:i915_driver_load [i915]] Device initialization failed (-5)<br />
... kernel: i915: probe of 0000:00:02.0 failed with error -5<br />
... kernel: snd_hda_intel 0000:00:1f.3: failed to add i915 component master (-19)<br />
}}<br />
<br />
[https://github.com/intel/gvt-linux/issues/77#issuecomment-707541069] で説明されているように、関連する警告は深刻なものではないことに注意してください:<br />
<br />
{{hc|# journalctl -b |<br />
... kernel: i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x5916_rid_0x02.golden_hw_state failed with error -2<br />
}}<br />
}}<br />
<br />
== Xorg の設定 ==<br />
<br />
たいてい、[[Xorg]] を実行するために設定は特に必要ありません。<br />
<br />
しかし、ドライバのオプションを活用したい場合や、[[Xorg]] が起動しない場合などは、Xorg の設定ファイルを作成することができます。<br />
<br />
=== modesetting ドライバを使う ===<br />
<br />
{{Pkg|xf86-video-intel}} をインストールしたが、DDX ドライバを優先させずに modesetting ドライバを明示的にロードさせたい場合 (DDX ドライバと modesetting ドライバを比較したい場合など) は、以下のような設定ファイルを使用できます:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "modesetting"<br />
EndSection<br />
}}<br />
<br />
=== Intel ドライバを使う ===<br />
<br />
{{Note|以下は {{Pkg|xf86-video-intel}} が必要です。}}<br />
<br />
以下のような Xorg 設定ファイルを作成してください:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "intel"<br />
EndSection<br />
}}<br />
<br />
その他のオプションは {{ic|Driver}} の下の新しい行にユーザが追加します。<br />
オプションの完全なリストは {{man|4|intel}} の man ページを参照してください。<br />
<br />
{{Note|上に挙げたものよりも多くの device セクションを追加する必要があるかもしれません。これは必要なところに表示されます。}}<br />
<br />
==== AccelMethod ====<br />
<br />
設定ファイルを作成する際に、{{ic|Option "AccelMethod"}} を指定する必要がある場合があります。古典的なオプションは、{{ic|UXA}}、{{ic|SNA}} (デフォルト)、{{ic|BLT}} です。<br />
<br />
デフォルトの {{ic|SNA}} で問題が発生した場合。(例: ピクセル化したグラフィック、壊れたテキストなど)、代わりに {{ic|UXA}} を使ってみてください、これは [[#Xorg の設定|Xorg 設定ファイル]] に次の行を追加することで可能です:<br />
<br />
Option "AccelMethod" "uxa"<br />
<br />
{{man|4|intel|CONFIGURATION DETAILS}} の "AccelMethod" オプションをご覧ください。<br />
<br />
==== 最近の GPU で Intel DDX ドライバを使用する ====<br />
<br />
第8世代 (Broadwell) からの Intel GPU では、Iris Mesa ドライバが必要です:<br />
<br />
Option "DRI" "iris"<br />
<br />
==== TearFree、TripleBuffer、SwapbuffersWait を無効化する ====<br />
<br />
コンポジタを使用している場合 (GNOME、KDE Plasma、Xfce などの最近のデスクトップ環境ではデフォルトです)、通常、TearFree、TripleBuffer、SwapbuffersWait を無効化することでパフォーマンスを向上させ、電力消費量を削減することができます。<br />
<br />
Option "TearFree" "false"<br />
Option "TripleBuffer" "false"<br />
Option "SwapbuffersWait" "false"<br />
<br />
== モジュールベースのオプション ==<br />
<br />
{{ic|i915}} カーネルモジュールにより、[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]] を介して設定できます。一部のモジュールオプションは、省電力に影響を与えます。<br />
<br />
次のコマンドを使用して、すべてのオプションのリストと簡単な説明およびデフォルト値を生成できます:<br />
<br />
$ modinfo -p i915<br />
<br />
現在有効になっているオプションを確認するには、<br />
<br />
# systool -m i915 -av<br />
<br />
多くのオプションのデフォルトは-1であるため、チップごとの省電力のデフォルトになります。ただし、[[カーネルモジュール#モジュールオプションを設定する|モジュールオプション]] を使用して、より積極的な省電力を構成することも可能です。<br />
<br />
{{Note|1=Linux 3.18 以降、これらのデフォルトから逸脱すると、カーネルが [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=fc9740cebc3ab7c65f3c5f6ce0caf3e4969013ca tainted] (汚染された) としてマークされます。これは基本的に、チップごとのデフォルト以外のオプションの使用は実験的なものと見なされ、開発者によってサポートされていないことを意味します。}}<br />
<br />
=== フレームバッファー圧縮 (enable_fbc) ===<br />
<br />
フレームバッファ圧縮 (FBC) は、スクリーンのリフレッシュ中の電力消費量とメモリの帯域幅の使用量を削減できる機能です。<br />
<br />
この機能は、ハードウェアによってサポートされている場合、自動的に有効化されます。以下のコマンドを実行することで、この機能が有効化されているかどうか確認できます:<br />
<br />
{{hc|$ modinfo i915 {{!}} grep enable_fbc|<br />
parm: enable_fbc:Enable frame buffer compression for power savings (default: -1 (use per-chip default)) (int)<br />
}}<br />
<br />
parm が {{ic|-1}} に設定されている場合、何もする必要はありません。{{ic|-1}} でない場合、{{ic|1=i915.enable_fbc=1}} を[[カーネルパラメータ]]に追加するか、以下の内容で {{ic|/etc/modprobe.d/i915.conf}} を作成することで、FBC を強制的に有効化できます:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 enable_fbc=1<br />
}}<br />
<br />
{{Note|フレームバッファー圧縮は、Sandy Bridge(第6世代)より前の Intel GPU 世代では信頼できないか、使用できない場合があります。これにより、次のようなメッセージがシステムジャーナルに記録されます:<br />
<br />
kernel: drm: not enough stolen space for compressed buffer, disabling.<br />
<br />
Sandy Bridge 以前の CPU でフレームバッファー圧縮を有効にすると、次のようなエラーメッセージが表示されます。<br />
<br />
{{hc|# dmesg|<br />
[ 2360.475430] [drm] not enough stolen space for compressed buffer (need 4325376 bytes), disabling<br />
[ 2360.475437] [drm] hint: you may be able to increase stolen memory size in the BIOS to avoid this<br />
}}<br />
<br />
解決策は、フレームバッファー圧縮を無効にすることです。これにより、消費電力がいつの間にか増加します(約0.06W)。無効にするには、カーネルラインパラメータに {{ic|1=i915.enable_fbc=0}} を追加します。無効化された圧縮の結果の詳細については、[https://web.archive.org/web/20200228230053/https://kernel.ubuntu.com/~cking/power-benchmarking/background-colour-and-framebuffer-compression/ こちら] を参照してください。}}<br />
<br />
=== Fastboot ===<br />
<br />
{{Note|1=Skylake およびそれ以降[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3d6535cbed4a4b029602ff83efb2adec7cb8d28b]、さらに Bay- と Cherry-Trail (VLV/CHV)[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7360c9f6b857e22a48e545f4e99c79630994e932] では、Linux 5.1 からこのパラメータがデフォルトで有効化されています。[https://kernelnewbies.org/Linux_5.1#Graphics]}}<br />
<br />
Intel Fastboot の目標は、BIOS または [[ブートローダー]] によってセットアップされたフレームバッファーを保持して、 [[Xorg]] が開始されるまでちらつきを回避することです。[https://lists.freedesktop.org/archives/intel-gfx/2012-May/017653.html][https://www.phoronix.com/scan.php?page=news_item&px=MTEwNzc]<br />
<br />
fastboot がデフォルトでないプラットフォーム上で fastboot を有効にするには、{{ic|1=i915.fastboot=1}} を [[カーネルパラメータ]] として設定するか、{{ic|/etc/modprobe.d/i915.conf}} に以下を設定します:<br />
<br />
{{hc|/etc/modprobe.d/i915.conf|2=<br />
options i915 fastboot=1<br />
}}<br />
<br />
=== Intel GVT-g グラフィック仮想化のサポート===<br />
<br />
詳細については [[Intel GVT-g]] を参照してください。<br />
<br />
=== パフォーマンスサポートを有効化する ===<br />
<br />
第6世代から (Sandy Bridge およびそれ以降) Intel GPU は、内部のパフォーマンスデータをドライバに公開するために使用されるパフォーマンスカウンタを提供しています。ドライバとハードウェアレジスタではこのインフラを ''Observation Architecture'' (内部的には "OA") と呼んでいますが [https://www.phoronix.com/scan.php?page=news_item&px=Intel-HSW-Observation-Arch]、Intel のドキュメントではこの機能をより一般的に ''Observability Performance Counters'' を提供するものとしています [https://01.org/sites/default/files/documentation/observability_performance_counters_haswell.pdf] [https://01.org/sites/default/files/documentation/intel-gfx-prm-osrc-skl-vol14-observability.pdf]。<br />
<br />
デフォルトでは、[https://lwn.net/Articles/486306/ CAP_SYS_ADMIN] (root と等価です) や [https://lwn.net/Articles/812719/ CAP_PERFMON] [[ケイパビリティ]]で実行されているプログラムのみが observation architecture を利用できます [https://github.com/torvalds/linux/blob/b14ffae378aa1db993e62b01392e70d1e585fb23/drivers/gpu/drm/i915/i915_perf.c#L267] [https://github.com/torvalds/linux/blob/b14ffae378aa1db993e62b01392e70d1e585fb23/drivers/gpu/drm/i915/i915_perf.c#L3481-L3484]。ほとんどのアプリケーションはこれらのケイパビリティを持たずに実行されるため、以下の警告が出力されます:<br />
<br />
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0<br />
<br />
これらのケイパビリティ (または root) を使わずにパフォーマンスサポートを有効化するには、[[sysctl]] で説明されているように、(上記の警告で示されている) カーネルパラメータを設定してください。<br />
<br />
{{Warning|アプリケーションにパフォーマンスデータへのアクセスを許してしまうなどのリスクが存在するため、{{ic|perf_event_paranoid}} ファミリのオプションには制限的なデフォルトが存在します [https://docs.kernel.org/admin-guide/perf-security.html]。とはいえ、{{ic|dev.i915.perf_stream_paranoid}} は GPU パフォーマンスカウンタへのアクセスにしか影響せず、CPU アーキテクチャ実行コンテキストレジスタなどと比べれば低リスクです。}}<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== スケーリングモードを設定する ===<br />
<br />
フルスクリーンを使うアプリケーションで有用かもしれません:<br />
<br />
$ xrandr --output LVDS1 --set PANEL_FITTING ''param''<br />
<br />
選べる {{ic|''param''}} は:<br />
<br />
* {{ic|center}}: 解像度は定義した通りに固定され、スケーリングは無効になります<br />
* {{ic|full}}: 画面いっぱいまで解像度がスケールします<br />
* {{ic|full_aspect}}: アスペクト比を維持したまま解像度を可能な限り最大までスケールします<br />
<br />
うまく行かない場合は、以下を試してみてください:<br />
<br />
$ xrandr --output LVDS1 --set "scaling mode" ''param''<br />
<br />
{{ic|''param''}} は {{ic|"Full"}}、{{ic|"Center"}}、{{ic|"Full aspect"}} のいずれかです。<br />
<br />
{{Note|1=上記のオプションは外部ディスプレイは現在のところ機能しません (例: VGA, DVI, HDMI, DP) [https://bugs.freedesktop.org/show_bug.cgi?id=90989]。}}<br />
<br />
=== GMA 4500 での H.264 デコードのハードウェアアクセラレーション ===<br />
<br />
{{Pkg|libva-intel-driver}} パッケージは、一部の GMA 4500 シリーズ GPU での MPEG-2 デコードのハードウェアアクセラレーションのみを提供します (H.264 デコードは提供しません)。あなたの GPU も関係しているどうかを確かめるには、そのドライバと {{Pkg|libva-utils}} パッケージの両方をインストールしてください。そして、{{ic|vainfo}} ツールの出力を見て、{{ic|VAProfileH264}} で始まるエントリがどれだけあるかを見てください。<br />
<br />
H.264 デコードのサポートは、枝分かれた g45-h264 ブランチでメンテナンスされており、{{AUR|libva-intel-driver-g45-h264}} パッケージをインストールすることで使用できます。しかし、このサポートは実験的で、開発は放棄されていることに注意してください。GMA 4500 シリーズの GPU 上でこのドライバと共にVA-API を使うことで CPU の負荷を減らすことができますが、動画の再生がアクセラレートされていない状態ほどスムーズに再生できないかもしれません。mplayer を使ったテストでは H.264 でエンコードされた 1080p のビデオを vaapi を使って再生したところ (XV オーバーレイに比べて) CPU の負担は下がりましたが、途切れ途切れの再生になりました。一方 720p はうまく動きました [https://bbs.archlinux.org/viewtopic.php?id=150550]。他の報告も同じようなものでした [https://web.archive.org/web/20160325142959/http://www.emmolution.org/?p=192&cpage=1#comment-12292]。BIOS で割当済みビデオ RAM のサイズを高く設定すると、より質の高いハードウェアデコード再生が可能です。これを行うと、1080p h264 でもうまく行きます [https://lists.libreplanet.org/archive/html/guix-patches/2019-11/msg00652.html]。スムーズな再生 (1080p/720p) は、{{AUR|mpv-git}}、{{AUR|ffmpeg-git}}、{{AUR|libva-intel-driver-g45-h264}} を組み合わせて使うことでもうまく行きます。MPV と Firefox のプラグイン "Send to MPV player"[https://addons.mozilla.org/firefox/addon/send-to-mpv-player/] を用いることで、ハードウェアによりアクセラレートされた YouTube ビデオの再生が可能です。<br />
<br />
=== 報告される OpenGL のバージョンを上書き ===<br />
<br />
{{ic|MESA_GL_VERSION_OVERRIDE}} [[環境変数]]を使うことで、アプリケーションに報告される OpenGL のバージョンを上書きできます。例えば、{{ic|1=MESA_GL_VERSION_OVERRIDE=4.5}} と設定することで OpenGL 4.5 と報告されるようになります。<br />
<br />
{{Note|上記の変数を使って既知の OpenGL バージョンなら、たとえ GPU によってサポートされていないバージョンでも使うこともできます。設定することで、アプリケーションによってクラッシュがなおったり、あるいはクラッシュが増えたりする可能性があります。全てのアプリケーションで同じ変数を使わない方が良いでしょう。}}<br />
<br />
=== モニタリング ===<br />
<br />
* {{App|intel_gpu_top|Intel GPU のための top ライクなタスクモニタ (root 権限が必要)|https://gitlab.freedesktop.org/drm/igt-gpu-tools|{{Pkg|intel-gpu-tools}}}}<br />
* {{App|nvtop|AMD、Intel、NVIDIA のための GPU プロセスモニタリング (現在、Intel GPU に対しては非常に基本的なサポートしかありません)。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}<br />
<br />
=== 明るさとガンマ値の設定 ===<br />
<br />
[[バックライト]] を見てください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== ティアリング ===<br />
<br />
==== Intel ドライバを使う ====<br />
<br />
SNA アクセラレーションメソッドを取っている場合、一部のマシン上でティアリングが発生します。これを修正するには、以下の行を[[#Xorg の設定|設定ファイル]]に追加して {{Pkg|xf86-video-intel}} ドライバの {{ic|TearFree}} オプションを有効化してください:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "intel"<br />
Option "TearFree" "true"<br />
EndSection}}<br />
<br />
詳細は[https://bugs.freedesktop.org/show_bug.cgi?id=37686 元のバグレポート]を見てください。<br />
<br />
{{Note|1=<nowiki/><br />
* このオプションは、{{ic|SwapbuffersWait}} が {{ic|false}} のときに動作しない場合があります。<br />
* このオプションはメモリアロケーションを増加させ、パフォーマンスが低下する場合があります。[https://bugs.freedesktop.org/show_bug.cgi?id=37686#c123]<br />
* このオプションは、vsync のタイミングに厳しいアプリケーション (例えば、[[Wikipedia:Super Meat Boy|Super Meat Boy]]) において問題が発生する場合があります。<br />
* このオプションはUXA アクセラレーションメソッドでは動作しません。SNA でしか使えません。<br />
* Intel UHD 620 または 430 では、{{ic|TearFree}} を動作させるために {{ic|Option "TripleBuffer" "true"}} を追加する必要があります。<br />
}}<br />
<br />
==== modesetting ドライバを使う ====<br />
<br />
最近、TearFree サポートが modesetting ドライバに[https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1006 追加されました] [https://www.phoronix.com/news/xf86-video-modesetting-TearFree][https://www.phoronix.com/news/Modesetting-TearFree-Merged]。2023年11月の時点では、このパッチはまだ安定化されていません。なので、安定化されるまで {{AUR|xorg-server-git}} を使用する必要があります。<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "modesetting"<br />
Option "TearFree" "true"<br />
EndSection}}<br />
<br />
=== 垂直同期 (VSYNC) を無効化する ===<br />
<br />
以下のような場合に便利です:<br />
<br />
* Chromium/Chrome が、GPU のせいでラグくパフォーマンスが悪く、--disable-gpu スイッチを使うとスムーズに動作する場合。<br />
* glxgears テストが期待するほどのパフォーマンスを発揮してくれない場合。<br />
<br />
intel ドライバは垂直同期に [https://www.intel.com/support/graphics/sb/CS-004527.htm Triple Buffering] を使用します。これは、完全なパフォーマンスとティアリングの回避を可能にします。垂直同期をオフにするには (例えば、ベンチマークのために)、以下の {{ic|.drirc}} をホームディレクトリ内に追加してください:<br />
<br />
{{hc|~/.drirc|2=<br />
<device screen="0" driver="dri2"><br />
<application name="Default"><br />
<option name="vblank_mode" value="0"/><br />
</application><br />
</device><br />
}}<br />
<br />
{{Note|このファイルを作成するために {{AUR|driconf}} を使用しないでください。このツールにはバグがあり、間違ったドライバを設定してしまいます。}}<br />
<br />
=== DRI3 の問題 ===<br />
<br />
{{Pkg|xf86-video-intel}} では DIR バージョンのデフォルトは ''DRI3'' です。一部の環境では DRI3 によって問題が発生することがあります [https://bugs.chromium.org/p/chromium/issues/detail?id=370022]。''DRI2'' を使うには[[#Xorg の設定|設定ファイル]]に以下の行を追加してください:<br />
<br />
Option "DRI" "2"<br />
<br />
{{ic|modesetting}} ドライバーでは上記の方法で DRI3 を無効化することはできません。代わりに {{ic|1=LIBGL_DRI3_DISABLE=1}} 環境変数を設定してください。<br />
<br />
=== GTK アプリケーションでフォントや画面の表示がおかしい (サスペンド・復帰後に文字が表示されない) ===<br />
<br />
GTK アプリケーションでフォントの文字が表示されなくなってしまう場合、以下の方法で直る可能性があります。{{ic|/etc/environment}} を[[編集]]して以下の行を追加してください: <br />
<br />
{{hc|/etc/environment|output=<br />
COGL_ATLAS_DEFAULT_BLIT_MODE=framebuffer<br />
}}<br />
<br />
[https://bugs.freedesktop.org/show_bug.cgi?id=88584 FreeDesktop bug 88584] も参照。<br />
<br />
=== 起動中 "Loading modules" するときに画面がブラックアウトする ===<br />
<br />
"late start" KMS を使っているとき "Loading modules" で画面がブラックアウトする場合、initramfs に i915 と intel_agp を加えると解決するかもしれません。[[カーネルモード設定#KMS の早期開始]]を見てください。<br />
<br />
または、次の[[カーネルパラメータ]]を加えるとうまく動くかもしれません: <br />
<br />
video=SVIDEO-1:d<br />
<br />
VGA に出力する必要があるときは次を使ってみて下さい: <br />
<br />
video=VGA-1:1280x800<br />
<br />
=== Intel ドライバで X がフリーズ/クラッシュする ===<br />
<br />
X のクラッシュを伴う問題、GPU のハングアップ、X のフリーズに関する問題は、{{ic|NoAccel}} オプションを使って GPU の使用を無効化することで修復できる場合があります。以下の行を[[#Xorg の設定|設定ファイル]]に追加してください:<br />
<br />
Option "NoAccel" "True"<br />
<br />
あるいは、{{ic|DRI}} オプションを使って 3D アクセラレーションだけを無効化してみてください:<br />
<br />
Option "DRI" "False"<br />
<br />
=== 認識されない解像度を追加する ===<br />
<br />
この問題は、[[Xrandr#検出されない解像度を追加する|Xrandr のページ]] で扱っています。<br />
<br />
=== バックライトを調整できない ===<br />
<br />
サスペンドから復帰したあとにホットキーを使用してスクリーンの輝度を変更できない場合、[[バックライト]]の記事を見てあなたの設定ファイルをチェックしてみてください。<br />
<br />
問題が解消されない場合は、以下の[[カーネルパラメータ]]のうち1つを試してください:<br />
<br />
acpi_osi=Linux<br />
acpi_osi="!Windows 2012"<br />
acpi_osi=<br />
<br />
また、fastboot モード ({{ic|i915.fastboot}} カーネルパラメータ) を使用していないことを確認してください。これは、バックライト制御を破壊することが[https://www.phoronix.com/forums/forum/software/mobile-linux/1066447-arch-linux-users-with-intel-graphics-can-begin-enjoying-a-flicker-free-boot 知られています]。<br />
<br />
=== Chromium や Firefox が壊れる/応答しない ===<br />
<br />
Chromium や Firefox で破損、応答なし、ラグ、低パフォーマンスが発生する場合、以下のような解決策があります。<br />
<br />
* [[#AccelMethod|AccelMethod を "uxa" に設定する]]<br />
* [[#垂直同期 (VSYNC) を無効化する|VSYNC を無効化する]]<br />
* [[#ティアリング|TearFree オプションを有効化する]]<br />
* "DRI" とアクセラレーションのメソッドを無効にする (Intel Iris 第10世代でテスト済み): {{bc|<nowiki><br />
Option "NoAccel" "True"<br />
Option "DRI" "False"<br />
</nowiki>}}<br />
<br />
=== Broadwell/Core-M チップでカーネル 4.0 以上を使っている場合にクラッシュする ===<br />
<br />
X/Wayland がロードされた数秒後、マシンがフリーズして、[[journalctl]] に以下のような Intel Graphics に関連するカーネルのクラッシュログが残ることがあります: <br />
<br />
Jun 16 17:54:03 hostname kernel: BUG: unable to handle kernel NULL pointer dereference at (null)<br />
Jun 16 17:54:03 hostname kernel: IP: [< (null)>] (null)<br />
...<br />
Jun 16 17:54:03 hostname kernel: CPU: 0 PID: 733 Comm: gnome-shell Tainted: G U O 4.0.5-1-ARCH #1<br />
...<br />
Jun 16 17:54:03 hostname kernel: Call Trace:<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa055cc27>] ? i915_gem_object_sync+0xe7/0x190 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0579634>] intel_execlists_submission+0x294/0x4c0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa05539fc>] i915_gem_do_execbuffer.isra.12+0xabc/0x1230 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa055d349>] ? i915_gem_object_set_to_cpu_domain+0xa9/0x1f0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ba2ae>] ? __kmalloc+0x2e/0x2a0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0555471>] i915_gem_execbuffer2+0x141/0x2b0 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa042fcab>] drm_ioctl+0x1db/0x640 [drm]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffffa0555330>] ? i915_gem_execbuffer+0x450/0x450 [i915]<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff8122339b>] ? eventfd_ctx_read+0x16b/0x200<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ebc36>] do_vfs_ioctl+0x2c6/0x4d0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811f6452>] ? __fget+0x72/0xb0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff811ebec1>] SyS_ioctl+0x81/0xa0<br />
Jun 16 17:54:03 hostname kernel: [<ffffffff8157a589>] system_call_fastpath+0x12/0x17<br />
Jun 16 17:54:03 hostname kernel: Code: Bad RIP value.<br />
Jun 16 17:54:03 hostname kernel: RIP [< (null)>] (null)<br />
<br />
この問題は execlist のサポート (カーネル 4.0 からデフォルトに変更されました) を無効化することで解決します。以下の[[カーネルパラメータ]]を追加してください: <br />
<br />
i915.enable_execlists=0<br />
<br />
これは、カーネル 4.0.5 以上で壊れていることが知られています。<br />
<br />
=== Windows をゲストとした場合にラグが発生する ===<br />
<br />
VirtualBox でホスト側から(マウスカーソルを動かすなどして)画面を更新しないと Windows ゲストのビデオ出力が止まってしまうことがあります。{{ic|1=enable_fbc=1}} オプションを削除すれば問題は解決します。<br />
<br />
=== 画面がちらつく ===<br />
<br />
Intel iGPU で使用される省電力機能 Panel Self Refresh (PSR) は、一部の例でちらつきを発生させることが知られています {{Bug|49628}} {{Bug|49371}} {{Bug|50605}}。一時的な解決策は、[[カーネルパラメータ]] {{ic|1=i915.enable_psr=0}} を使ってこの機能を無効化することです。<br />
<br />
=== i915 ドライバで OpenGL 2.1 ===<br />
<br />
{{Pkg|mesa-amber}} パッケージに含まれる第3世代 GPU 用の 古い mesa ドライバは、デフォルトでは OpenGL 2.0 が利用可能であると報告します。これは、対象のハードウェアが OpenGL 2.1 とは完全に互換性がないことが原因です。[https://www.phoronix.com/scan.php?page=news_item&px=Mesa-i915-OpenGL-2-Drop] OpenGL 2.1 のサポートは、{{ic|/etc/drirc}} または {{ic|~/.drirc}} で以下のようなオプションを設定することにより、手動で有効化することができます:<br />
<br />
{{hc|/etc/drirc|output=<br />
<driconf><br />
...<br />
<device driver="i915"><br />
<application name="Default"><br />
<option name="'''stub_occlusion_query'''" value="'''true'''" /><br />
<option name="'''fragment_shader'''" value="'''true'''" /><br />
</application><br />
</device><br />
...<br />
</driconf><br />
}}<br />
<br />
{{Note|<br />
* OpenGL のバージョンが戻ってしまう理由は、Chromium と他のアプリケーションでエクスペリエンスが悪化するためでした。必要であれば、drirc ファイルを編集して特定のアプリケーションに対して OpenGL 2.1 を {{ic|chromium}} 実行ファイルなどで無効化することもできます ([https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ 参照])。<br />
* {{Pkg|mesa}} パッケージに含まれる新しい Gallium ベースの i915 ドライバは、常に OpenGL 2.1 が利用可能であると報告します。なので、このドライバに対しては上記の設定は不要です。<br />
}}<br />
<br />
=== KMS の問題: コンソールが小さい領域に制限される ===<br />
<br />
低解像度のビデオポートの1つが起動時に有効になっていて、そのせいでターミナルがスクリーンの小さい領域を使っているのかもしれません。修正するには、ブートローダーでカーネルコマンドラインパラメータの {{ic|1=video=SVIDEO-1:d}} を使って i915 モジュールの設定でそのポートを明示的に無効化してください。詳細は [[カーネルパラメータ]] を見てください。<br />
<br />
これでうまく行かない場合、SVIDEO-1 ではなく TV1 か VGA1 を無効化してみてください。ビデオポートの名前は [[xrandr]] でリストアップできます。<br />
<br />
=== Haswell CPU で HDMI 経由で音声が出ない ===<br />
<br />
[https://bugzilla.kernel.org/show_bug.cgi?id=60769 Linux カーネルの issue] によると、{{ic|1=intel_iommu=on}} を設定している場合には HDMI から音声が出力されないそうです。この問題を修正するには、以下の[[カーネルパラメータ]]を設定してください:<br />
<br />
intel_iommu=on,igfx_off<br />
<br />
あるいは、IOMMU を無効化してください:<br />
<br />
intel_iommu=off<br />
<br />
=== 低消費電力 Intel CPU でクラッシュ/フリーズ ===<br />
<br />
低消費電力 Intel プロセッサやノート PC プロセッサは、低消費電力 Intel チップで使用されている電源管理機能に関する問題によりランダムにハングアップ/クラッシュする傾向にあります。そのようなクラッシュが発生する場合、この問題を報告するログは見られないでしょう。以下の[[カーネルパラメータ]]を追加することで、この問題を解決できるかもしれません。<br />
<br />
{{Note|以下のカーネルパラメータを3つすべて一緒に使用することは推奨されません。}}<br />
<br />
intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1<br />
<br />
{{ic|1=ahci.mobile_lpm_policy=1}} は、いくつかの Lenovo ノート PC や一部の Acer ノートブックにおける、SATA コントローラーの問題のある電源管理に起因するハングアップを修正します。この回避策は Intel Graphics と厳密には関連していませんが、関連する問題を解決します。このカーネルパラメータを追加すると、''l''ink ''p''ower ''m''anagement をファームウェアのデフォルトから最大パフォーマンスに変更し、特定の Lenovo マシンでディスプレイ輝度を変更した際にハングする問題を解決しますが、modern ultrabook でアイドル時の電力消費量が 1~1.5W 増加します。詳細 (特に他の状態に関するもの) については、[https://lore.kernel.org/lkml/20171211165216.5604-1-hdegoede@redhat.com/ Linux カーネルメーリングリスト]や [https://access.redhat.com/documentation/en-en/red_hat_enterprise_linux/6/html/power_management_guide/alpm Red Hat ドキュメント]を見てください。<br />
<br />
{{ic|1=i915.enable_dc=0}} は、GPU の電源管理を無効化します。これは、特定の Intel システム (特に、Goldmount と Kaby Lake Refresh チップ) におけるランダムなハングを解決します。このパラメータを使用すると、電力消費量が増え、ノート PC/notebook のバッテリー寿命が短くなります。<br />
<br />
{{ic|1=intel_idle.max_cstate=1}} は、プロセッサのスリープ状態を制限し、プロセッサがディープスリープ状態に移行するのを防ぎます。これは絶対に理想的ではなく、電力消費量の増加とバッテリーの短命化を招きます。しかし、多くの Intel システムでランダムなハングを解決します。Intel Baytrail や Kaby Lake Refresh チップを使用している場合は、このパラメータを使用してください。Intel "Baytrail" チップは、このカーネルパラメータを使用しないと、[https://bugzilla.kernel.org/show_bug.cgi?id=109051#c752 ファームウェアの欠陥]によりランダムにハングしてしまうことが知られていましたが、理論的には [https://cgit.freedesktop.org/drm-intel/commit/?id=a75d035fedbdecf83f86767aa2e4d05c8c4ffd95 2019-04-26] に修正されました。<br />
max_cstate パラメータに関する詳細は[https://docs.kernel.org/admin-guide/pm/intel_idle.html#kernel-command-line-options-and-module-parameters カーネルドキュメント]で、cstate に関する一般的な情報は [https://gist.github.com/wmealing/2dd2b543c4d3cff6cab7 GitHub 上の記事]で見られます。<br />
<br />
頻繁にハングする問題を解決するために {{ic|1=intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1}} を追加して問題が解決した場合は、その後パラメータを一つずつ取り除いて、どのパラメータが実際に問題の解決になっているかを確かめるべきです。実際の問題が SATA の電源管理に関係していて、問題を実際に解決するパラメータが {{ic|1=ahci.mobile_lpm_policy=1}} である場合、cstate やディスプレイの電源管理が無効化されている状態でマシンを走らせることは推奨されていません。<br />
<br />
詳細は [https://linuxreviews.org/Intel_graphics#Kernel_Parameters Linux Reviews] を見てください。<br />
<br />
=== 165Hz モニタのサポートを追加する ===<br />
<br />
一部の 165Hz モニタで、''xrandr'' が 165Hz のオプションを表示しない場合があり、さらに [[#認識されない解像度を追加する]] の方法ではこれを解決できません。この場合、[https://unix.stackexchange.com/questions/680356/i915-driver-stuck-at-40hz-on-165hz-screen i915-driver-stuck-at-40hz-on-165hz-screen] を見てください。<br />
<br />
{{Note|{{ic|/etc/initramfs-tools/hooks/edid}} を作成する以外にも、[[mkinitcpio]] フックを作成する必要があります:<br />
<br />
{{hc|/etc/initcpio/install/edid|<br />
#!/bin/bash<br />
<br />
build() {<br />
add_file /lib/firmware/edid/edid.bin<br />
}<br />
<br />
help() {<br />
cat <<HELPEOF<br />
This hook add support for 165Hz<br />
HELPEOF<br />
}<br />
}}<br />
<br />
そして、{{ic|/etc/mkinitcpio.conf}} の HOOKS 配列に ''edid'' を末尾に追加してください。以下のように:<br />
<br />
{{hc|/etc/mkinitcpio.conf|2=<br />
HOOKS=(... fsck edid)<br />
}}<br />
<br />
そして、[[Initramfs を再生成する|initramfs を再生成]]してください。<br />
}}<br />
<br />
=== Alder Lake-P 上でスリープ/サスペンドから復帰するとフリーズする ===<br />
<br />
{{Out of date|[https://patchwork.freedesktop.org/patch/543021/ このコミット]の段階で、以下のパッチはもはや適用されません。([[:en:Talk:Intel graphics#Freeze after wake from sleep/suspend with Alder Lake-P]])}}<br />
<br />
{{Note|2022年9月25日現在、これは [[fwupd]] からの最近のファームウェアアップデートで修正されました。BIOS の修正がない場合は、[https://gitlab.freedesktop.org/drm/intel/-/issues/7402 今後のカーネルの修正]があるかもしれません。<br />
}}<br />
<br />
Alder Lake-P 第12世代モバイルプロセッサの様々なベンダーのノート PC で、サスペンドから復帰した後にフリーズしたり黒画面になったりします。これは、多くのラップトップのベンダーが不正な VBT (Video BIOS Table) を同梱しており、iGPU に接続されている実際のポートが間違って記述されているからです。多くのベンダーが、正しく動作している Windows OS が搭載されているノート PC のための BIOS アップデートをリリースしないことを鑑みると、Linux ユーザたちはこの問題をカーネル側から対処するしかありません。一時的な緩和策としてカーネルにパッチを当てて再ビルドすることで、この問題を緩和できます:<br />
<br />
{{hc|drivers/gpu/drm/i915/display/intel_display.c.patch|<nowiki><br />
--- a/drivers/gpu/drm/i915/display/intel_display.c<br />
+++ b/drivers/gpu/drm/i915/display/intel_display.c<br />
@@ -8835,7 +8835,7 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)<br />
intel_ddi_init(dev_priv, PORT_TC1);<br />
} else if (IS_ALDERLAKE_P(dev_priv)) {<br />
intel_ddi_init(dev_priv, PORT_A);<br />
- intel_ddi_init(dev_priv, PORT_B);<br />
+ // intel_ddi_init(dev_priv, PORT_B);<br />
intel_ddi_init(dev_priv, PORT_TC1);<br />
intel_ddi_init(dev_priv, PORT_TC2);<br />
intel_ddi_init(dev_priv, PORT_TC3);<br />
<br />
</nowiki>}}<br />
<br />
これは、freedesktop の issue [https://gitlab.freedesktop.org/drm/intel/-/issues/5531 5531] [https://gitlab.freedesktop.org/drm/intel/-/issues/6401 6401] で説明されており、何ヶ月も解決されていません。<br />
<br />
=== Arc GPU のハードウェアビデオアクセラレーション ===<br />
<br />
ハードウェアビデオアクセラレーションは、バージョン 6.2 未満のカーネルでは利用できません。必要な HuC/GuC ファームウェアブロブの読み込みと初期化に失敗してしまいます。<br />
<br />
{{hc|# dmesg|2=<br />
[drm] Incompatible option enable_guc=3 - HuC is not supported!<br />
}}<br />
<br />
{{Accuracy|{{ic|CONFIG_DRM_I915_CAPTURE_ERROR}} を無効化する必要性に関する説明も参照も与えられていない。このフラグは 2022-12-05 の時点で {{Pkg|linux}} 内で [https://github.com/archlinux/svntogit-packages/blob/227caf8f1a66e00e3a4ecf9bc8e7a98d4d257c11/trunk/config#L6579 有効に設定されている]。}}<br />
<br />
[[ハードウェアビデオアクセラレーション]]を行うには、{{Pkg|intel-media-driver}} をインストールし、{{ic|CONFIG_DRM_I915_CAPTURE_ERROR}} を無効化したカーネルを使用しなければなりません。<br />
<br />
== 参照 ==<br />
<br />
* https://01.org/linuxgraphics/documentation (サポートされているハードウェア一覧など)<br />
<br />
{{TranslationStatus|Intel graphics|2024-03-22|802891}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%BD%E3%83%AA%E3%83%83%E3%83%89%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96/%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%BB%E3%83%AB%E3%81%AE%E6%B6%88%E5%8E%BB&diff=36605
ソリッドステートドライブ/メモリセルの消去
2024-03-22T00:28:23Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ストレージ]]<br />
[[en:Solid State Drives/Memory cell clearing]]<br />
[[ru:Solid state drive (Русский)/Memory cell clearing]]<br />
{{Related articles start}}<br />
{{Related|ソリッドステートドライブ}}<br />
{{Related|ディスクの完全消去}}<br />
{{Related articles end}}<br />
ときに、SSD のセルを完全に消去して、SSD 製造時の状態に完全に戻し、[https://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 製造時の書き込み性能]を取り戻したいと思うこともあるでしょう。たとえ SSD がネイティブ TRIM に対応していても、時が経つにつれて書き込み性能は下がっていくことが知られています。TRIM はあくまでファイルの削除に対する防護であり、差分保存などの操作には効果がありません。<br />
<br />
Secure Erase を行っても、SSD セルのウェアレベリングの状態はリセットできません。寿命を迎えつつあるドライブの場合、短い間は書き込み可能になる''かもしれません''が、限られた量の書き込み後は依然としてできなくなります。<br />
<br />
{{Warning|<br />
* 消去を行う前に重要なデータをすべてバックアップしてください! '''この作業は SSD 上の全データを破壊'''し、データ復旧サービスでさえ復元不可能にしてしまいます! 作業を行った後に、デバイスを再度パーティショニングして、データを再保存する必要があります!<br />
* 対象のドライブが SATA/NVMe インターフェイスに直接接続されていない場合、この作業を'''行わないでください'''。USB や SAS/RAID カードを介して接続されているドライブに対して Secure Erase/Format/Sanitize コマンドを発行すると、そのドライブを文鎮化させてしまう可能性があります。<br />
}}<br />
<br />
== SATA ドライブ ==<br />
<br />
ATA では、ドライブを消去するためのコマンドとして {{ic|SECURITY ERASE UNIT}} と {{ic|ENHANCED SECURITY ERASE UNIT}} があります。[https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase]<br />
<br />
{{Tip|これらのコマンドは、ハードディスクドライブをゼロ初期化する目的でも使用できます。}}<br />
<br />
=== ドライブのセキュリティが frozen モードでないことを確認する ===<br />
<br />
以下のコマンドを発行してください:<br />
<br />
# hdparm -I /dev/sd''X'' | grep frozen<br />
<br />
出力の Security セクションに {{ic|not frozen}} と表示されている必要があります。ただ {{ic|frozen}} と表示される場合、次のステップに進むことはできません。詳細は [[ソリッドステートドライブ#Frozen モード]] を参照してください。<br />
<br />
解決策としては、システムを単に[[サスペンド]] (S0ix ではなく S3 スリープ) させることです。復帰するときに、frozen 状態が解除される可能性があります。うまく行かない場合は、ドライブのデータケーブルを (電源が入った状態で) 抜き差しする方法があります (カーネルがクラッシュするかもしれません)。SATA データケーブルをこのように抜き差ししてカーネルがクラッシュする場合は、オペレーティングシステムを完全に起動させて、素早く SATA の電源ケーブルとデータケーブルの両方を抜き差ししてみてください。それでも SATA ケーブルの抜き差しでカーネルがクラッシュしてしまう場合は、AHCI が有効化されていることを BIOS で確認してください (AHCI により、クラッシュさせずに、電源が入った状態で抜き差しできます)。ホットプラグに対応している場合は、USB から SATA への変換ケーブルを使うという手もあります。{{Pkg|hdparm}} は USB を介して使うこともできます。<br />
<br />
==== Dell システム ====<br />
<br />
先のコマンドが "frozen" と出力する場合、以下を行うことにより回避できるかもしれません:<br />
<br />
# スタートアップ時に F2 を押して、Dell の BIOS に入る。<br />
# BIOS から Internal HDD Password を設定する (注意、キー配列が en_US / qwerty になっています。日本語配列とは若干異なります)。<br />
# 変更を適用し、再起動する。<br />
# Dell Security Manager からパスワードを要求されたときに、パスワードを入力せずに Escape を押す。ドライブはロックされたままになりますが、frozen 状態にはなっていません。<br />
# ステップ 2 をスキップし、ステップ 3 に飛ぶ。<br />
<br />
{{Note|Lenovo のパソコンを使っていて "frozen" 状態を解除できない場合 (例: M.2 インターフェイスで SSD を使用する Lenovo 製のタブレット)、'''[https://pcsupport.lenovo.com/us/en/olddownloads/ds019026 プロプライエタリツール]''' を使うことで、この記事の手順を行わずに、メモリセルの消去をすることができます。参照: https://superuser.com/questions/763642/secure-erase-ssd-on-lenovo-thinkpad-t520-cant-unfreeze-ssd-machine-reboots-on 。}}<br />
<br />
=== ユーザーパスワードを設定してセキュリティを有効化する ===<br />
<br />
{{Note|ユーザーパスワードが設定されると、次の起動時からドライブがロックされ、正しいパスワードを入力してアンロックしないと通常のアクセスが拒否されます。}}<br />
{{Warning|このステップの後にコンピュータを再起動'''しないでください'''。特に、Lenovo ノート PC を使用している場合です。Lenovo の BIOS の中には、暗号鍵の計算に逸脱したアルゴリズムを使う傾向にあるものがあります。マシンの起動後に、SSD ドライブに接続できなくなってしまいます。[https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/]}}<br />
<br />
このパスワードは一時的に使用するものなので、何でも構いません。Secure Erase 後は、このパスワードは NULL に戻されます。この例では、パスワードとして {{ic|''PasSWorD''}} を使っています:<br />
<br />
{{hc|# hdparm --user-master u --security-set-pass ''PasSWorD'' /dev/sd''X''|2=<br />
security_password="''PasSWorD''"<br />
/dev/sd''X'':<br />
Issuing SECURITY_SET_PASS command, password="''PasSWorD''", user=user, mode=high<br />
}}<br />
<br />
サニティチェックとして、以下のコマンドを発行してください:<br />
<br />
# hdparm -I /dev/sd''X''<br />
<br />
上記のコマンドは "enabled" と出力するはずです:<br />
<br />
{{bc|1=<br />
Security:<br />
Master password revision code = 65534<br />
supported<br />
'''enabled'''<br />
not locked<br />
not frozen<br />
not expired: security count<br />
supported: enhanced erase<br />
Security level high<br />
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.<br />
}}<br />
<br />
=== ATA SECURITY ERASE UNIT コマンドを発行する ===<br />
<br />
最後のステップは ATA SECURITY ERASE UNIT コマンドの発行です。ドライブのコンテンツを消去させるようデバイスのファームウェアに命令します。この例で使用しているデバイスでは、先のコマンドで以下のように出力されたことに注意してください:<br />
<br />
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.<br />
<br />
ATA の仕様によれば、''強化型''のセキュリティ消去 ({{ic|--security-erase-enhanced}}) はより入念な消去を実行します。両方のコマンドの予想完了時間が等しい場合、ドライブのメーカーが仕様を無視し、どちらのコマンドでも同じ消去を行っていることを意味します。消去にかかる時間 (2分など) が短い場合、デバイスが自己暗号化を行っていて、ファームウェアによって消去されるのは内部の暗号鍵だけで、全てのデータセルが上書きしていないことを意味します [https://security.stackexchange.com/questions/62253/what-is-the-difference-between-ata-secure-erase-and-security-erase-how-can-i-en]。<br />
<br />
{{Warning|<br />
* 指定したドライブが正しいことを3重にチェックしてください。コマンドの実行を確定してしまったら、もう'''後戻りはできません'''。警告しましたよ。<br />
* これを実行するときに対象のドライブがマウントされていないことを確認してください。ドライブがマウントされているときに Secure Erase コマンドを発行してしまうと、適切に消去されません。<br />
}}<br />
<br />
# hdparm --user-master u --security-erase ''PasSWorD'' /dev/sd''X''<br />
<br />
コマンドが完了するまで待機してください。この例の出力では、Intel X25-M 80GB SSD に約40秒かかりました。<br />
<br />
security_password="''PasSWorD''"<br />
/dev/sd''X'':<br />
Issuing SECURITY_ERASE command, password="''PasSWorD''", user=user<br />
0.000u 0.000s 0:39.71 0.0% 0+0k 0+0io 0pf+0w<br />
<br />
これで、ドライブが消去されました。消去の成功後、ドライブのセキュリティが自動的に無効化されるはずです (なので、アクセスにパスワードは必要なくなります)。以下のコマンドを実行して確認してください:<br />
<br />
# hdparm -I /dev/sd''X''<br />
<br />
上記のコマンドは "not enabled" と出力するはずです:<br />
<br />
{{bc|1=<br />
Security:<br />
Master password revision code = 65534<br />
supported<br />
'''not enabled'''<br />
not locked<br />
not frozen<br />
not expired: security count<br />
supported: enhanced erase<br />
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.<br />
}}<br />
<br />
== NVMe ドライブ ==<br />
<br />
[https://nvmexpress.org/developers/nvme-specification/ NVMe 仕様]では、NVMe ドライブをフォーマットするための標準化された方法が定義されています。NVMe ドライブは SATA インターフェイスプロトコルを使用しないため、SATA SSD と同じ方法では消去できないからです。もともと、この機能を提供していたのは {{man|1|nvme-format}} コマンド ({{Pkg|nvme-cli}} に同梱) でしたが、このコマンドのその機能を残しつつ、[https://nvmexpress.org/changes-in-nvme-revision-1-3/ Specification 1.3] で専用の {{man|1|nvme-sanitize}} コマンドのサポートが追加されました。Jonmichael Hands 氏 (NVMe MWG 共同議長、Intel の上級戦略プランナー/プロダクトマネージャ) の説明によると [https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/]:<br />
<br />
:「''これらのコマンドは、デバイスからユーザデータをセキュアに消去するために使用される。これは、新しいデバイスを導入するとき、廃棄するとき、デバイスが寿命を迎えたとき、SSD を新しい用途で使うときなどに使用できる。Sanitize は NVMe 1.3 仕様で導入されたため、それ以前では、Secure Erase を行うためだけに NVMe Format が使用された。両方のオプションが機能するが、データが適切に消去されたことを保証する点で、Sanitize はよりロバストだ。Format は、日常的な使用やテストに適している。''」<br />
<br />
あなたのドライブでサポートされているものを確認するために、Identify Controller コマンドを使用してください:<br />
<br />
# nvme id-ctrl /dev/nvme0 -H | grep -E 'Format |Crypto Erase|Sanitize'<br />
<br />
出力例:<br />
<br />
{{bc|<br />
[1:1] : 0x1 Format NVM Supported<br />
[29:29] : 0 No-Deallocate After Sanitize bit in Sanitize command Supported<br />
[2:2] : 0 Overwrite Sanitize Operation Not Supported<br />
[1:1] : 0x1 Block Erase Sanitize Operation Supported<br />
[0:0] : 0x1 Crypto Erase Sanitize Operation Supported<br />
[2:2] : 0x1 Crypto Erase Supported as part of Secure Erase<br />
[1:1] : 0 Crypto Erase Applies to Single Namespace(s)<br />
[0:0] : 0 Format Applies to Single Namespace(s)<br />
}}<br />
<br />
そして、[[#Format コマンド|format]] か [[#Sanitize コマンド|sanitize]] のどちらかに進んでください。<br />
<br />
=== Format コマンド ===<br />
<br />
Format コマンドは、概念的には [[hdparm]] と [[fdisk]] を組み合わせたものに近いです。ドライブの低レベルなパラメータを設定でき、''さらに'' Secure Erase コマンドも送信できます。<br />
<br />
{{man|1|nvme-format}} には、Secure Erase Settings ({{ic|-s}}/{{ic|--ses}}) のオプションに関する以下の詳細が書かれています:<br />
<br />
:''Secure Erase Settings: このフィールドは、フォーマットの一部として Secure Erase を行うかどうかや、Secure Erase 操作の種類を指定します。消去は、データの場所に関わらず、全ユーザデータに適用されます (例: 公開されている LBA 内、キャッシュ内、割り当て解除された LBA 内など)。デフォルトは 0 です。''<br />
<br />
利用可能な値:<br />
<br />
{| class="wikitable" <br />
|-<br />
! 値<br />
! 定義<br />
|-<br />
| 0<br />
| Secure Erase 操作を要求しない<br />
|-<br />
| 1<br />
| User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は未確定です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。<br />
|-<br />
| 2<br />
| Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。最後に暗号化キーを消去して完了します。<br />
|}<br />
<br />
Format コマンドは NVMe キャラクタデバイス全体 (例: {{ic|/dev/nvme0}}) か特定の名前空間ブロックデバイス (例: {{ic|/dev/nvme0n1}}) のいずれかを受け入れますが、実行するまえに、この機能があなたのドライブでサポートされていることを確認してください。例えば、上記の Identify Controller コマンドの出力では、{{ic|Crypto Erase Applies to Single Namespace(s)}} と {{ic|Format Applies to Single Namespace(s)}} のビットが 0 にセットされていました。仕様によると、これは「''コントローラが名前空間単位でのフォーマットをサポートしている''」ことを意味します (図249の byte 列 524 "Format NVM Attributes (FNA)" を参照)。<br />
<br />
例えば、暗号消去を使って {{ic|/dev/nvme0}} を名前空間1にフォーマットするには:<br />
<br />
# nvme format /dev/nvme0 -s 2 -n 1<br />
<br />
全ての名前空間をフォーマットするには {{ic|-n 0xffffffff}} オプションを使用してください。<br />
<br />
詳細やデバイス/名前空間の選択に関する重要な警告については {{man|1|nvme-format}} を参照してください。<br />
<br />
=== Sanitize コマンド ===<br />
<br />
Sanitize コマンドは、「SATA と SAS の実装にある同名のコマンドと機能的に等価」になるように作成されました[https://nvmexpress.org/changes-in-nvme-revision-1-3/]。前述の記事によると[https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/]:<br />
<br />
:「[https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf#%5B%7B%22num%22%3A1051%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C70%2C369%2C0%5D NVMe 1.4 specification] によると、「Sanitize 操作は NVM サブシステム内の全ユーザデータを書き換え、キャッシュ、非揮発性メディア、Controller Memory Buffer から以前のユーザデータを復元できないようにします。」<br />
:Sanitize と Format の大きな違いは、Sanitize はキャッシュが削除されることを保証し、予期せぬ電源断後にもプロセスが再び開始されることです。Sanitize は、Secure Erase 操作のためのパターン上書きもサポートしています。これは、NAND の耐久性にとってはひどいものですが、他のタイプのストレージやメモリクラスに使用できますし、ユーザデータを復元できないことをより確実にできます。」<br />
<br />
{{ic|-a/--sanact}} オプションの使用法と利用可能な値は {{man|1|nvme-sanitize}} で説明されています。<br />
<br />
Block Erase と Crypto Erase の違いは、Crypto Erase は暗号化キーのみを消去することです ([https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf#%5B%7B%22num%22%3A663%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C70%2C567%2C0%5D NVMe 1.4 specification] で定義されている通り):<br />
<br />
:「User Data Erase: 全ユーザデータを削除する。削除後のユーザデータの内容は非決定的です (例えば、ユーザデータは 0 や 1 などで埋められているかもしれません)。User Data Erase が要求された時、全ユーザデータが暗号化されている場合、コントローラは Cryptographic Erase を行う場合があります。」<br />
:Cryptographic Erase: 全ユーザデータは、暗号を用いて消去されます。これは、暗号化キーを消去することで達成されます。<br />
:…<br />
:Block Erase sanitize 操作は、メディア固有の低レベルなブロック消去法を用いて、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、ユーザデータを書き換えます。<br />
:Crypto Erase sanitize 操作は、ユーザデータが保存されている可能性のある NVM サブシステム内のメディア上のすべての場所において、メディアの暗号化キーを変更することにより、ユーザデータを書き換えます…」<br />
<br />
(サポートされていれば) あなたのドライブに対して様々な手法がどれくらいの時間を要するのか推定を得ることができます:<br />
<br />
{{hc|# nvme sanitize-log /dev/nvme0|<br />
...<br />
Estimated Time For Overwrite : 4294967295 (No time period reported)<br />
Estimated Time For Block Erase : 174<br />
Estimated Time For Crypto Erase : 34<br />
}}<br />
<br />
もし、以下のような結果になる場合:<br />
<br />
{{hc|# nvme sanitize-log /dev/nvme0|<br />
...<br />
Estimated Time For Overwrite : 4294967295 (No time period reported)<br />
Estimated Time For Block Erase : 4294967295 (No time period reported)<br />
Estimated Time For Crypto Erase : 4294967295 (No time period reported)<br />
}}<br />
<br />
操作が完了するまでに'''長い時間が掛かる'''ことを確認してください。比較として、Intel 660p 512GB においては 1 回の Block Erase がこれらの結果を得るまでに約 2~3 時間かかりました。<br />
<br />
{{Warning|一度始めると、再起動してもこの操作を中断することはできず、プロセスが完了するまでドライブは利用不可能になります。これには、[https://github.com/linux-nvme/nvme-cli/issues/752#issuecomment-647821283 長い時間]がかかります。}}<br />
<br />
Crypto Erase sanitize 操作を始めるには:<br />
<br />
# nvme sanitize ''device'' -a start-crypto-erase<br />
<br />
{{Note|{{ic|''device''}} パラメータは必須の NVMe キャラクタデバイス (例: {{ic|/dev/nvme0}}。{{ic|/dev/nvme0n1}} '''ではありません''') で、この操作は'''デバイス全体'''に適用されます。}}<br />
<br />
Block Erase の場合は:<br />
<br />
# nvme sanitize ''device'' -a start-block-erase<br />
<br />
{{Warning|あなたのドライブでサポートされているとしても、''Overwrite'' アクションを使うことは避けてください。これは、「[https://nvmedeveloperdays.com/English/Collaterals/Proceedings/2018/20181204_PRECON2_Hands.pdf 耐久性の問題により NAND ベースの SSD にとっては良くなく、推奨されません]{{Dead link|2024|01|13|status=410}}」。}}<br />
<br />
Sanitize ログにより、処理内容を追うことができます:<br />
<br />
# nvme sanitize-log /dev/nvme0<br />
<br />
ドライブを Crypto Erase している場合の出力例:<br />
<br />
{{bc|<br />
Sanitize Progress (SPROG) : 655<br />
Sanitize Status (SSTAT) : 0x4<br />
Sanitize Command Dword 10 Information (SCDW10) : 0x4<br />
Estimated Time For Overwrite : 4294967295 (No time period reported)<br />
Estimated Time For Block Erase : 174<br />
Estimated Time For Crypto Erase : 34<br />
Estimated Time For Overwrite (No-Deallocate) : 0<br />
Estimated Time For Block Erase (No-Deallocate) : 0<br />
Estimated Time For Crypto Erase (No-Deallocate): 0<br />
}}<br />
<br />
When the command has completed successfully:<br />
<br />
{{bc|<br />
Sanitize Progress (SPROG) : 65535<br />
Sanitize Status (SSTAT) : 0x101<br />
Sanitize Command Dword 10 Information (SCDW10) : 0x4<br />
Estimated Time For Overwrite : 4294967295 (No time period reported)<br />
Estimated Time For Block Erase : 174<br />
Estimated Time For Crypto Erase : 34<br />
Estimated Time For Overwrite (No-Deallocate) : 0<br />
Estimated Time For Block Erase (No-Deallocate) : 0<br />
Estimated Time For Crypto Erase (No-Deallocate): 0<br />
}}<br />
<br />
== blkdiscard による一般的な方法 ==<br />
<br />
{{Pkg|util-linux}} パッケージの {{man|8|blkdiscard}} コマンドは {{ic|--secure}} オプションを提供します。このオプションは、「''セキュアな消去を行います。セキュアな消去は、ガベージコレクションによって作成された可能性のある消去ブロックのコピーもすべて削除されることを除いて、通常の消去と同じです。セキュアな消去はデバイスのサポートを必要とします。''」<br />
<br />
このコマンドを使うには、以下を実行してください:<br />
<br />
# blkdiscard --secure /dev/''device''<br />
<br />
セキュアな消去をサポートしていないデバイスの場合、{{ic|-z}}/{{ic|--zeroout}} オプションは、デフォルトでデバイス上の全ブロックを単に消去する代わりに、デバイスを 0 で埋めます。<br />
<br />
''blkdiscard'' の一般的なセキュリティに関する議論は [https://unix.stackexchange.com/questions/659931/how-secure-is-blkdiscard] を、blkdiscard を使用してボリュームを消去する例は [https://www.ovirt.org/develop/release-management/features/storage/wipe-volumes-using-blkdiscard.html] を見てください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== ドライブを消去した後に UEFI ブートエントリが削除された ===<br />
<br />
一部の [[UEFI]] 実装は、存在しないファイルを参照しているブートエントリをシステムのスタートアップ時に削除します。メモリセルの消去を行った後にバックアップからシステムを復元する場合は、[[efibootmgr]] を使うか [[ブートローダー]]を再インストールして、ブートエントリを復元してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://web.archive.org/web/20190326142043/http://forum.notebookreview.com/threads/secure-erase-hdds-ssds-sata-nvme-using-hdparm-nvme-cli-on-linux.827525/ Secure Erase HDDs/SSDs (SATA/NVMe) using hdparm & nvme-cli on Linux] (2019): 画像付きの良いチュートリアル<br />
* [https://nvmexpress.org/wp-content/uploads/Session-3-Verifying-SSD-Sanitization_Micron_Toshiba_Final-as-of-4.26.pdf Verifying SSD Sanitization]<br />
<br />
{{TranslationStatus|Solid state drive/Memory cell clearing|2024-03-22|802318}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=GTK&diff=36603
GTK
2024-03-21T10:08:03Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ウィジェットツールキット]]<br />
[[en:GTK]]<br />
[[es:GTK]]<br />
[[pt:GTK]]<br />
[[ru:GTK]]<br />
[[zh-hans:GTK]]<br />
{{Related articles start}}<br />
{{Related|Qt と GTK アプリケーションの外観の統合}}<br />
{{Related|Qt}}<br />
{{Related|GNU プロジェクト}}<br />
{{Related|GTK/開発}}<br />
{{Related articles end}}<br />
<br />
[https://www.gtk.org/ GTK ウェブサイト] より:<br />
:GTK もしくは GIMP ツールキットはグラフィカルユーザーインターフェースを作成するためのマルチプラットフォームのツールキットです。ウィジェットの完全なセットを提供することで、GTK はちょっとしたツールから完全なアプリケーションスイートまで幅広いプロジェクトに適しています。<br />
<br />
当初 GTK (GIMP Toolkit) は [[GNU プロジェクト]]によって [[GIMP]] のために作成されました、しかしながら現在ではさまざまな言語のバインディングの存在する人気のあるツールキットになっています。この記事では GTK テーマ・スタイル・アイコン・フォント・フォントサイズを設定するのに使うツールと手動設定の方法を説明します。 <br />
<br />
== インストール ==<br />
<br />
複数の GTK バージョンが現在利用可能です。以下のパッケージによってそれらは[[インストール]]できます:<br />
<br />
* '''GTK 4.x''' は {{Pkg|gtk4}} パッケージでインストールできます。<br />
* '''GTK 3.x''' は {{Pkg|gtk3}} パッケージでインストールできます。<br />
* '''GTK 2.x''' は {{Pkg|gtk2}} パッケージでインストールできます。<br />
* '''GTK 1.x''' は {{AUR|gtk}} パッケージでインストールできます。<br />
<br />
== テーマ ==<br />
<br />
=== GTK 3 と GTK4 ===<br />
<br />
GTK 3 と GTK 4 では、デフォルトテーマは Adwaita ですが、HighContrast テーマと HighContrastInverse テーマも含まれています。<br />
<br />
特定のテーマを適用するには、dconf エディタから {{ic|org.gnome.desktop.interface}} 名前空間内の {{ic|gtk-theme}} プロパティを設定してください:<br />
<br />
$ gsettings set org.gnome.desktop.interface gtk-theme Adwaita<br />
<br />
{{Note|libadwaita ベースの GTK 4 アプリケーションでは、GTK テーマに[https://github.com/jnsh/arc-theme/issues/61#issuecomment-922380704 特殊なサポート]が存在している必要があり、かつ、{{ic|GTK_THEME}} [[環境変数]]を使って GTK テーマを強制する必要があります。あるいは、libadwaita のパッチ適用済みのバージョン {{AUR|libadwaita-without-adwaita-git}} を使用する必要があります。}}<br />
<br />
dconf プロパティを使用しない場合は、{{ic|GTK_THEME}} [[環境変数]]を使って GTK 3 と GTK 4 のテーマを適用することができます。例えば、GNOME Calculator を Adwaita のダークバージョンを使って起動するには:<br />
<br />
$ GTK_THEME=Adwaita:dark gnome-calculator<br />
<br />
{{Tip|デスクトップショートカット (またはランチャー) から一つのアプリケーションに対して GTK テーマを適用する方法については、[[デスクトップエントリ#環境変数の変更]] を見てください。}}<br />
<br />
{{Note|対応する [[XDG デスクトップ ポータル]]を使用しない場合は、GSettings で設定したテーマを選択するために {{ic|1=ADW_DISABLE_PORTAL=1}} [[環境変数]]を設定する必要があるかもしれません。https://gitlab.gnome.org/GNOME/libadwaita/-/commit/e715fae6a509db006a805af816f9d163f81011ef を参照してください。}}<br />
<br />
=== GTK 2 ===<br />
<br />
GTK 2 のデフォルトのテーマは Raleigh ですが、Arch Linux には、デフォルトのテーマを Adwaita に設定するカスタムの設定ファイルが {{ic|/usr/share/gtk-2.0/gtkrc}} に存在しています。<br />
<br />
GTK 2 のテーマを変更するには、{{ic|GTK2_RC_FILES}} [[環境変数]]を使用してください。例えば、Raleigh テーマで [[GIMP]] を起動するには:<br />
<br />
$ GTK2_RC_FILES=/usr/share/themes/Raleigh/gtk-2.0/gtkrc gimp<br />
<br />
{{Tip|{{ic|gtkrc}} は、任意の [[#設定ツール]] で作成されたホームディレクトリ内のカスタムファイルにすることもできます。[[#例]] を見てください。}}<br />
<br />
公式リポジトリや [[AUR]] から他のテーマをインストールすることができます。手動で展開されたテーマは {{ic|~/.themes/}} や {{ic|~/.local/share/themes/}} ディレクトリに配置します。<br />
<br />
=== GTK 2 と GTK 3 をサポートしているテーマ ===<br />
<br />
* {{App|Adapta|マテリアルデザインガイドラインに基づいている GTK テーマ。次のテーマが含まれています: Adapta, Adapta-Eta, Adapta-Nokto, Adapta-Nokto-Eta|https://github.com/tista500/Adapta|{{Pkg|adapta-gtk-theme}}}}<br />
* {{App|Arc|モダンで透過するエレメントを備えたフラットテーマ。次のテーマが含まれています: Arc, Arc-Dark, Arc-Darker|https://github.com/jnsh/arc-theme|透過あり: {{Pkg|arc-gtk-theme}}, 透過なし: {{Pkg|arc-solid-gtk-theme}}}}<br />
* {{App|Bluebird|Xfce 用の Blue Desktop Suite。|https://github.com/shimmerproject/Bluebird|{{AUR|xfce-theme-bluebird}}}}<br />
* {{App|Breeze|KDE のデフォルトウィジェットテーマの GTK バージョン。次のテーマが含まれています: Breeze, Breeze-Dark|https://invent.kde.org/plasma/breeze-gtk|{{Pkg|breeze-gtk}}}}<br />
* {{App|Deepin|Deepin デスクトップのデフォルトテーマ。次のテーマが含まれています: deepin, deepin-dark|https://github.com/linuxdeepin/deepin-gtk-theme|{{Pkg|deepin-gtk-theme}}}}<br />
* {{App|GNOME Extra Themes|GNOME デスクトップの追加テーマ。次のテーマが含まれています: Adwaita, Adwaita-dark, HighContrast|https://gitlab.gnome.org/GNOME/gnome-themes-extra|{{Pkg|gnome-themes-extra}}}}<br />
* {{App|Greybird|グレーとブルーの Xfce テーマ。Xubuntu 12.04 のデフォルト。|https://github.com/shimmerproject/Greybird|{{AUR|xfce-theme-greybird}}}}<br />
* {{App|Materia|GTK3, GTK2, GNOME-Shell に対応しているマテリアルデザインライクなフラットテーマ。|https://github.com/nana-4/materia-theme|{{Pkg|materia-gtk-theme}}}}<br />
* {{App|MATE Themes|MATE デスクトップのデフォルトテーマ。次のテーマが含まれています: BlackMATE, Blue-Submarine, BlueMenta, ContrastHighInverse, Green-Submarine, GreenLaguna, Menta, TraditionalGreen, TraditionalOk|https://github.com/mate-desktop/mate-themes|{{Pkg|mate-themes}}}}<br />
* {{App|Numix|近代的な外観をしているフラットで明るいテーマ (GNOME, Openbox, Unity, Xfce)。次のテーマが含まれています: Numix|https://github.com/numixproject/numix-gtk-theme|{{AUR|numix-gtk-theme-git}}}}<br />
* {{App|Vertex|GTK 3, GTK 2, Gnome-Shell, Cinnamon のためのテーマ。|https://github.com/horst3180/vertex-theme|{{AUR|vertex-themes}}}}<br />
* {{App|Zuki|GTK, gnome-shell などのためのテーマ。|https://github.com/lassekongo83/zuki-themes|{{AUR|zuki-themes}}}}<br />
<br />
AUR にもいくつか GTK テーマが存在します。例えば、[https://aur.archlinux.org/packages?K=gtk-theme gtk-theme で検索]。<br />
<br />
=== GTK と Qt ===<br />
<br />
デスクトップで GTK と Qt (KDE) アプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK スタイルと Qt スタイルを調和させたい場合は [[Qt と GTK アプリケーションの外観の統合]]を読んで下さい。<br />
<br />
== 設定ツール ==<br />
<br />
主流の[[デスクトップ環境]]の多くは GTK テーマやアイコン、フォントやフォントサイズを設定するためのツールを提供しており、[https://specifications.freedesktop.org/xsettings-spec/ XSettings] で設定を管理しています:<br />
* [[Cinnamon]] を使っている場合、Themes ツールを使って下さい (''cinnamon-settings themes''): ''System Settings > Themes'' を開いて下さい。<br />
* [[Enlightenment]] を使っている場合: ''Settings > All > Look > Application Theme'' を開いて下さい。<br />
* [[GNOME]] を使っている場合、GNOME Tweaks (''gnome-tweaks''): {{Pkg|gnome-tweaks}} をインストールして下さい。<br />
* [[MATE]] を使っている場合、Appearance Preferences ツールを使って下さい (''mate-appearance-properties''): ''System > Settings > Appearance'' を開いて下さい。<br />
* [[Xfce]] を使っている場合、Appearance ツールを使って下さい: ''Settings > Appearance'' を開いて下さい。<br />
<br />
通常、他の GUI ツールは[[#設定|設定ファイル]]を上書きします。<br />
<br />
'''GTK 2 と GTK 3 の両方をサポートしているツール:'''<br />
<br />
* {{App|KDE GTK Configurator|GTK 2 と GTK 3 アプリケーションのスタイルやフォントを変更することができるアプリケーション。|https://invent.kde.org/plasma/kde-gtk-config|{{Pkg|kde-gtk-config}}}}<br />
:インストール後、{{ic|kde-gtk-config}} は ''System Settings > Appearance > Application Style > Configure GNOME/GTK Application Style'' から使用できます。<br />
* {{App|LXAppearance|LXDE プロジェクトによる、デスクトップに依存しない GTK 2 と GTK 3 のスタイル設定ツール (LXDE デスクトップの他のパーツを必要としません)。|https://github.com/lxde/lxappearance|{{Pkg|lxappearance-gtk3}}}}<br />
* {{App|Oo-mox|Numix と Flat-Plat テーマ (GTK 2, GTK 3) や Archdroid と Gnome-Colors アイコンテーマの様々なカラーバリエーションを生成するためのグラフィカルアプリケーション。HiDPI ディスプレイ用にスケールした GTK 2 テーマも生成できます。|https://github.com/actionless/oomox|{{AUR|themix-full-git}}}}<br />
<br />
'''GTK 2 だけをサポートしているツール:'''<br />
* {{App|GTK Change Theme|GTK 2.0 のテーマを変更するためのプログラム (''switch2'' より優れた代替ツールと見なされています)。|http://plasmasturm.org/code/gtk-chtheme/|{{Pkg|gtk-chtheme}}}}<br />
* {{App|GTK Preference Tool|GTK テーマの選択とフォントの切り替えプログラム。|https://gtk-win.sourceforge.io/home/index.php/Main/GTKPreferenceTool|{{AUR|gtk2_prefs}}}}<br />
* {{App|GTK Theme Switch|シンプルな GTK テーマスイッチャ。|3=http://muhri.net/nav.php3?node=gts|4={{AUR|gtk-theme-switch2}}}}<br />
<br />
== 設定 ==<br />
<br />
設定ファイルで GTK の設定を手動で指定することもできます。ただしデスクトップ環境やアプリケーションは手動設定を上書きしてしまうことがあります。GTK のバージョンによって、設定ファイルの場所は異なっています:<br />
<br />
* GTK 2 ユーザー個別: {{ic|$GTK2_RC_FILES}}、{{ic|~/.gtkrc-2.0}}<br />
* GTK 2 システム全体: {{ic|/etc/gtk-2.0/gtkrc}}<br />
* GTK 3 ユーザー個別: {{ic|$XDG_CONFIG_HOME/gtk-3.0/settings.ini}}、{{ic|$XDG_CONFIG_HOME}} が設定されていない場合は {{ic|$HOME/.config/gtk-3.0/settings.ini}}<br />
* GTK 3 システム全体: {{ic|/etc/gtk-3.0/settings.ini}}<br />
<br />
{{Note|<br />
*現在サポートされている GTK の設定オプションの完全なリストについては、GTK プログラミングリファレンスマニュアルの [https://docs.gtk.org/gtk4/class.Settings.html#properties GTK4] と [https://docs.gtk.org/gtk3/class.Settings.html#properties GTK3] の ''GtkSettings'' properties (そして [https://ghostarchive.org/archive/p2BmM GTK 2 properties]) を見てください。<br />
<br />
*以下で説明している設定のうちいくつか ({{ic|gtk-icon-sizes}} など) は GTK 3.10 から非推奨となっており、無視されます。<br />
*GTK の設定ファイルを編集した場合、変更が適用されるのは新しく起動したアプリケーションからです。}}<br />
<br />
=== テーマの基本設定 ===<br />
<br />
GTK テーマやアイコン、フォントやフォントサイズを手動で変更するには、例えば以下のように設定ファイルに追加します:<br />
<br />
* GTK 2:<br />
{{hc|~/.gtkrc-2.0|2=<br />
gtk-icon-theme-name = "Adwaita"<br />
gtk-theme-name = "Adwaita"<br />
gtk-font-name = "DejaVu Sans 11"<br />
}}<br />
<br />
* GTK 3:<br />
{{hc|$XDG_CONFIG_HOME/gtk-3.0/settings.ini|2=<br />
[Settings]<br />
gtk-icon-theme-name = Adwaita<br />
gtk-theme-name = Adwaita<br />
gtk-font-name = DejaVu Sans 11<br />
}}<br />
<br />
テーマが GTK 3 に対して適用されない場合、加えて {{ic|gsettings}} を使用してください:<br />
<br />
$ gsettings set org.gnome.desktop.interface gtk-theme Pop<br />
<br />
{{Note|{{ic|gtk-icon-theme-name}} と {{ic|gtk-theme-name}} は、テーマのディレクトリの名前です。テーマの {{ic|index.theme}} における Name プロパティの値ではありません。}}<br />
<br />
=== ダークテーマ ===<br />
<br />
GTK 3 テーマの中には派生のダークテーマが存在することがありますが、アプリケーションによって明示的に使うように設定されない限り、デフォルトで使われることはありません。全ての GTK 3 アプリケーションでダークテーマを使うには、以下を設定:<br />
<br />
gtk-application-prefer-dark-theme = true<br />
<br />
GTK 4 に対しては、以下を使用してください:<br />
<br />
$ gsettings set org.gnome.desktop.interface color-scheme prefer-dark<br />
<br />
=== キーボードショートカット ===<br />
<br />
マウスをメニューアイテムの上に乗せて設定したいキーの組み合わせを押すことで GTK アプリケーションのキーボードショートカット (GTK では ''accelerators'' とも呼ばれます) を変更することができます。この機能を有効にするには、次を設定してください:<br />
<br />
gtk-can-change-accels = 1<br />
<br />
==== Emacs キーバインド ====<br />
<br />
GTK アプリで Emacs ライクなキーバインドを使うには以下を追加します:<br />
<br />
{{hc|1=~/.gtkrc-2.0|2=<br />
gtk-key-theme-name = "Emacs"<br />
}}<br />
<br />
{{hc|1=~/.config/gtk-3.0/settings.ini|2=<br />
[Settings]<br />
gtk-key-theme-name = Emacs<br />
}}<br />
<br />
GTK 3 に対しては、以下も実行してください:<br />
<br />
$ gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"<br />
<br />
XFCE にも同じような設定が存在します:<br />
<br />
$ xfconf-query -c xsettings -p /Gtk/KeyThemeName -s Emacs<br />
<br />
==== キーバインドを宣言する ====<br />
<br />
{{ic|/usr/share/themes/Emacs/}} などにある設定ファイルは、Emacs バインドを指定したり、変更したりできます。<br />
<br />
{{hc|/usr/share/themes/Emacs/gtk-2.0-key/gtkrc|<br />
binding "gtk-emacs-text-entry"<br />
{<br />
bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) }<br />
...<br />
}<br />
}}<br />
<br />
{{hc|/usr/share/themes/Emacs/gtk-3.0/gtk-keys.css|<br />
@binding-set gtk-emacs-text-entry<br />
{<br />
bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) };<br />
...<br />
}<br />
}}<br />
<br />
セクションを GTK 2 と 2 に対してそれぞれ {{ic|~/.gtkrc-2.0}} と {{ic|~/.themes/your-new-key-theme/gtk-3.0/gtk-keys.css}} にコピーすることで、ユーザー毎に設定を変更できます。<br />
<br />
=== GNOME メニューの遅延 ===<br />
<br />
この設定は GNOME でマウスをメニューに置いた時にメニューが開くまでの待ち時間を決めます。数値はミリ秒単位です。<br />
<br />
gtk-menu-popup-delay = 0<br />
<br />
=== ウィジェットのサイズを小さくする ===<br />
<br />
小さな画面を使っていて大きなアイコンやウィジェットを表示したくない場合、簡単にサイズを変えることができます。<br />
<br />
ツールバーのアイコンに文章を表示しないようにするには ([https://developer.gnome.org/gtk3/stable/gtk3-Standard-Enumerations.html#GtkToolbarStyle 有効値])、次を使って下さい:<br />
<br />
gtk-toolbar-style = GTK_TOOLBAR_ICONS<br />
<br />
小さいアイコンを使うには、次のような行を使って下さい:<br />
<br />
gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-menu=16,16:gtk-large-toolbar=16,16\<br />
:gtk-small-toolbar=16,16:gtk-button=16,16"<br />
<br />
ボタンからアイコンを完全に削除するには:<br />
<br />
gtk-button-images = 0<br />
<br />
メニューからアイコンを削除することもできます:<br />
<br />
gtk-menu-images = 0<br />
<br />
[https://martin.ankerl.com/2008/10/11/how-to-make-a-compact-gnome-theme/] と [https://www.gnome-look.org/p/1079374] も参照。<br />
<br />
=== CSD ボタンを隠す ===<br />
<br />
Client-Side Decorations (CSD)[https://blogs.gnome.org/tbernard/2018/01/26/csd-initiative/] の最小化・最大化ボタン を ''gtk3'' ウィンドウから削除するには:<br />
<br />
gtk-decoration-layout=menu:close<br />
<br />
[https://docs.gtk.org/gtk3/property.Settings.gtk-decoration-layout.html GTK docs] を参照。<br />
<br />
=== マウスの貼り付け機能を無効化 ===<br />
<br />
マスクの中ボタンをクリックした際のクリップボード ([[クリップボード#セレクション|PRIMARY セレクション]]) からの貼り付けを無効化するには:<br />
<br />
gtk-enable-primary-paste=false<br />
<br />
=== ファイル選択ダイアログのデフォルトフォルダ ===<br />
<br />
'''最近使われた'''フォルダではなく'''現在の作業ディレクトリ'''でファイル選択ダイアログを開くようにします。通常、'''現在の作業ディレクトリ'''は''ホーム''ディレクトリです。<br />
<br />
'''GTK 3'''<br />
<br />
イカのコマンドで[[GNOME#設定|設定]]を変更してください:<br />
<br />
$ gsettings set org.gtk.Settings.FileChooser startup-mode cwd<br />
<br />
'''GTK 2'''<br />
<br />
以下を {{ic|~/.config/gtk-2.0/gtkfilechooser.ini}} に追加してください:<br />
<br />
StartupMode=cwd<br />
<br />
=== スクロールの旧式の挙動 ===<br />
<br />
{{Note|この設定が適用されない GTK アプリケーションもあります。}}<br />
{{Tip|左クリックではなく右クリックを使うことでも昔のようなスクロールの挙動をさせることができます。}}<br />
<br />
GTK 3.6 以前では、スクロールバーのスライダーの両側をクリックすると、クリックした方向にスクロールバーが丁度一ページ分だけ移動するようになっていました。GTK 3.6 から、スライダーはクリックした位置に直接移動するようになっています。以下の内容のファイルを作成することで、アプリケーションによっては前の挙動に戻すことが可能です:<br />
<br />
{{hc|~/.config/gtk-3.0/settings.ini|<nowiki><br />
[Settings]<br />
gtk-primary-button-warps-slider = false<br />
</nowiki>}}<br />
<br />
=== オーバーレイスクロールバーを無効化 ===<br />
<br />
GTK 3.15 から、オーバーレイスクロールバーがデフォルトで有効になっており、GTK 3 アプリケーションではマウスを乗せたときだけしかスクロールバーが表示されないようになっています。次の環境変数を設定することで元のスクロールバーに戻せます: {{ic|1=GTK_OVERLAY_SCROLLING=0}}。[[環境変数#グラフィック環境]] を参照。<br />
<br />
あるいは、GTK 3.24.9 からは GTK 3 の設定でオーバーレイスクロールバーを無効化できます。設定ファイルの [Settings] セクションで gtk-overlay-scrolling の値を false に設定してください:<br />
<br />
{{hc|~/.config/gtk-3.0/settings.ini|2=<br />
[Settings]<br />
gtk-overlay-scrolling = false<br />
}}<br />
<br />
GTK 4 は、もはや {{ic|1=GTK_OVERLAY_SCROLLING}} をサポートしていません。master から[https://github.com/GNOME/gtk/commit/e49615184a9d85bb0bb4e289b3ee8252adee3813#diff-3cf94c6e1eb009e20985034bc2210bfd 削除]されました。GTK 4 では、スクロールバーのオーバーレイはツールキットの一部です。blanket toggle は、両方の組み合わせでテストしていないアプリケーションが壊れてしまうのを防ぐために削除されました。アプリケーション開発者がアプリの見た目を決定できるように、ツールキットは、オプトアウトあるいは設定を削除するメカニズムをユーザに提供しています。[https://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html#gtk-scrolled-window-set-overlay-scrolling gtk_scrolled_window_set_overlay_scrolling()] 関数を使って、''アプリケーションごとに''オーバーレイスクロールを有効化/無効化できます。アプリケーション開発者は、任意で [https://blog.gtk.org/2017/05/01/first-steps-with-gsettings/ GSettings] を使ってユーザの設定をプロパティにバインドできます。<br />
<br />
==== オーバーレイスクロールのインジケータを削除 ====<br />
<br />
オーバーレイスクロールバーの位置はアプリケーションウィンドウの細い破線で示されます。たとえ上述の環境変数を使ってオーバーレイスクールを無効化しても破線は消えません。インジケータの線を消すには、以下のファイルを作成してください:<br />
<br />
{{hc|~/.config/gtk-3.0/gtk.css|<br />
/* Remove dotted lines from GTK 3 applications */<br />
undershoot.top, undershoot.right, undershoot.bottom, undershoot.left { background-image: none; }<br />
}}<br />
<br />
=== 例 ===<br />
<br />
GTK の設定例:<br />
<br />
{{Note|一部の[[デスクトップ環境]] (例えば、[[GNOME]]) では無視される場合があります。}}<br />
<br />
{{hc|~/.gtkrc-2.0|2=<br />
gtk-theme-name="Arc-Dark"<br />
gtk-icon-theme-name="breeze-dark"<br />
gtk-font-name="Sans 11"<br />
gtk-cursor-theme-name="Breeze_Amber"<br />
gtk-cursor-theme-size=0<br />
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ<br />
gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR<br />
gtk-button-images=0<br />
gtk-menu-images=0<br />
gtk-enable-event-sounds=0<br />
gtk-enable-input-feedback-sounds=0<br />
gtk-xft-antialias=1<br />
gtk-xft-hinting=1<br />
gtk-xft-hintstyle="hintslight"<br />
gtk-xft-rgba="rgb"<br />
}}<br />
<br />
{{hc|~/.config/gtk-3.0/settings.ini|2=<br />
[Settings]<br />
gtk-theme-name=Arc-Dark<br />
gtk-icon-theme-name=breeze-dark<br />
gtk-font-name=Sans 11<br />
gtk-cursor-theme-name=Breeze_Amber<br />
gtk-cursor-theme-size=0<br />
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ<br />
gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR<br />
gtk-button-images=0<br />
gtk-menu-images=0<br />
gtk-enable-event-sounds=0<br />
gtk-enable-input-feedback-sounds=0<br />
gtk-xft-antialias=1<br />
gtk-xft-hinting=1<br />
gtk-xft-hintstyle=hintslight<br />
gtk-xft-rgba=rgb<br />
# gtk-decoration-layout=menu:close<br />
# gtk-application-prefer-dark-theme=1<br />
}}<br />
<br />
== GDK バックエンド ==<br />
<br />
GDK (GTK の抽象レイヤー) は GTK アプリケーションを表示するための複数のバックエンドをサポートしています。<br />
<br />
=== Wayland バックエンド ===<br />
<br />
GDK [[Wayland]] バックエンドは {{Pkg|gtk3}} 及びそれ以降でのみサポートされており、[[Wayland]] ディスプレイサーバを使用する際のデフォルトバックエンドとなっています。<br />
<br />
{{Pkg|gtk3}} より前のバージョンの GTK を使っているアプリケーションは Wayland をサポートしておらず、''X11'' バックエンドを使って Wayland セッションで実行するために Xwayland を使う必要があります。<br />
<br />
[[Wayland]] バックエンドを使用する際、一部の変数は {{ic|settings.ini}} から source されません。<br />
GSettings スキーマ {{ic|org.gnome.desktop.interface}} 内に存在しているキーが、{{ic|settings.ini}} の代わりにそこから読み込まれます。<br />
<br />
そのような変数の例は {{ic|gtk-color-scheme}} と {{ic|icon-theme}} です。[[Wayland]] 下で GTK アプリケーションにテーマを適用させるために、これらはキーを GSettings で設定しなければなりません。あるいは、テーマだけをカスタマイズすればよいのであれば、環境変数 {{ic|GTK_THEME}} を使用できます。<br />
<br />
これに関する詳細は、[https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland sway wiki の関連する記事]を参照してください。<br />
<br />
=== Xorg バックエンド ===<br />
<br />
[[Xorg]] ディスプレイサーバが使用されている場合、バックエンドのデフォルトは自動的に ''x11'' になります。<br />
<br />
環境変数 {{ic|1=GDK_BACKEND=x11}} を設定することで、Wayland セッション上で動作する GTK 3 アプリケーションに Xwayland を通して ''X11'' バックエンドを使用するように強制することが可能です。<br />
<br />
=== Broadway バックエンド ===<br />
<br />
GDK Broadway バックエンドは HTML5 とウェブソケットを使って、ウェブブラウザに GTK アプリケーションを表示することをサポートしています。<br />
[https://developer.gnome.org/gtk3/3.8/gtk-broadway.html]<br />
<br />
''broadwayd'' を使うときには、X と同じようにコロンを前に付けて、使用するディスプレイ番号を指定してください。デフォルトのディスプレイ番号は 0 です。<br />
<br />
$ display_number=:5<br />
<br />
次のコマンドで起動します。<br />
$ broadwayd $display_number <br />
<br />
デフォルトで使われるポートは:<br />
port = 8080 + $display_number<br />
<br />
ブラウザで http://127.0.0.1:port を開いてください。<br />
<br />
アプリを起動するには:<br />
<br />
$ GDK_BACKEND=broadway BROADWAY_DISPLAY=$display_number ''<<application>>''<br />
<br />
また、アドレスやポートを設定することも可能です:<br />
<br />
$ broadwayd --port $port_number --address $address $display_number<br />
<br />
== トラブルシューティング ==<br />
<br />
=== GTK 2 と GTK 3 アプリケーションでテーマが異なる ===<br />
<br />
通常、選択したテーマが GTK 2 と GTK 3 の両方をサポートしている場合、GTK 2 と GTK 3 アプリケーションの両方にテーマが適用されます。選択したテーマが GTK 2 しかサポートしてない場合、GTK 2 アプリケーションにはそのテーマが使われ、GTK 3 アプリケーションにはデフォルトの GTK テーマが使われます。選択したテーマが GTK 3 しかサポートしていない場合、GTK 3 アプリケーションにはそのテーマが使われ、GTK 2 アプリケーションにはデフォルトの GTK テーマが使われます。UI の外観を統一するために GTK 2 と GTK 3 両方をサポートしているテーマを使うと一番良い結果が得られます。<br />
<br />
インストールしたテーマでどれが GTK 2 と GTK 3 両方のバージョンを持っているか調べるには次のコマンドを使って下さい (空白が含まれている名前はひっかかりません):<br />
find $(find ~/.themes /usr/share/themes/ -wholename "*/gtk-3.0" | sed -e "s/^\(.*\)\/gtk-3.0$/\1/") -wholename "*/gtk-2.0" | sed -e "s/.*\/\(.*\)\/gtk-2.0/\1"/<br />
<br />
=== root アプリケーションにテーマが適用されない ===<br />
<br />
ユーザーテーマファイル ({{ic|$XDG_CONFIG_HOME/gtk-3.0/settings.ini}}, {{ic|~/.gtkrc-2.0}}) は他のアカウントからは読み込まれないため、選択したテーマは [[Root で X アプリケーションを起動|root で動かしている X アプリケーション]]には適用されません。以下のような解決方法があります:<br />
<br />
* シンボリックリンクを作成してください。例:<br />
# ln -s $HOME/.gtkrc-2.0 /etc/gtk-2.0/gtkrc<br />
# ln -s $HOME/.config/gtk-3.0/settings.ini /etc/gtk-3.0/settings.ini<br />
* システム全体にテーマファイルを設定: {{ic|/etc/gtk-3.0/settings.ini}} (GTK 3) or {{ic|/etc/gtk-2.0/gtkrc}} (GTK 2)<br />
* テーマを root で設定:<br />
# lxappearance<br />
* 設定デーモンを使用 (ほとんどのデスクトップ環境では設定デーモンが使われています)。デスクトップに依存しない [https://specifications.freedesktop.org/xsettings-spec/ XSettings] を使うデーモンは {{aur|xsettingsd-git}} でインストールできます。<br />
<br />
=== クライアントサイドデコレーション ===<br />
<br />
GTK 3.12 から [https://blogs.gnome.org/mclasen/2013/12/05/client-side-decorations-in-themes/ クライアントサイドデコレーション] が導入されており、タイトルバーはウィンドウマネージャから取り去られています。これによって [https://redmine.audacious-media-player.org/boards/1/topics/1135 タイトルバーが二重になる]、タイトルバーが全く表示されない、コンポジットを有効にした場合に [https://github.com/chjj/compton/issues/189 影が二重に表示される] などの問題が発生することがあります。<br />
<br />
(タイル型ウィンドウマネージャを使っている場合などに発生する) ウィンドウの周りの影と枠を消すには、以下のファイルを作成してください:<br />
<br />
{{hc|~/.config/gtk-3.0/gtk.css|<nowiki>.window-frame, .window-frame:backdrop {<br />
box-shadow: 0 0 0 black;<br />
border-style: none;<br />
margin: 0;<br />
border-radius: 0;<br />
}<br />
<br />
.titlebar {<br />
border-radius: 0;<br />
}<br />
<br />
.window-frame.csd.popup {<br />
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.13);<br />
}<br />
<br />
.header-bar {<br />
background-image: none;<br />
background-color: #ededed;<br />
box-shadow: none;<br />
}<br />
/* タイトルが二重になるのが気に食わない場合は、これを使うと良いでしょう。<br />
GtkLabel.title {<br />
opacity: 0;<br />
}*/<br />
</nowiki>}}<br />
<br />
視覚的な問題が続く場合、ここ[https://github.com/numixproject/numix-gtk-theme/issues/206#issuecomment-817660426]で説明されているように GTK Inspector を使って問題のある要素を探すと良いでしょう。<br />
<br />
ヘッダーバーのボタンを調整するには、{{ic|gtk-decoration-layout}} の設定を使います [https://developer.gnome.org/gtk3/stable/GtkSettings.html#GtkSettings--gtk-decoration-layout]。以下の例では全てのボタンを削除します:<br />
<br />
{{hc|~/.config/gtk-3.0/settings.ini|2=<br />
gtk-decoration-layout=menu:<br />
}}<br />
<br />
クライアントサイドデコレーションを消すには、{{AUR|gtk3-classic}} や {{AUR|gtk3-nocsd-git}} などの、パッチが適用されたライブラリを使うことができます。<br />
<br />
=== セディーユ ć/Ć ではなく ç/Ç が使われる ===<br />
<br />
Xcompose を使用した解決方法が [https://bugs.launchpad.net/ubuntu/+source/ibus/+bug/518056] や [https://bugs.launchpad.net/ubuntu/+source/ibus/+bug/518056/comments/37] に載っています (US 国際レイアウト)。<br />
<br />
=== accessibility bus に関する警告を表示させない ===<br />
<br />
[https://wiki.gnome.org/Accessibility Gnome Accessibility] 機能を使用していない場合、以下のような警告が発生することがあります:<br />
<br />
WARNING **: Couldn't connect to accessibility bus:<br />
<br />
これらの警告を消すには、{{ic|1=NO_AT_BRIDGE=1}} を設定してプログラムを実行するか、それをグローバルな[[環境変数]]として設定してください。<br />
<br />
=== タイトルバーの背景色がおかしい ===<br />
<br />
GTK テーマの背景色に擬態するウィンドウデコレーションテーマを使用する[[ウィンドウマネージャ]]を使っている場合、GTK 3 アプリケーションでタイトルバーの色がアプリケーションの色と完全に食い違って表示されることがあります。対応策としては、以下のファイルを作成してください:<br />
{{hc|~/.config/gtk-3.0/gtk.css|<br />
/* 背景色を常に使用する */<br />
GtkWindow {<br />
background-color: @theme_bg_color;<br />
}<br />
<br />
/* ツールチップの背景色のオーバーライドを修正する */<br />
.tooltip {<br />
background-color: rgba(0, 0, 0, 0.8);<br />
}<br />
<br />
.tooltip * {<br />
background-color: transparent;<br />
}<br />
<br />
/* Nautilus デスクトップのウィンドウの背景色のオーバーライドを修正する */<br />
NautilusWindow {<br />
background-color: transparent; <br />
}<br />
}}<br />
<br />
===タイル型ウィンドウマネージャでフォーカスイベントがおかしい ===<br />
<br />
{{Note|1=以下の設定は GTK3 アプリケーションのタッチスクリーンのサポートを無効化します [https://bugzilla.gnome.org/show_bug.cgi?id=677329#c14]。}}<br />
<br />
{{ic|1=GDK_CORE_DEVICE_EVENTS=1}} を[[環境変数#変数の定義|定義]]して xinput2 の代わりに GTK2 のスタイル入力を使うようにしてください [https://bugzilla.gnome.org/show_bug.cgi?id=677329#c10]。<br />
<br />
=== GTK 2 のファイルダイアログのサムネイル ===<br />
<br />
{{AUR|gtk2-patched-filechooser-icon-view}} と {{AUR|gtk3-patched-filechooser-icon-view}} をインストールすることで GTK のファイル選択ダイアログで、リストの代わりにサムネイルでファイルを閲覧するオプションが作られます。<br />
<br />
=== ボタンとメニューのアイコン ===<br />
<br />
{{Accuracy|問題を説明してください。GDM が使用されている場合、GNOME は {{ic|settings.ini}} を無視します。}}<br />
GNOME の Wayland セッション内の一部のアプリケーションで発生します。{{AUR|gtk3-patched-filechooser-icon-view}} がファイルが間違って設定されています。これは、他の GTK ベースのデスクトップ環境を試したときに発生する可能性があります。以下が、問題のある値です:<br />
<br />
{{hc|~/.config/gtk-3.0/settings.ini|<nowiki>[Settings]<br />
gtk-button-images=1<br />
gtk-menu-images=1</nowiki>}}<br />
<br />
これらの値を 0 に設定するか、ファイルを削除して GNOME のデフォルト設定を使用してください。<br />
<br />
=== GTK 3 で polkit を使用しない ===<br />
<br />
GTK 3 は印刷に必要な colord で polkit に依存しています。ただし印刷自体は polkit をインストールしていなくても可能です。少なくとも、モノクロ印刷と、パッケージバージョン gtk3-print-backends=3.22.19-2 と colord=1.4.1-1 で機能します。<br />
<br />
=== 一部の GTK 2 テーマで UI のカラーパレットしか変化しない ===<br />
<br />
GTK 2 のテーマによっては、UI のコントロールがデフォルトの Raleigh のままで、カラーパレットしか変わらないことがあります。原因はテーマが GTK 2 の Murrine エンジンを必要としているためです (GTK 2 プログラムは標準エラー出力にそのことを吐き出します)。{{Pkg|gtk-engine-murrine}} パッケージをインストールしてください。<br />
<br />
=== GTK file chooser にパッチを適用して通常のタイプを先に使用する ===<br />
<br />
GTK file chooser は、[[GNOME Files]] と同じ先行検索機能を使用します。これは非常に煩わしくなる可能性があり、他のデスクトップ環境とうまく適合しません。<br />
<br />
一部のアプリケーションは [[XDG デスクトップ ポータル]] をサポートしているため、アプリケーションで Native file chooser を使用できます。それが機能しない場合は、たとえば {{AUR|gtk3-classic}} などのパッチされた GTK を使用して先行入力機能を復元できます。<br />
<br />
=== GTK 4 アプリケーションの文字がぼやける、または正しく表示されない ===<br />
<br />
GTK 4 は、フォントのレンダリング時にヒントを出さずにグレースケールのアンチエイリアシングを行うように変更しました。GTK 3 の挙動の一部を復元する設定が利用できます [https://gitlab.gnome.org/GNOME/gtk/-/issues/3787#note_1260756]。HiDPI スクリーン以外に対しては、([https://gitlab.gnome.org/GNOME/gtk/-/issues/3787#note_1817867 2023年8月現在]) この設定はデフォルトでオンになっています。これにより、ほとんどのユーザーにとっては良い結果が得られるはずです。サブピクセル・アンチエイリアシングは利用できません。<br />
<br />
{{hc|~/.config/gtk-4.0/settings.ini|<nowiki>[Settings]<br />
gtk-hint-font-metrics=1</nowiki>}}<br />
<br />
== 参照 ==<br />
<br />
* [https://www.gtk.org/ GTK 公式ウェブサイト]<br />
* [[Wikipedia:ja:GTK (ツールキット)|GTK についての Wikipedia の記事]]<br />
<br />
{{TranslationStatus|GTK|2024-03-21|802442}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Unified_Extensible_Firmware_Interface&diff=36602
Unified Extensible Firmware Interface
2024-03-21T09:57:17Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ブートプロセス]]<br />
[[en:Unified Extensible Firmware Interface]]<br />
[[es:Unified Extensible Firmware Interface]]<br />
[[it:Unified Extensible Firmware Interface]]<br />
[[ru:Unified Extensible Firmware Interface]]<br />
[[zh-hans:Unified Extensible Firmware Interface]]<br />
{{Related articles start}}<br />
{{Related|Arch ブートプロセス}}<br />
{{Related|Master Boot Record}}<br />
{{Related|EFI システムパーティション}}<br />
{{Related|GUID Partition Table}}<br />
{{Related|セキュアブート}}<br />
{{Related|Unified カーネルイメージ}}<br />
{{Related articles end}}<br />
<br />
[https://www.uefi.org/ Unified Extensible Firmware Interface] (UEFI、EFI の後継) はオペレーティングシステムとファームウェア間のインターフェイスです。オペレーティングシステムを起動したり、プリブートアプリケーション用の標準的な環境を提供します。<br />
<br />
UEFI は [[Wikipedia:ja:BIOS|BIOS]] システムで一般的に使われている "[[Master Boot Record|MBR]] ブートコード" メソッドとは異なります。これらの違いや UEFI を用いた起動プロセスについては [[Arch ブートプロセス]] を見てください。UEFI ブートローダをセットアップするには [[ブートローダー]] を見てください。<br />
<br />
{{Note|初期のベンダー UEFI 実装は BIOS のものよりも多くのバグを含んでいる場合があります。そのようなシステムで解決不可能な問題に直面した場合は、レガシー BIOS を使用して起動することを検討してください。}}<br />
<br />
== UEFI のバージョン ==<br />
<br />
* UEFI は Intel の EFI としてバージョン 1.x で始まりました。<br />
* その後、the UEFI Forum とよばれる企業のグループが開発を引き継ぎ、EFI は Unified EFI へと名前を変え、バージョン 2.0 になりました。<br />
* EFI 1.x と明記しないかぎり、「EFI」と「UEFI」は相互に UEFI 2.x ファームウェアを意味するものとして使います。<br />
* Apple の EFI 実装は EFI 1.x バージョンでもなく UEFI 2.x バージョンでもなく、両方を混ぜあわせたものです。この種のファームウェアは (U)EFI の仕様には含まれていません、つまり、規格外の UEFI ファームウェアになります。また、以下の手順は明白に書かれている部分を除き、一般的な UEFI を対象としており、場合によっては手順のいくつかは [[MacBook|Apple Mac]] では動かなかったり違っていたりする可能性があります。<br />
<br />
最新の UEFI 仕様は https://uefi.org/specifications にて確認できます。<br />
<br />
== UEFI ファームウェアのビット数 ==<br />
<br />
UEFI においては、すべてのプログラムは OS ローダーであろうとユーティリティ(メモリテストやリカバリツール)であろうと、UEFI ファームウェアのビット数/アーキテクチャに対応する EFI アプリケーションである必要があります。<br />
<br />
最近の Apple Mac を含む x86_64 システムの大部分は x64 (64 ビット) UEFI ファームウェアを使用します。IA32 (32ビット) の UEFI を使うことが知られているデバイスは古い(2008年以前) Apple Mac や Intel Atom System-on-Chip システム(2013年11月2日現在)[https://web.archive.org/web/20201224150025/https://software.intel.com/content/www/us/en/develop/blogs/why-cheap-systems-run-32-bit-uefi-on-x64-systems.html]、そして Intel EFI 1.10 ファームウェア上で動作することが知られている一部の古い Intel のサーバーボードだけです。<br />
<br />
x64 UEFI ファームウェアは 32ビットの EFI アプリケーションの起動をサポートしません(x86_64 Linux とそのようなサポートを含む Windows のバージョン とは違って)。それゆえ、EFI アプリケーションは特定のファームウェアプロセッサのビット数/アーキテクチャ用にコンパイルされなければなりません。<br />
<br />
{{Note|IA32 UEFI のシステムでは、異なるモードでの起動をサポートするブートローダを使用する必要があります。例えば、[[systemd-boot]] などです。}}<br />
<br />
{{Warning|{{Pkg|grub}} 2:2.06.r566.g857af0e17-1 から、GRUB の {{ic|i386-efi}} ターゲットは壊れており、IA32 UEFI でブートするために使用することはできません。{{Bug|79098}} を参照してください。}}<br />
<br />
=== UEFI ファームウェアのビット数を調べる ===<br />
<br />
ファームウェアのビット数は起動されたオペレーティングシステムから確認できます。<br />
<br />
==== Linux で ====<br />
<br />
Linux カーネル 4.0 以上が走るディストリビューションでは、UEFI ファームウェアのビット数は sysfs インターフェイスを通して確認できます。以下を実行してください:<br />
<br />
$ cat /sys/firmware/efi/fw_platform_size<br />
<br />
このコマンドは、64ビット (x64) UEFI の場合は {{ic|64}}、32ビット(IA32) UEFI の場合は {{ic|32}} を返します。このファイルが存在しない場合は [[インストールガイド#起動モードの確認|UEFI モードで起動]]していないということです。<br />
<br />
==== macOS で ====<br />
<br />
2008年以前のほとんどの Mac は i386-efi ファームウェアを使っています。一方、2008年以降の Mac のファームウェアはほとんど x64 EFI です。Mac OS X Snow Leopard を動かすことのできる全ての Mac は x64 EFI 1.x ファームウェアを使っています。<br />
<br />
Mac の efi ファームウェアのアーキテクチャを知るには、Mac OS X の端末に次のコマンドを入力してください:<br />
<br />
$ ioreg -l -p IODeviceTree | grep firmware-abi<br />
<br />
コマンドの返事が {{ic|EFI32}} なら、IA32 (32ビット) EFI 1.x ファームウェアです。{{ic|EFI64}} と返ってくるなら、x64 EFI ファームウェアです。ほとんどの Mac は UEFI 2.x ファームウェアを持っていません、Apple の EFI 実装は UEFI 2.x の仕様に完全には準拠していないからです。<br />
<br />
==== Microsoft Windows で ====<br />
<br />
64ビット Windows は 32ビット UEFI からの起動をサポートしていません。なので、UEFI モードで 32ビット Windows を起動している場合は 32ビット UEFI を使用しているということになります。<br />
<br />
ビット数を調べるには {{ic|msinfo32.exe}} を実行してください。''システムの要約''を開き、"システムの種類"と"BIOS モード"の値を見てください。<br />
<br />
64ビット UEFI 上で動作している 64ビット Windows では {{ic|システムの種類: x64-ベース PC}}、{{ic|BIOS モード: UEFI}} となります。32ビット UEFI 上で動作する 32ビット Windows では {{ic|システムの種類: x86-ベース PC}}、{{ic|BIOS モード: UEFI}} となります。もし、"BIOS モード" が {{ic|UEFI}} でない場合、Windows は UEFI モードで起動していないということです。<br />
<br />
== UEFI の Linux カーネル設定オプション ==<br />
<br />
UEFI システムのために必要な Linux カーネル設定オプション[https://docs.kernel.org/arch/x86/x86_64/uefi.html]は:<br />
<br />
CONFIG_RELOCATABLE=y<br />
CONFIG_EFI=y<br />
CONFIG_EFI_STUB=y<br />
CONFIG_X86_SYSFB=y<br />
CONFIG_FB_SIMPLE=y<br />
CONFIG_FRAMEBUFFER_CONSOLE=y<br />
<br />
UEFI Runtime Variables Support (古い '''efivars sysfs''' インターフェイス - {{ic|/sys/firmware/efi/vars}})。このオプションは efivars と sysfs-efivars がともに有効な場合の潜在的な問題を回避するため無効にしてください。<br />
<br />
CONFIG_EFI_VARS=n<br />
<br />
[[GUID Partition Table]] (GPT) 設定オプション - UEFI サポートのために必須<br />
<br />
CONFIG_EFI_PARTITION=y<br />
<br />
EFI mixed-mode サポート - IA32 UEFI で x86_64 カーネルを起動するのに必要:<br />
<br />
CONFIG_EFI_MIXED=y<br />
<br />
{{Tip|すべての[[カーネル#公式サポートカーネル|公式サポートカーネル]]で上記のオプションはすべて適切に設定されています。}}<br />
<br />
== UEFI 変数 ==<br />
<br />
UEFI はオペレーティングシステムとファームウェアが情報を交換できるように変数を定義しています。UEFI ブート変数はブートローダや OS によって初期のシステムスタートアップのためにだけに使われます。UEFI ランタイム変数によって OS が UEFI ブートマネージャなどのファームウェアの設定や UEFI Secure Boot プロトコルなどのキーの管理ができるようになっています。次を実行することでリストを取得できます:<br />
<br />
$ efivar --list<br />
<br />
=== Linux カーネルでの UEFI 変数のサポート ===<br />
<br />
Linux カーネルは '''efivarfs''' ('''EFI''' '''VAR'''iable '''F'''ile'''S'''ystem) インターフェイスを通して UEFI 変数のデータをユーザスペースに公開します({{ic|CONFIG_EFIVAR_FS}})。このインターフェイスは {{ic|efivarfs}} カーネルモジュールを使って {{ic|/sys/firmware/efi/efivars}} にマウントされます。変数ごとの最大サイズ制限は無く、UEFI Secure Boot 変数をサポートします。これはカーネル 3.8 で導入されました。<br />
<br />
=== UEFI 変数のサポートを正しく動作させるための必要条件 ===<br />
<br />
# カーネルが [[EFISTUB]](任意で [[ブートマネージャー]])を通して、または[[ブートローダー]]によって UEFI モードで起動している必要があります。BIOS や CSM、(同じく CSM の) Apple の Boot Camp を通して起動してはいない必要があります。<br />
# EFI Runtime Services サポートがカーネルに存在する必要があります ({{ic|1=CONFIG_EFI=y}})。{{ic|zgrep CONFIG_EFI /proc/config.gz}} で確認できます。<br />
# カーネルコマンドラインでカーネルの EFI Runtime Services を無効にしてはいけません。つまり {{ic|noefi}} [[カーネルコマンドライン]]は使わないで下さい。<br />
# {{ic|efivarfs}} ファイルシステムが {{ic|/sys/firmware/efi/efivars}} にマウントされている必要があります。マウントされていない時は下の [[#efivarfs のマウント]] セクションに従って下さい。<br />
# {{ic|efivar}} はエラーを出さずに EFI 変数をリストアップ ({{ic|-l}}/{{ic|--list}} オプション) するはずです。<br />
<br />
上記の条件が満たされても EFI 変数のサポートが動かないときは、以下の回避策を試して下さい:<br />
<br />
# UEFI 変数のリストアップ({{ic|efivar -l}})の際に {{ic|efivar: error listing variables: Function not implemented}} と言うメッセージが出て、かつ、システムが[[リアルタイムカーネル]]で起動する場合、[[カーネルパラメータ]]に {{ic|1=efi=runtime}} を追加して再起動してください(これらのカーネルでは efivarfs 機能がデフォルトで無効化されています)。<br />
# さらなるドラブルシューティング手順は [[#ユーザスペースのツールが UEFI 変数のデータを変更できない]] を見てください。<br />
<br />
==== efivarfs のマウント ====<br />
<br />
{{ic|efivarfs}} が起動中に[[systemd]] によって自動的に {{ic|/sys/firmware/efi/efivars}} にマウントされない場合、UEFI 変数を ''efibootmgr'' のような[[#ユーザースペースツール|ユーザースペースツール]]に公開するために {{ic|efivarfs}} を手動でマウントする必要があります:<br />
<br />
# mount -t efivarfs efivarfs /sys/firmware/efi/efivars<br />
<br />
{{Note|上のコマンドは [[chroot]] の前と後、両方で実行する必要があります。}}<br />
<br />
カーネルドキュメントの [https://www.kernel.org/doc/html/latest/filesystems/efivarfs.html efivarfs.html] を参照してください。<br />
<br />
=== ユーザースペースツール ===<br />
<br />
UEFI 変数を表示・変更することができるツールがいくつかあります、即ち<br />
<br />
* {{App|efivar|UEFI 変数を操作するためのライブラリとツール (vathpela の efibootmgr によって使われます)|https://github.com/rhboot/efivar|{{Pkg|efivar}}}}<br />
* {{App|efibootmgr|UEFI Firmware Boot Manager の設定を操作するツール|https://github.com/rhboot/efibootmgr|{{Pkg|efibootmgr}}}}<br />
* {{App|uefivars|EFI 変数と追加の PCI 関連情報を表示します (内部で efibootmgr のコードを使っています)。|https://github.com/fpmurphy/Various/tree/master/uefivars-2.0|{{AUR|uefivars-git}}}}<br />
* {{App|efitools|UEFI セキュアブートプラットフォームを操作するための UEFI ツール|https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git|{{Pkg|efitools}}}}<br />
* {{App|Ubuntu's Firmware Test Suite|Intel/AMD PC のファームウェア上でサニティチェックを行うためのテストスイート|https://wiki.ubuntu.com/FirmwareTestSuite/|{{AUR|fwts-git}}}}<br />
<br />
==== efibootmgr ====<br />
<br />
{{Pkg|efibootmgr}} パッケージを[[インストール]]する必要があります。<br />
<br />
{{Note|<br />
* あなたの環境で ''efibootmgr'' が完全に動かない場合、再起動して [[#UEFI シェル]] に入り {{ic|bcfg}} コマンドを使ってブートローダのブートエントリを作成してください。<br />
* {{ic|efibootmgr}} を使えない場合、UEFI BIOS によっては BIOS から直接 uefi のブートオプションを管理できることがあります。例えば、ASUS の BIOS には "Add New Boot Option" からローカルの EFI System Partition を選択して直接 EFI スタブの位置を入力できます (例えば {{ic|\EFI\refind\refind_x64.efi}})。<br />
* 下のコマンドではサンプルとして [[rEFInd]] ブートローダを使っています。<br />
}}<br />
<br />
''efibootmgr'' を使って新しいブートオプションを追加するには、以下の3つを知っている必要があります:<br />
<br />
# [[EFI システムパーティション]] (ESP) を含むディスク (例: {{ic|/dev/sda}} {{ic|/dev/nvme0n1}})。<br />
# そのディスク上にある ESP のパーティション番号。{{ic|/dev/sda''Y''}} や {{ic|/dev/nvme0n1p''Y''}} の {{ic|''Y''}} の部分のことです。<br />
# EFI アプリケーションへのパス (ESP のルートからの相対パス)<br />
<br />
例えば、{{ic|/efi}} が ESP のマウントポイントである場合に {{ic|/efi/EFI/refind/refind_x64.efi}} 用のブートオプションを追加したい場合、以下を実行してください:<br />
<br />
{{hc|$ findmnt /efi|2=<br />
TARGET SOURCE FSTYPE OPTIONS<br />
/efi /dev/sda1 vfat rw,flush,tz=UTC<br />
}}<br />
<br />
この例では、{{man|8|findmnt}} コマンドは、ESP がディスク {{ic|/dev/sda}} 上にあり、そのパーティション番号が 1 であることを示しています。EFI アプリケーションへの、ESP をルートとした相対パスは {{ic|/EFI/refind/refind_x64.efi}} となっています。故に、ブートエントリを以下のように作成することになります:<br />
<br />
# efibootmgr --create --disk /dev/sda --part 1 --loader '\EFI\refind\refind_x64.efi' --label 'rEFInd Boot Manager' --unicode<br />
<br />
さらなる情報は {{man|8|efibootmgr}} または [https://raw.githubusercontent.com/rhinstaller/efibootmgr/master/README efibootmgr README] を見てください。<br />
<br />
{{Note|UEFI 仕様では、逆スラッシュ {{ic|\}} がパスセパレータとして使用されますが、''efibootmgr'' は自動的に UNIX スタイルの {{ic|/}} パスセパレータを変換することができます。}}<br />
<br />
=== UEFI 変数へのアクセスを無効化 ===<br />
<br />
UEFI へのアクセスは OS の実行レベルを超えて害を及ぼす可能性があります。実際、悪意のあるアクターがマシンの完全な制御を奪うことのできる [https://binarly.io/posts/finding_logofail_the_dangers_of_image_parsing_during_system_boot/index.html LogoFAIL] という危険な UEFI エクスプロイトが存在します。貧弱な UEFI 実装では場合によってはハードウェアレベルで起動不可能にすることも可能です。[https://github.com/systemd/systemd/issues/2402#issuecomment-176806817]<br />
<br />
ゆえに、UEFI 変数へのアクセスは日常的なシステム使用において必要とされないので、潜在的なセキュリティ違反や偶発的な害を防ぐために無効化しておくことをおすすめします。<br />
<br />
可能な方法は:<br />
<br />
* {{ic|efivars}} を [[fstab]] を用いて読み取り専用モードでマウントする。例えば: {{bc|efivarfs /sys/firmware/efi/efivars efivarfs ro,nosuid,nodev,noexec 0 0}}<br />
* {{ic|noefi}} [[カーネルパラメータ]]を使用して、OS から UEFI へのアクセスを完全に無効化する。<br />
<br />
{{Note|UEFI [[#ユーザスペースツール|ユーザスペースツール]] は UEFI 変数へのアクセスが無効化された状態では使用できないので、必要な設定をすべて前もって行っておいてください。また、UEFI 関連のコマンド(例: {{ic|systemctl reboot --firmware-setup}}) も機能しなくなります。}}<br />
<br />
== UEFI シェル ==<br />
<br />
UEFI シェルは、uefi ブートローダを含む、uefi アプリケーションを起動するためのファームウェア用のシェル/ターミナルです。それとは別に、シェルは、システムやファームウェアのメモリーマップ (memmap) などの様々な情報を取得したり、ブートマネージャ変数を変更したり (bcfg)、パーティションプログラムを実行したり (diskpart)、uefi ドライバをロードしたり、テキストファイルを編集したり (edit) するのにも使われます。<br />
<br />
=== UEFI シェルを入手する ===<br />
<br />
Tianocore EDK2 プロジェクトから BSD ライセンスの UEFI シェルをダウンロードできます:<br />
<br />
* Shell v2:<br />
** Arch インストールメディアの {{ic|/shellx64.efi}}。ISO がビルドされたときの {{ic|/usr/share/edk2-shell/x64/Shell_Full.efi}} のコピーです。<br />
** {{Pkg|edk2-shell}} パッケージ - x64 (64ビット) UEFI 環境用の x64 シェルと IA32 (32ビット) UEFI 環境用の IA32 シェルを提供します - 最新の Tianocore EDK2 リリースから直接コンパイル<br />
** {{AUR|uefi-shell-git}} パッケージ - x64 (64ビット) UEFI 環境用の x64 シェルと IA32 (32ビット) UEFI 環境用の IA32 シェルを提供します - 最新の Tianocore EDK2 ソースから直接コンパイル<br />
<br />
* Shell v1:<br />
** TianoCore 由来の [https://github.com/tianocore/edk2/tree/UDK2018/EdkShellBinPkg プリコンパイル済み UEFI Shell v1 バイナリ] (2014/1/10 から上流は一度もアップデートされていません)。<br />
<br />
* 派生版:<br />
** [https://drive.google.com/uc?export=download&id=1OBXYj6MEs7VAZbYnjD9FxOYcZYIQoq36 プリコンパイル済み UEFI Shell v2 バイナリと、UEFI pre-2.3 ファームウェアで動くように変更された bcfg]{{Dead link|2023|07|30|status=403}} - Clover EFI ブートローダ由来。<br />
** [https://github.com/acidanthera/OpenCorePkg/releases 広い範囲のファームウェアと互換性のあるプリコンパイル済み UEFI Shell v2 バイナリ] - OpenCore ブートローダ由来。リリースアーカイブでは: {{ic|EFI/OC/Tools/OpenShell.efi}}。<br />
<br />
Shell v2 は UEFI 2.3 以上のシステム上でだけ動作します。UEFI 2.3 以上のシステムでは Shell v1 より v2 を使うことが推奨されます。Shell v1 はスペックに関係なく全ての UEFI システムで動作するはずです。詳しくは [https://github.com/tianocore/tianocore.github.io/wiki/ShellPkg ShellPkg] や [https://edk2-devel.narkive.com/zCN4CEnb/inclusion-of-uefi-shell-in-linux-distro-iso Inclusion of UEFI shell in Linux distro iso] を見て下さい。<br />
<br />
=== UEFI シェルの起動 ===<br />
<br />
数少ない Asus や他の AMI Aptio x64 UEFI ファームウェアベースのマザーボード (Sandy Bridge 以降) では、''Launch EFI Shell from filesystem device'' と呼ばれるオプションが提供されています。これらのマザーボードでは、x64 UEFI Shell を [[EFI システムパーティション]] のルートに {{ic|shellx64.efi}} という名前で コピーしてください。<br />
<br />
{{Tip|<br />
* Arch Linux インストールメディアにはボリュームのルートに {{ic|shellx64.efi}} があります。<br />
* [[rEFInd]] と [[systemd-boot]] は、{{ic|shellx64.efi}} が [[EFI システムパーティション]]のルートにある場合、自動的に UEFI シェルのブートメニューエントリを追加します。<br />
}}<br />
<br />
Phoenix SecureCore Tiano UEFI ファームウェアを使っているシステムには UEFI シェルが組み込まれていることが知られており {{ic|F6}}, {{ic|F11}}, {{ic|F12}} キーのどれかで起動できます。<br />
<br />
{{Note|上記のメソッドを使って直接ファームウェアから UEFI シェルを起動できない場合、{{ic|''/USB_drive_mointpoint''/EFI/BOOT/BOOTx64.EFI}} としてコピーされた EFI バイナリのある [[FAT32]] USB ペンドライブを作成してください。この USB はファームウェアブートメニューを表示するはずです。このオプションを起動することで UEFI シェルが起動されます。}}<br />
<br />
=== 重要な UEFI シェルコマンド ===<br />
<br />
UEFI シェルコマンドはそれぞれのページの出力ごとにポーズを入れる {{ic|-b}} オプションをサポートしています。利用できるコマンドを表示するには {{ic|help -b}} を実行してください。<br />
<br />
詳しい情報は [https://software.intel.com/en-us/articles/efi-shells-and-scripting/ Intel Scripting Guide 2008]{{Dead link|2023|07|30|status=404}} と [https://software.intel.com/en-us/articles/uefi-shell Intel "Course" 2011]{{Dead link|2023|07|30|status=404}} を見てください。<br />
<br />
==== bcfg ====<br />
<br />
{{ic|bcfg}} コマンドは UEFI NVRAM エントリを修正して、ブートエントリやドライバオプションを変更できるようにするために使われます。このコマンドについては [https://uefi.org/sites/default/files/resources/UEFI_Shell_2_2.pdf UEFI Shell Specification 2.2] ドキュメントの 96 ページ (Section 5.3) で詳しく説明されています。<br />
<br />
{{Note|<br />
* {{ic|efibootmgr}} が上手くブートエントリを作成できないときだけ {{ic|bcfg}} を使うことが推奨されています。<br />
* UEFI Shell v1 の公式バイナリは {{ic|bcfg}} コマンドをサポートしていません。[[#UEFI シェルを入手する]] を見て、UEFI pre-2.3 ファームウェアで動作する、修正された UEFI Shell v2 バイナリを入手してください。<br />
}}<br />
<br />
現在のブートエントリのリストを出力するには:<br />
<br />
Shell> bcfg boot dump -v<br />
<br />
4番目の(番号は0から始まります)オプションとしてブートメニューに rEFInd (例) のブートメニューエントリを追加するには:<br />
<br />
Shell> bcfg boot add 3 FS0:\EFI\refind\refind_x64.efi "rEFInd Boot Manager"<br />
<br />
{{ic|FS0:}} は EFI System Partition に、{{ic|FS0:\EFI\refind\refind_x64.efi}} は起動するファイルにそれぞれ適切にマッピングしてください。<br />
<br />
ブートローダ無しでシステムを直接ブートするエントリを追加するには、カーネルを [[EFISTUB#bcfg|EFISTUB]] として使用してブートオプションを設定してください:<br />
<br />
Shell> bcfg boot add '''N''' fs'''V''':\vmlinuz-linux "Arch Linux"<br />
Shell> bcfg boot -opt '''N''' "root='''/dev/sdX#''' initrd=\initramfs-linux.img"<br />
<br />
{{ic|N}} は優先度、{{ic|V}} は EFI システムパーティションのボリューム番号、{{ic|/dev/sdX#}} はルートパーティションです。<br />
<br />
4番目のブートオプションを削除するには:<br />
<br />
Shell> bcfg boot rm 3<br />
<br />
ブートオプション #3 を #0 (つまり UEFI ブートメニューの最初のエントリ) に移動するには:<br />
<br />
Shell> bcfg boot mv 3 0<br />
<br />
bcfg のヘルプを見るには<br />
<br />
Shell> help bcfg -v -b<br />
<br />
もしくは<br />
<br />
Shell> bcfg -? -v -b<br />
<br />
==== map ====<br />
<br />
{{ic|map}} はデバイスマッピング (つまり、利用可能なファイルシステム ({{ic|FS0}}) とストレージデバイス ({{ic|blk0}}) の名前) の一覧を表示します。<br />
<br />
{{ic|cd}} や {{ic|ls}} などのファイルシステムコマンドを実行する前に、ファイルシステムの名前を入力してシェルを適切なファイルシステムに変更する必要があります:<br />
<br />
Shell> fs0:<br />
fs0:\> cd EFI/<br />
<br />
==== edit ====<br />
<br />
{{ic|edit}} コマンドは nano テキストエディタに似たベーシックなテキストエディタを提供します、ただし機能は少なくなっています。EDIT コマンドのテキストエディタは UTF-8 エンコードや LF と CRLF の改行コードを扱うことができます。<br />
<br />
例として、システムパーティションの rEFInd の {{ic|refind.conf}} を編集するには (ファームウェア内の {{ic|FS0:}})<br />
<br />
Shell> edit FS0:\EFI\refind\refind.conf<br />
<br />
ヘルプを出すには {{ic|Ctrl+e}} を押して下さい。<br />
<br />
== UEFI ドライバ ==<br />
<br />
UEFI ドライバとは、なんらかの機能をサポートするためのソフトウェアのことです。例えば、NTFS でフォーマットされたパーティションは通常 UEFI シェルからアクセスできません。{{Pkg|efifs}} パッケージには、EFI シェル内から多くのファイルシステムを読み込めるようにするドライバが含まれています。使用例を挙げましょう。そのようなドライバを UEFI シェルからアクセス可能なパーティションにコピーして、UEFI シェルから以下のようなコマンドを実行します:<br />
<br />
Shell> load ntfs_x64.efi<br />
Shell> map -r<br />
<br />
map コマンドを実行したあと、ユーザは NTFS でフォーマットされたパーティションに UEFI シェル内からアクセスできるようになっているはずです。<br />
<br />
{{Tip|<br />
* [[systemd-boot]] は {{ic|''esp''/EFI/systemd/drivers/}} から UEFI ドライバを自動的に読み込みます。<br />
* [[rEFInd]] は、ESP 上の rEFInd インストール先ディレクトリのサブディレクトリ {{ic|drivers}} と {{ic|drivers_x64}} (例: {{ic|''esp''/EFI/refind/drivers_x64/}}) から UEFI ドライbを自動的に読み込みます。他のディレクトリをスキャンするように設定することも可能です。<br />
}}<br />
<br />
== UEFI ブータブルメディア ==<br />
<br />
=== ISO から UEFI ブータブル USB を作成する ===<br />
<br />
[[USB インストールメディア#ISO をそのまま使う (BIOS と UEFI)]] を参照してください。<br />
<br />
=== 光学メディアから UEFI ブートサポートを削除する ===<br />
<br />
{{Note|<br />
* このセクションでは USB フラッシュドライブではなく '''CD/DVD''' (EL Torito からブートする光学メディア) から UEFI ブートサポートを削除する方法を説明しています。<br />
* USB スティック上の UEFI 機構を隠すには、ISO をフラッシュドライブにコピーしたあとでパーティションエディタを使ってください。{{ic|EF}} タイプのパーティションを削除してください。GPT に変換するか尋ねられたときは'''いいえ'''と答えてください。<br />
}}<br />
<br />
ほとんどの32ビット EFI Mac と一部の64ビット EFI Mac は UEFI(X64)+BIOS ブータブル CD/DVD からの起動を拒否します。光学メディアを使ってインストールをしたい場合、まず UEFI サポートを削除する必要があるかもしれません。<br />
<br />
UEFI 特有のディレクトリを除いて ISO を展開してください:<br />
<br />
$ mkdir extracted_iso<br />
$ bsdtar -x --exclude=EFI/ --exclude=loader/ -f archlinux-''version''-x86_64.iso -C extracted_iso<br />
<br />
そして、{{Pkg|libisoburn}} の {{man|1|xorriso}} を使って ISO を再ビルドしてください。この時、UEFI 光学メディアのブートサポートを除いてください。正しいボリュームラベルを設定してください(例えば {{ic|ARCH_202103}})。ボリュームラベルは、オリジナルの ISO に対して {{man|1|file}} を使うことで得られます。<br />
<br />
{{bc|1=<br />
$ xorriso -as mkisofs \<br />
-iso-level 3 \<br />
-full-iso9660-filenames \<br />
-joliet \<br />
-joliet-long \<br />
-rational-rock \<br />
-volid "ARCH_''YYYYMM''" \<br />
-appid "Arch Linux Live/Rescue CD" \<br />
-publisher "Arch Linux <https://archlinux.org>" \<br />
-preparer "prepared by $USER" \<br />
-eltorito-boot syslinux/isolinux.bin \<br />
-eltorito-catalog syslinux/boot.cat \<br />
-no-emul-boot -boot-load-size 4 -boot-info-table \<br />
-isohybrid-mbr "extracted_iso/syslinux/isohdpfx.bin" \<br />
-output archlinux-''version''-x86_64-noUEFI.iso extracted_iso/<br />
}}<br />
<br />
{{ic|archlinux-''version''-x86_64-noUEFI.iso}} を光学メディアに焼いて、通常のインストールを続けてください。<br />
<br />
== ネイティブサポートのない環境で UEFI をテストする ==<br />
<br />
=== 仮想マシン用の OVMF ===<br />
<br />
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンで UEFI サポートを有効にする TianoCore プロジェクトです。OVMF には QEMU 用のサンプル UEFI ファームウェアが含まれています。<br />
<br />
{{Pkg|edk2-ovmf}} をインストールできます。<br />
<br />
仮想マシンの非揮発性変数のローカルコピーを作成することが[https://www.linux-kvm.org/downloads/lersek/ovmf-whitepaper-c770f8c.txt 推奨]されています:<br />
<br />
$ cp /usr/share/edk2/x64/OVMF_VARS.4m.fd my_OVMF_VARS.4m.fd<br />
<br />
OVMF ファームウェアとこの変数を使うには、以下を QEMU コマンドに追加してください:<br />
<br />
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \<br />
-drive if=pflash,format=raw,file=my_OVMF_VARS.4m.fd<br />
<br />
例えば:<br />
<br />
$ qemu-system-x86_64 -enable-kvm -m 1G -drive if=pflash,format=raw,readonly,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd -drive if=pflash,format=raw,file=my_OVMF_VARS.4m.fd …<br />
<br />
=== BIOS システム専用の DUET ===<br />
<br />
DUET は、BIOS の OS ブートと同じような方法で、BIOS 環境から完全な UEFI 環境をチェーンロードできるようにする TianoCore プロジェクトです。この方法については広く[https://www.insanelymac.com/forum/topic/186440-linux-and-windows-uefi-boot-using-tianocore-duet-firmware/ 議論されています]。ビルド済み DUET イメージは、いくつかの[https://gitlab.com/tianocore_uefi_duet_builds/tianocore_uefi_duet_installer リポジトリ]{{Dead link|2023|04|07|status=404 Page Not Found}}のどれかからダウンロードできます。DUET をセットアップする特定の方法については、特定の[https://gitlab.com/tianocore_uefi_duet_builds/tianocore_uefi_duet_installer/blob/master/Migle_BootDuet_INSTALL.txt 指示]{{Dead link|2023|04|07|status=404 Page Not Found}}を読んでください。しかし、2018年11月に DUET のコードが TianoCore git リポジトリから削除されました。<br />
<br />
また、修正 DUET イメージを提供する [[Clover]] を試すことも可能です。特定環境の修正が含まれており gitlab リポジトリと比べて頻繁に更新されています。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== Windows で固まった際に Arch Linux に戻る ===<br />
<br />
Windows で固まった際に Arch Linux に戻るには、Windows PowerShell コマンド {{ic|shutdown /r /o}}、または ''Settings > Update & Security > Recovery > Advanced startup'' の ''Restart now'' を選んで Windows の ''Advanced startup'' に進んでください。''Advanced startup'' メニューに行き着いた際に、''Use a device'' を選んでください。これには実際の UEFI ブートオプションが含まれています(USB や CD に限らず、ハードドライブ内の OS も起動できます)。そして、"Arch Linux" を選んでください。<br />
<br />
=== ファンクションキー無しでファームウェアセットアップに入る ===<br />
<br />
[[:en:Lenovo XiaoXin 15are 2020]] のような一部のノート PC では、{{ic|F2}} や {{ic|F12}} のようなキーを使用しても何も起こりません。OEM にノート PC を返却しメインボード情報の修復を行えばおそらく修正可能ですが、時々これが不可能である、または望ましくない場合があります。しかし、ファームウェアセットアップに入る他の方法が存在します:<br />
<br />
* [[systemd#電源管理|systemctl]] を使用: {{bc|$ systemctl reboot --firmware-setup}} これによりコンピュータが再起動され、ファームウェアセットアップに入ります。<br />
* [[GRUB]] を使用: コマンドラインに入るために {{ic|c}} を押し、GRUB コマンドラインで {{ic|fwsetup}} を使用してファームウェアセットアップに入る。<br />
* Windows で: ''Advanced Startup'' に入る。[[#Windows で固まった際に Arch Linux に戻る]] を見てください。<br />
<br />
=== ユーザスペースのツールが UEFI 変数のデータを変更できない ===<br />
<br />
如何なるユーザスペースツールを持ってしても UEFI 変数のデータを変更できない場合、{{ic|/sys/firmware/efi/efivars/dump-*}} ファイルが存在するかどうかを確認してください。存在する場合、それらを削除し、再起動して再び試してみてください。<br />
<br />
この手順でもこの問題を解決できない場合、{{ic|efi_no_storage_paranoia}} [[カーネルパラメータ]]を使用して起動してみてください(このカーネルパラメータは、UEFI 変数の書き込み/変更を妨げてしまうカーネル UEFI 変数ストレージスペースチェックを無効化します)。<br />
<br />
{{Warning|{{ic|efi_no_storage_paranoia}} は必要なときにだけ使用するべきで、普段のブートオプションとして残しておくべきではありません。このカーネルコマンドラインは、NVRAM が満杯になった際にマシンが起動できなることを防止するセーフガードを無効化する効果があります。詳細は {{Bug|34641}} を見てください。}}<br />
<br />
=== efibootmgr でブートエントリを新規作成できない ===<br />
<br />
カーネルと ''efibootmgr'' のバージョンの組み合わせによっては、ブートエントリの新規作成ができなるなるかもしれません。これは NVRAM の空き領域の不足によるものであることがあります。[[#ユーザスペースのツールが UEFI 変数のデータを変更できない]] の解決策を試すことができます。<br />
<br />
また、''efibootmgr'' をバージョン 0.11.0 まで[[ダウングレード]]してみることもできます。このバージョンは Linux バージョン 4.0.6 で機能します。詳細はバグのディスカッション {{Bug|34641}}、特に [https://bugs.archlinux.org/task/34641#comment111365 closing comment] を見てください。<br />
<br />
=== Windows によってブート順序が変わってしまう ===<br />
<br />
[[Windows と Arch のデュアルブート]]をしていて、マザーボードがあなたの選んだ EFI アプリケーションではなく Windows を即座に起動する場合、いくつかのあり得る原因と回避策があります。<br />
<br />
* [[Windows と Arch のデュアルブート#高速スタートアップとハイバネート|高速スタートアップ]]が Windows の電源オプションで無効化されていることを確認してください。<br />
* [[セキュアブート]]がファームウェアで無効化されていることを確認してください(署名済みのブートローダを使用していない場合)。<br />
* UEFI のブート順序で Windows Boot Manager が1番めに設定されていないことを確認してください(例: [[#efibootmgr|efibootmgr]] を使用)。一部のマザーボードは、Windows によって efibootmgr を使って設定したものを検出するとデフォルトで上書きします。これは Packard Bell ノート PC で確認されています。<br />
* マザーボードがデフォルトブートパス ({{ic|\EFI\BOOT\BOOTx64.EFI}}) を起動する場合、このファイルは Windows ブートローダで上書きされる場合があります。[[#efibootmgr|efibootmgr]] などを使用して、正しい<br />
ブートパスを設定してみてください。<br />
* 前の手順でうまく行かなかった場合、Windows ブートローダに異なる EFI アプリケーションを実行するように指示することができます。Windows 管理者コマンドプロンプトから {{ic|bcdedit /set "{bootmgr}" path "\EFI\''path''\''to''\''app.efi''"}}。<br />
* または、{{ic|efibootmgr -A -b ''bootnumber''}} を root として実行することで Windows Boot Manager を無効化する。{{ic|''bootnumber''}} の部分は実際の Windows Boot Manager のブート番号に置き換えてください。{{ic|efibootmgr}} をオプション足で実行することでブート番号を確認できます。<br />
* または、Windows を起動するたびにブート順序が正しく設定されているかを確認するスタートアップスクリプトを Windows で設定することができます。<br />
*# 管理者権限でコマンドプロンプトを開き、{{ic|bcdedit /enum firmware}} を実行して、お望みのブートエントリを見つけてください。<br />
*# カッコも含めて識別子をコピーしてください。例: {{ic|<nowiki>{31d0d5f4-22ad-11e5-b30b-806e6f6e6963}</nowiki>}}<br />
*# 次のコマンドを含むバッチファイルを作成してください: {{ic|bcdedit /set "{fwbootmgr}" DEFAULT "''{コピーしたブート識別子}''"}}<br />
*# ''gpedit.msc'' を開き、''Local Computer Policy > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown)'' にある ''Startup'' をクリックしてください。<br />
*# ''Scripts'' タブに行き、''Add'' ボタンをクリックし、そのバッチファイルを選択してください。<br />
:: 注: [https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/how-to-install-gpeditmsc-in-window-10/f5e9c4fa-8d46-444c-acd7-5cabaea9fc71 Windows 10 Home は公式には gpedit.msc を含んでいません。しかし、それを手動でインストールする、サポートされない回避策があります。]<br />
* または、Windows でスタートアップするクリプトを実行するためにタスクスケジューラを使用することができます:<br />
*# 上記の1から3の手順に従って、バッチファイルを作成してください。<br />
*# ''taskschd.msc'' を実行し、''Action'' メニュから ''Create Task...'' を選んでください。<br />
*# ''General'' タブで:<br />
*#: 適当な任意の ''Name'' と ''Description'' を入力してください。<br />
*#: 選択したユーザアカウントが "Administrator" (管理者)であることを確認してください。"Standard User" であってはなりません。<br />
*#: "''Run whether user is logged in or not''" を選択してください。<br />
*#: "''Run with highest privileges''" を選択してください。<br />
*# ''Triggers'' タブで、メニューから "''At startup''" を選択して、その後 ''OK'' を押してください。<br />
*# ''Actions'' タブで、''New...'' をクリックし、''Browse...'' をクリックし、手順1 で作成したバッチファイルを選択してください。<br />
*# ''Conditions tab'' タブで、''Power'' オプションのチェックを解除してください。そうすれば、バッテリ駆動時にスクリプトが実行されます(ラップトップの場合)。<br />
#* ''OK'' をクリックして、パスワードのプロンプトが表示された場合は手順4で選択したユーザアカウントのパスワードを入力してください。<br />
<br />
=== USB メディアが黒画面で固まる ===<br />
<br />
この問題は [[Kernel Mode Setting|KMS]] の問題によって起こることがあります。USB を起動するときは [[カーネルモード設定#モード設定を無効にする|KMS を無効化]]してみて下さい。<br />
<br />
=== ファームウェアのメニューに UEFI ブートローダーが表示されない ===<br />
<br />
一部のファームウェアはカスタムのブートエントリをサポートしていません。そのようなファームウェアはハードコードされたブートエントリからしか起動しません。<br />
<br />
典型的な回避策は、NVRAM のブートエントリに頼るのではなく、[[EFI システムパーティション]]内の共通フォールバックパスの一つに[[ブートローダー]]をインストールすることです。<br />
<br />
以下のセクションではそのフォールバックパスについて説明しています。<br />
<br />
==== リムーバブルドライブのデフォルトブートパス ====<br />
<br />
UEFI 仕様では、リムーバブルメディアから起動するための EFI バイナリのデフォルトファイルパスが定義されています。関連するものとしては:<br />
<br />
* {{ic|''esp''/EFI/BOOT/BOOTx64.EFI}} - x64 UEFI 用<br />
* {{ic|''esp''/EFI/BOOT/BOOTIA32.EFI}} - IA32 UEFI 用<br />
<br />
仕様では、これらはリムーバブルドライブのみ用であると定義されている一方、ほとんどのファームウェアはこれらの起動をすべてのドライブでサポートしています。<br />
<br />
ブートローダーをデフォルト/フォールバックブートパスにインストール/統合する方法については適切な[[ブートローダー]]の記事を見てください。<br />
<br />
==== Microsoft Windows ブートローダの場所 ====<br />
<br />
Itenl Z77 チップセット搭載の一部のボードのような特定の UEFI マザーボードでは、UEFI シェルから {{ic|efibootmgr}}/{{ic|bcfg}} を使用してエントリを追加することができません。NVRAM に追加したあとにエントリがブートメニューに表示されないためです。<br />
<br />
この問題はマザーボードが Microsoft Windows しか読み込めないため発生します。これを解決するには、Windows が使用する場所に ''.efi'' ファイルを配置する必要があります。<br />
<br />
Arch Linux インストールメディア({{ic|FSO:}}) からハードドライブ({{ic|FS1:}})上の [[ESP]] パーティション内の Microsoft ディレクトリへ {{ic|BOOTx64.EFI}} ファイルをコピーしてください。EFI シェルを起動し、以下を実行してください:<br />
<br />
Shell> mkdir FS1:\EFI\Microsoft<br />
Shell> mkdir FS1:\EFI\Microsoft\Boot<br />
Shell> cp FS0:\EFI\BOOT\BOOTx64.EFI FS1:\EFI\Microsoft\Boot\bootmgfw.efi<br />
<br />
再起動後、NVRAM に追加したエントリがブートメニュに表示されるはずです。<br />
<br />
=== efibootmgr で作成したブートエントリが UEFI に表示されない ===<br />
<br />
''efibootmgr'' は EDD 3.0 の検出に失敗する可能性があり、その結果、NVRAM に利用不可能なブートエントリを作成してしまいます。詳細は [https://github.com/rhboot/efibootmgr/issues/86 efibootmgr issue 86] を見てください。<br />
<br />
これを回避するには、ブートエントリを手動で作成する際に、{{ic|-e 3}} オプションを ''efibootmgr'' コマンドに追加してください。例:<br />
<br />
# efibootmgr --create --disk /dev/sda --part 1 --loader '\EFI\refind\refind_x64.efi' --label 'rEFInd Boot Manager' --unicode '''-e 3'''<br />
<br />
{{ic|grub-install}} や {{ic|refind-install}} のようなブートローダインストーラを修復するには、{{ic|/usr/local/bin/efibootmgr}} ラッパースクリプトを作成し、それを[[実行可能属性|実行可能]]にしてください:<br />
<br />
{{hc|/usr/local/bin/efibootmgr|<br />
#!/bin/sh<br />
<br />
exec /usr/bin/efibootmgr -e 3 "$@"<br />
}}<br />
<br />
=== UEFI ブートエントリが、参照するドライブを取り外すと消える ===<br />
<br />
一部のファームウェアは、参照されているドライブが起動中に存在しない場合、そのブートエントリを削除します。これは、ドライブを頻繁に取り付け/取り外ししたり、リムーバブルドライブから起動する際に問題となりえます。<br />
<br />
解決策は、[[ブートローダー]]を[[#リムーバブルドライブのデフォルトブートパス|デフォルト/フォールバックブートパス]]にインストールすることです。<br />
<br />
=== ブートエントリがランダムに削除される ===<br />
<br />
一部のマザーボードは、NVRAM の空き領域が足りない場合、ブートエントリの作成時にエラーを表示せずに、ブートエントリを削除してしまうことがあります。これを防ぐには、エントリの作成プロセスを最小限にして、追加されるブートエントリの数を減らし、さらに、UEFI 設定から [[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] を無効化して、自動ドライブブートエントリの数も減らしてください。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838 BBS#1608838] を参照してください。<br />
<br />
ブートエントリが削除されてしまう他の原因として、UEFI 仕様では「NVRAM メンテナンス」をブート中に実行することが OEM に許可されていることも挙げられます。そのようなメーカーのデバイスは、事前定義されハードコードされているデバイス上のパスで EFI アプリケーションを探索するだけです。何も見つけられなかった場合、デバイス上には OS が存在しないと結論づけ、NVRAM 上に破損しているまたは古いデータが存在すると推測し、そのデバイスと関連する NVRAM からすべてのブートエントリを消してしまいます。Windows をインストールする予定がなく、ファームウェアから Linux カーネルを直接ロードしたい場合、解決策として空のファイル {{ic|''esp''/EFI/BOOT/BOOTx64.EFI}} を作成するというものがあります:<br />
<br />
# mkdir -p ''esp''/EFI/BOOT <br />
# touch ''esp''/EFI/BOOT/BOOTx64.EFI<br />
<br />
そして、削除されたブートエントリを作り直してください。これで、再起動すれば、マザーボードは「偽のOS」を検出し、NVRAM から他のブートエントリを削除しなくなるはずです。この偽の OS ローダは実際の EFI アプリケーションに自由に変更することもできます。もちろん、標準のフォールバック名を使い続ける限りです。<br />
<br />
== 参照 ==<br />
<br />
* [[Wikipedia:ja:UEFI]]<br />
* [https://www.uefi.org/home/ UEFI Forum] - 公式の [https://uefi.org/specifications UEFI の仕様書] - GUID Partition Table は UEFI の仕様に含まれています<br />
* [https://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/ UEFI boot: how does that actually work, then? - AdamW によるブログ記事]<br />
* [https://docs.kernel.org/arch/x86/x86_64/uefi.html Linux カーネルの x86_64 プラットフォーム向け UEFI ドキュメント]<br />
* [https://www.intel.com/content/www/us/en/architecture-and-technology/unified-extensible-firmware-interface/efi-homepage-general-technology.html Intel の EFI に関するページ]<br />
* [https://firmware.intel.com/ Intel Architecture Firmware Resource Center]{{Dead link|2023|07|30|status=404}}<br />
* [https://web.archive.org/web/20191230095118/https://firmware.intel.com/blog/linux-efi-boot-stub Matt Fleming - The Linux EFI Boot Stub]<br />
* [https://web.archive.org/web/20190319175019/https://firmware.intel.com/blog/accessing-uefi-variables-linux Matt Fleming - Accessing UEFI Variables from Linux]<br />
* [https://www.rodsbooks.com/linux-uefi/ Rod Smith - Linux on UEFI: クイックインストールガイド]<br />
* [https://lore.kernel.org/lkml/20110608192950.GA29235@srcf.ucam.org/ 一部の新しいマシンでの UEFI ブート問題 (LKML)]<br />
* [https://linuxplumbers.ubicast.tv/videos/plumbing-uefi-into-linux/ LPC 2012 Plumbing UEFI into Linux]<br />
* [https://linuxplumbers.ubicast.tv/videos/uefi-tutorial-part-1/ LPC 2012 UEFI チュートリアル : part 1]<br />
* [https://linuxplumbers.ubicast.tv/videos/uefi-tutorial-part-2/ LPC 2012 UEFI チュートリアル : part 2]<br />
* [https://www.tianocore.org/ Intel の Tianocore プロジェクト] 直接 BIOS で起動するための DuetPkg や QEMU や Oracle VirtualBox で使用される OvmfPkg が含まれているオープンソースの UEFI ファームウェア<br />
* [https://jdebp.eu/FGA/efi-boot-process.html FGA: The EFI boot process]<br />
* [https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-and-gpt-faq Microsoft の Windows と GPT の FAQ]<br />
* [https://gitlab.com/tianocore_uefi_duet_builds/tianocore_uefi_duet_installer/wikis/Windows_x64_BIOS_to_UEFI 再インストールせずに Windows x64 を BIOS-MBR モードから UEFI-GPT モードに移行]<br />
* [https://gitlab.com/tianocore_uefi_duet_builds/tianocore_uefi_duet_installer/wikis/Linux_Windows_BIOS_UEFI_boot_USB Linux BIOS+UEFI と Windows x64 BIOS+UEFI ブータブル USB ドライブの作成]<br />
* [https://rodsbooks.com/bios2uefi/ Rod Smith - A BIOS to UEFI Transformation]<br />
*[https://web.archive.org/web/20190404074007/https://software.intel.com/en-us/articles/efi-shells-and-scripting/ - Intel ドキュメント]<br />
* [https://web.archive.org/web/20190117223426/https://software.intel.com/en-us/articles/uefi-shell/ UEFI Shell - Intel ドキュメント]<br />
* [https://web.archive.org/web/20130929114218/http://www.hpuxtips.es/?q=node/293 UEFI Shell - bcfg コマンドの情報]<br />
* [https://lwn.net/Articles/632528/ The bootstrap process on EFI systems]<br />
<br />
{{TranslationStatus|Unified Extensible Firmware Interface|2024-03-21|803978}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=NVIDIA&diff=36601
NVIDIA
2024-03-21T09:38:33Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:グラフィック]]<br />
[[Category:X サーバー]]<br />
[[de:Nvidia]]<br />
[[en:NVIDIA]]<br />
[[es:NVIDIA]]<br />
[[pt:NVIDIA]]<br />
[[ru:NVIDIA]]<br />
[[zh-hans:NVIDIA]]<br />
{{Related articles start}}<br />
{{Related|NVIDIA/ヒントとテクニック}}<br />
{{Related|NVIDIA/トラブルシューティング}}<br />
{{Related|Nouveau}}<br />
{{Related|NVIDIA Optimus}}<br />
{{Related|PRIME}}<br />
{{Related|Bumblebee}}<br />
{{Related|nvidia-xrun}}<br />
{{Related|Xorg}}<br />
{{Related|Vulkan}}<br />
{{Related articles end}}<br />
<br />
この記事はプロプライエタリな [https://www.nvidia.com NVIDIA] グラフィックカードドライバをカバーしています。オープンソースのドライバに関しては、[[Nouveau]] を見てください。Intel/NVIDIA のハイブリッドグラフックスを搭載しているノートパソコンを使っている場合は、代わりに [[NVIDIA Optimus]] を見て下さい。<br />
<br />
== インストール ==<br />
<br />
{{Warning|NVIDIA のウェブサイトで提供されているパッケージを通して NVIDIA ドライバをインストールすることは避けてください。[[pacman]] 経由でインストールすれば、システムをアップデートした際にドライバもアップデートすることができます。}}<br />
<br />
{{Note|ハイブリッドグラフィックカードのあるシステム上でデュアルブートする場合は、Windows またはサードパーティのアプリで ''Eco mode'' を有効化すると NVIDIA のディスクリート GPU が非アクティブ化され、検出されなくなります。}}<br />
<br />
#使用しているグラフィックカードがわからない場合、次を実行して確認してください: {{bc|$ lspci -k {{!}} grep -A 2 -E "(VGA{{!}}3D)"}}<br />
#あなたのカードに合うドライバのバージョンを調べてください:<br />
#* NVIDIA の[https://www.nvidia.com/Download/index.aspx ドライバダウンロードサイト]に行き、ドロップダウンリストを使用する。<br />
#* [https://nouveau.freedesktop.org/wiki/CodeNames/ Nouveau wiki のコードネームのページ]や [https://gitlab.freedesktop.org/nouveau/wiki/-/blob/master/sources/CodeNames.mdwn Nouveau の GitLab] から (あなたのカードの) コードネーム (例: NV50、NVC0 など) を探し、その次に NVIDIA の[https://www.nvidia.com/en-us/drivers/unix/legacy-gpu/ レガシーなカードのリスト]から (あなたのカードの) 名前を探します。あなたのカードがレガシーなカードのリストに載っていない場合、最新のドライバを使用できます。<br />
#あなたのカードに合う適切なドライバーをインストールしてください:{{Note|{{Pkg|dkms}} をインストールする際は、[[Dynamic Kernel Module Support#インストール]] を読んでください。}}<br />
#* [https://nouveau.freedesktop.org/CodeNames.html#NV110 Maxwell (NV110/GM''XXX'')] シリーズ及びそれより新しいカードの場合、{{Pkg|nvidia}} パッケージ ({{Pkg|linux}} カーネル用) か {{Pkg|nvidia-lts}} パッケージ ({{Pkg|linux-lts}} カーネル用) か {{Pkg|nvidia-dkms}} パッケージ (その他すべてのカーネル用) を[[インストール]]してください。<br />
#** これらのパッケージでうまく行かない場合は、{{AUR|nvidia-beta}} にあなたの環境をサポートするより新しいドライバーが含まれているかもしれません。<br />
#* [https://nouveau.freedesktop.org/CodeNames.html#NV160 Turing (NV160/TU''XXX'')] シリーズ及びそれより新しいカードの場合は、{{Pkg|nvidia-open}} をインストールすることで {{Pkg|linux}} カーネル用のオープンソースなカーネルドライバーを使用することもできます (その他のカーネルでは {{Pkg|nvidia-open-dkms}} を使用してください)。<br />
#** 今現在、このパッケージは[http://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/README/kernel_open.html ベータ品質]なので、問題があるかもしれません。[https://github.com/NVIDIA/open-gpu-kernel-modules/issues/282 nvidia-open issue #282] により、{{Pkg|nvidia-open}} は AMD 統合 GPU を搭載しているシステムでは動作しないかもしれません。<br />
#* [https://nouveau.freedesktop.org/CodeNames.html#NVE0 Kepler (NVE0/GK''XXX'')] シリーズのカードの場合、{{AUR|nvidia-470xx-dkms}} パッケージを[[インストール]]してください。{{Note|470xx 及びそれ以前のドライバは、[https://edc.intel.com/content/www/us/en/design/ipla/software-development-platforms/client/platforms/alder-lake-desktop/12th-generation-intel-core-processors-datasheet-volume-1-of-2/007/indirect-branch-tracking/ Indirect Branch Tracking] との互換性が無いため、[https://newsroom.intel.com/editorials/intel-cet-answers-call-protect-common-malware-threats/#gs.mg8nm2 第11世代及びそれ以降]の Intel CPU を搭載しているシステムで Linux 5.18 (及びそれ以降) において機能しない場合があります。Indirect Branch Tracking は、[[ブートローダー]]から {{ic|1=ibt=off}} [[カーネルパラメータ]]を設定することにより、無効化することができます。ただし、このセキュリティ機能は[https://lwn.net/Articles/889475/ エクスプロイト手法の一種を緩和する]役割があるので注意してください。}}<br />
#* 更に古いカードの場合は [[#サポートがないドライバー]] を見てください。<br />
#32ビットアプリケーションのサポートが必要な場合は、対応する ''lib32'' パッケージも [[multilib]] リポジトリからインストールしてください (例: {{Pkg|lib32-nvidia-utils}})。<br />
#{{ic|/etc/mkinitcpio.conf}} 内の {{ic|HOOKS}} 配列から {{ic|kms}} を削除し、その後 [[Initramfs を再生成する|initramfs を再生成]]してください。こうすることで、initramfs に {{ic|nouveau}} モジュールが含まれないようにして、カーネルがこのモジュールを初期ブート中に読み込めないようにします。<br />
#再起動してください。{{Pkg|nvidia-utils}} パッケージには {{ic|nouveau}} モジュールをブラックリスト化するファイルが含まれているため、再起動が必須です。<br />
<br />
ドライバーをインストールしたら、[[#Xorg 設定]] または [[#Wayland]] へと進んでください。<br />
<br />
=== サポートがないドライバー ===<br />
<br />
さらに古いカードを使用している場合、NVIDIA はもはやあなたのカード用のドライバを積極的にサポートしていません。これはつまり、[https://nvidia.custhelp.com/app/answers/detail/a_id/3142/ 最新バージョンの Xorg を公式にはサポートしていないこと]を意味しています。なので、最新の Xorg を古いカードでもサポートしている [[nouveau]] ドライバーを使うほうが楽かもしれません。<br />
<br />
しかし、NVIDIA のレガシーなドライバは依然として利用可能であり、より高い 3D パフォーマンス/安定性をもたらすかもしれません。<br />
<br />
* [https://nouveau.freedesktop.org/CodeNames.html#NVC0 Fermi (NVC0/GF1''XX'')] シリーズのカードの場合、{{AUR|nvidia-390xx-dkms}} パッケージを[[インストール]]してください。<br />
* [https://nouveau.freedesktop.org/CodeNames.html#NV50 Tesla (NV50/G80-90-GT2''XX'')] シリーズのカードの場合、{{AUR|nvidia-340xx-dkms}} パッケージを[[インストール]]してください。<br />
* [https://nouveau.freedesktop.org/CodeNames.html#NV40 Curie (NV40/G70)] シリーズ及びそれより古いカードの場合、Arch Linux 用のパッケージはもはや存在しません。<br />
<br />
=== カスタムカーネル ===<br />
<br />
使用中のカーネルで {{ic|1=CONFIG_DRM_SIMPLEDRM=y}} となっていることを確認してください。そして、{{ic|CONFIG_DEBUG_INFO_BTF}} を使用している場合、[[PKGBUILD]] で以下が必要です (カーネル 5.16 以降):<br />
<br />
install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids<br />
<br />
=== DRM カーネルモード設定 ===<br />
<br />
NVIDIA は [[カーネルモード設定#KMS の遅延開始|KMS の自動遅延読み込み]]をサポートしていないため、Wayland コンポジタを正しく動作させたり、[[Xorg#Rootless Xorg|Rootless Xorg]] を利用できるようにするには DRM ([[Wikipedia:Direct Rendering Manager|Direct Rendering Manager]]) [[カーネルモード設定]]を有効化する必要があります。<br />
<br />
DRM カーネルモード設定を有効化するには、{{ic|nvidia_drm}} モジュールに対して {{ic|1=modeset=1}} [[カーネルモジュールパラメータ]]を設定してください。<br />
<br />
{{ic|1=nvidia_drm.modeset=1}} が適切に設定されていることをブート後に確認するには、以下のコマンドを実行してください:<br />
<br />
# cat /sys/module/nvidia_drm/parameters/modeset<br />
<br />
正しく設定されていれば、このコマンドは {{ic|N}} ではなく {{ic|Y}} と出力するはずです。<br />
<br />
加えて、ドライバのバージョン 545 及びそれ以降においては、実験的な {{ic|1=nvidia_drm.fbdev=1}} パラメータを使用することもできます。このパラメータにより、{{ic|simpledrm}} においては動作しない {{ic|efifb}} や {{ic|vesafb}} を使用せずに、NVIDIA ドライバ自身のフレームバッファデバイスを使用するようになります。<br />
<br />
バージョン 545 より前の NVIDIA ドライバを使用している場合や、{{ic|1=nvidia_drm.fbdev=1}} パラメータを使用しない場合、{{ic|simpledrm}} を無効化するために {{ic|1=nvidia_drm.modeset=1}} オプションを[[カーネルパラメータ]]によって設定する必要があります [https://github.com/archlinux/linux/commit/7bfc7b32d0e0b486d3e66d843ca2f3fe514860a9] (詳細は {{Bug|73720}} を参照)。<br />
<br />
{{Note|<br />
* {{ic|1=nvidia_drm.fbdev=1}} には、バージョン 550 以降のドライバでしか修正されないであろう既知の問題があります。詳細は [[:en:Talk:NVIDIA#Framebuffer consoles experimental support]] を参照してください。<br />
* バージョン 470 より前の NVIDIA ドライバ (例: {{AUR|nvidia-390xx-dkms}}) は Xwayland のハードウェアアクセラレーションをサポートしていません。よって、非 Wayland ネイティブなアプリケーションは Wayland セッションでパフォーマンスが劣化します。<br />
}}<br />
<br />
==== 早期ロード ====<br />
<br />
基本的な機能については先のカーネルパラメータを追加するだけで十分でしょう。可能な限り早い時にロードさせたい場合や、スタートアップ時に問題 ({{ic|nvidia}} カーネルモジュールが[[ディスプレイマネージャ]]のあとにロードされてしまうなど) が発生する場合には、{{ic|nvidia}}、{{ic|nvidia_modeset}}、{{ic|nvidia_uvm}} そして {{ic|nvidia_drm}} を initramfs に追加することができます。<br />
<br />
===== mkinitcpio =====<br />
<br />
[[mkinitcpio]] initramfs を使う場合、[[mkinitcpio#MODULES]] に従ってモジュールを追加してください。<br />
<br />
モジュールを initramfs に追加した場合、{{Pkg|nvidia}} ドライバーがアップデートされるたびに [[mkinitcpio]] を実行することを忘れないようにしてください。この手順を自動化する方法については [[#Pacman フック]]をご覧ください。<br />
<br />
===== Booster =====<br />
<br />
[[Booster]] を使う場合、[[Booster#モジュールの早期ロード]]をご覧ください。<br />
<br />
===== Pacman フック =====<br />
<br />
{{Note|カスタムの pacman フックが必要になるのは、ビルド済みのカーネルモジュールが同梱されているパッケージに対してのみです。{{ic|*-dkms}} パッケージは、更新時に ''mkinitcpio'' が自動的に実行されるので、このようなカスタムの pacman フックは必要ありません。}}<br />
<br />
NVIDIA ドライバをアップグレードした後に [[initramfs]] をアップデートすることを忘れないように、以下のような [[pacman フック]]を利用することができます:<br />
<br />
{{hc|/etc/pacman.d/hooks/nvidia.hook|2=<br />
[Trigger]<br />
Operation=Install<br />
Operation=Upgrade<br />
Operation=Remove<br />
Type=Package<br />
# インストールした NVIDIA のパッケージをあんコメントしてください<br />
Target=nvidia<br />
#Target=nvidia-open<br />
#Target=nvidia-lts<br />
Target=linux<br />
# 異なるカーネルを使用する場合、上の「linux」の部分を変更してください<br />
<br />
[Action]<br />
Description=Update NVIDIA module in initcpio<br />
Depends=mkinitcpio<br />
When=PostTransaction<br />
NeedsTargets<br />
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux*) exit 0; esac; done; /usr/bin/mkinitcpio -P'<br />
}}<br />
<br />
{{Note|上記の {{ic|Exec}} の行が複雑なのは {{ic|nvidia}} と {{ic|linux}} の両方がアップデートされた場合に ''mkinitcpio'' が何度も実行されるのを防ぐためです。このことが気にならないのであれば、{{ic|1=Target=linux}} と {{ic|NeedsTargets}} の行を削除して、{{ic|Exec}} の行は {{ic|1=Exec=/usr/bin/mkinitcpio -P}} のように単純化させることができます。}}<br />
<br />
=== ビデオデコードのハードウェアアクセラレーション ===<br />
<br />
VDPAU によるビデオデコードのアクセラレーションは GeForce 8 シリーズ及びそれ以降のカードでサポートされています。NVDEC によるビデオデコードのアクセラレーションは Fermi (~400 シリーズ) 及びそれ以降のカードでサポートされています。詳しくは [[ハードウェアビデオアクセラレーション]] をご覧ください。<br />
<br />
=== NVENC によるビデオエンコードのハードウェアアクセラレーション ===<br />
<br />
NVENC は {{ic|nvidia_uvm}} モジュールと、関連するデバイスノードが {{ic|/dev}} 下に作成されることを要求します。<br />
<br />
最新のドライバーパッケージは、自動的にデバイスノードを作成する [[udev ルール]]を提供するので、追加の操作は必要ありません。<br />
<br />
古いドライバ (例えば、{{AUR|nvidia-340xx-dkms}}) を使用している場合、デバイスノードを作成する必要があります。{{ic|nvidia-modprobe}} ユーティリティを実行するとデバイスノードが自動的に作成されます。{{ic|/etc/udev/rules.d/70-nvidia.rules}} を作成して {{ic|nvidia-modprobe}} を自動的に実行させることができます:<br />
<br />
{{hc|/etc/udev/rules.d/70-nvidia.rules|2=<br />
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-modprobe -c 0 -u"<br />
}}<br />
<br />
== Xorg 設定 ==<br />
<br />
プロプライエタリな NVIDIA グラフィックドライバは Xorg サーバの設定ファイルを必要としません。[[Xorg#起動|X を起動]]してみて、Xorg サーバが設定ファイル無しで正しく機能するかを確認することができます。しか、様々な設定を調整するために設定ファイル ({{ic|/etc/X11/xorg.conf}} よりも {{ic|/etc/X11/xorg.conf.d/20-nvidia.conf}} を優先して使用してください) を作成する必要があるかもしれません。この設定は、NVIDIA Xorg 設定ツールによって生成することができますし、手動で作成することもできます。手動で作成した場合、([[Xorg]] サーバに基本的なオプションのみを与えると言う意味で) 最小の設定にすることができますし、あるいは、Xorg の自動検出されたオプションや事前設定されたオプションをバイパスできる設定を含めることもできます。<br />
<br />
{{Tip|その他の設定オプションは、[[NVIDIA/トラブルシューティング]] を見てください。}}<br />
<br />
=== 自動設定 ===<br />
<br />
NVIDIA のパッケージには、Xorg サーバの設定ファイル ({{ic|xorg.conf}}) を作成するための自動設定ツールが含まれています。次のコマンドで実行できます:<br />
<br />
# nvidia-xconfig<br />
<br />
このコマンドは {{ic|/etc/X11/xorg.conf}} を自動検出し、現在のハードウェアに応じてそのファイルを作成 (すでに存在する場合は編集) します。<br />
<br />
DRI のインスタンスがある場合は、コメントアウトされているか確認してください:<br />
<br />
# Load "dri"<br />
<br />
デフォルトの深度、水平同期、垂直リフレッシュ、そして解像度が問題ないか {{ic|/etc/X11/xorg.conf}} を二重にチェックしてください。<br />
<br />
=== nvidia-settings ===<br />
<br />
{{Pkg|nvidia-settings}} は CLI または GUI を使って様々なオプションを設定することができるツールです。何もオプションをつけずに {{ic|nvidia-settings}} を実行すると GUI が起動します。CLI のオプションについては {{man|1|nvidia-settings}} を見てください。<br />
<br />
{{Pkg|nvidia-settings}} の CLI/GUI は非 root なユーザとして実行でき、''nvidia-settings Configuration'' タブにある ''Save Current Configuration'' オプションで設定を {{ic|~/.nvidia-settings-rc}} に保存できます。<br />
<br />
現在のユーザで {{ic|~/.nvidia-settings-rc}} をロードするには:<br />
<br />
$ nvidia-settings --load-config-only<br />
<br />
起動時に毎回このコマンドを実行させるには[[自動起動]]を見てください。<br />
<br />
{{Note|<br />
* {{ic|nvidia-settings}} から変更を加えると [[Xorg]] が起動しなくなったりクラッシュするようになったりすることがあります。生成された {{ic|~/.nvidia-settings-rc}} と [[Xorg]] のファイルの両方/片方を調整するか削除することで普通に起動できるようになるはずです。<br />
* [[Cinnamon]] デスクトップは {{ic|nvidia-settings}} を通して作成された設定を上書きしてしまうことがあります。[[Cinnamon#Cinnamon が xorg.conf 内の設定を上書きしてしまう|Cinnamon の起動時の挙動を変更して、設定を上書きしないようにする]]ことができます。}}<br />
<br />
=== 手動設定 ===<br />
<br />
設定ファイルを編集することで、([[#自動設定|自動的に]]、または [[#NVIDIA settings|nvidia-settings]]によって有効化できない) いくつかの微調整をすることができます。変更を適用する前に Xorg サーバーを再起動する必要があります。<br />
<br />
その他の詳細やオプションについては [https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/ NVIDIA Accelerated Linux Graphics Driver README and Installation Guide] をご覧ください。<br />
<br />
==== 最小設定 ====<br />
<br />
{{ic|20-nvidia.conf}} (もしくは非推奨の {{ic|xorg.conf}}) の基本的な設定ブロックは以下のようになります:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf|<br />
Section "Device"<br />
Identifier "NVIDIA Card"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
BoardName "GeForce GTX 1050 Ti"<br />
EndSection<br />
}}<br />
<br />
==== 起動時のロゴを無効化 ====<br />
<br />
{{ic|Device}} セクション内に {{ic|"NoLogo"}} オプションを追加してください:<br />
<br />
Option "NoLogo" "1"<br />
<br />
==== モニター検出をオーバーライド ====<br />
<br />
{{ic|Device}} セクション内の {{ic|"ConnectedMonitor"}} オプションにより、 X サーバーが起動した時にモニター検出をオーバーライドできます。これにより、起動時間を大幅に減らせるかもしれません。利用可能なオプション: アナログ接続用の {{ic|"CRT"}}、デジタルモニター用の {{ic|"DFP"}}、テレビ用の {{ic|"TV"}}。<br />
<br />
以下の行は起動時のチェックをバイパスし、モニターを DFP として認識することを NVIDIA ドライバーに強制します:<br />
<br />
Option "ConnectedMonitor" "DFP"<br />
<br />
{{Note|たとえディスプレイが薄型パネルであろうと、アナログ15ピン VGA 接続に対しては "CRT" を使用してください。"DFP" は DVI や HDMI、DisplayPort のデジタル接続のみを意図しています。}}<br />
<br />
==== 輝度調整を有効化 ====<br />
<br />
{{Out of date|時代遅れの可能性あり[https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/thread/GXJG7D3ALUQKOE2DT4XCL4UXQUFDDSEC/]。上流のパッケージも古いようです。}}<br />
<br />
以下をカーネルパラメータに追加してください:<br />
<br />
nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1<br />
<br />
あるいは、以下を {{ic|Device}} セクション内に追加してください:<br />
<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
<br />
もし、この設定で輝度調整がまだ機能しない場合は、{{AUR|nvidia-bl-dkms}} をインストールしてみてください。<br />
<br />
{{Note|{{AUR|nvidia-bl-dkms}} をインストールすることにより、バックライト輝度調整用の {{ic|/sys/class/backlight/nvidia_backlight/}} インターフェイスが提供されます。しかし、システムが {{ic|/sys/class/backlight/acpi_video0/}} に対してバックライト制御の変更を発行し続けるかもしれません。この場合の1つの解決策は、例えば、''inotifywait'' を使用して {{ic|acpi_video0/brightness}} の変更を監視し、それを変換して {{ic|nvidia_backlight/brightness}} に対して書き込むことです。[[バックライト#sysfs を変更しても明るさが変更されない]] をご覧ください。}}<br />
<br />
==== SLI を有効化 ====<br />
<br />
{{Warning|GTX 10xx シリーズ (1080、1070、1060 など) 以降は 2-way SLI のみがサポートされます。3-way や 4-way SLI は CUDA/OpenCL アプリケーションに対しては機能するかもしれませんが、すべての OpenGL アプリケーションに対してはたいてい機能しないでしょう。}}<br />
<br />
NVIDIA ドライバーの [https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/xconfigoptions.html README] 付録 B によると: ''このオプションは、サポートされている構成で SLI レンダリングの設定を制御します。'' "サポートされている構成"とは SLI 認定マザーボードと、2基または3基の SLI 認定 GeForce GPU を搭載しているコンピュータのことです。<br />
<br />
{{ic|lspci}} を使って1つ目の GPU の PCI Bus ID を調べてください:<br />
<br />
{{hc|# lspci {{!}} grep -E "VGA{{!}}3D controller"|<br />
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)<br />
03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)<br />
04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)<br />
08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)<br />
}}<br />
<br />
調べた BusID (前述の例では 3) を {{ic|Device}} セクション内に追加してください:<br />
<br />
BusID "PCI:3:0:0"<br />
<br />
{{Note|フォーマットが重要です。BusID の値は {{ic|"PCI:<BusID>:0:0"}} のように指定されなければなりません。}}<br />
<br />
希望する SLI レンダリングモードの値を {{ic|Screen}} セクション内に追加してください:<br />
<br />
Option "SLI" "AA"<br />
<br />
以下の表は利用可能なレンダリングモードです。<br />
<br />
{| class="wikitable"<br />
! 値 !! 挙動<br />
|-<br />
| 0, no, off, false, Single || レンダリング時にただ1つの GPU を使う。<br />
|-<br />
| 1, yes, on, true, Auto || SLI を有効化し、ドライバーが自動的に適切なレンダリングモードを選択することを許可する。<br />
|-<br />
| AFR || SLI を有効化し、Alternate Frame Rendering モードを使う。<br />
|-<br />
| SFR || SLI を有効化し、Split Frame Rendering モードを使う。<br />
|-<br />
| AA || SLI を有効化し、SLI アンチエイリアシングを使う。この値を Full-Scene アンチエイリアシングと一緒に使うと視覚品質が向上します。<br />
|}<br />
<br />
あるいは、''nvidia-xconfig'' ユーティリティを使って、これらの変更を {{ic|xorg.conf}} に追加できます:<br />
<br />
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA<br />
<br />
SLI モードが有効化されていることをシェルから確認するには:<br />
<br />
{{hc|$ nvidia-settings -q all {{!}} grep SLIMode|<br />
Attribute 'SLIMode' (arch:0.0): AA <br />
'SLIMode' is a string attribute.<br />
'SLIMode' is a read-only attribute.<br />
'SLIMode' can use the following target types: X Screen.<br />
}}<br />
<br />
{{Warning|SLI を有効化した後に xorg を起動するとシステムがフリーズしたり、応答しなくなったりするかもしれません。再起動する前にディスプレイマネージャーを無効化することをおすすめします。}}<br />
<br />
以上の設定で機能しない場合は、{{ic|nvidia-settings}} で得られる PCI Bus ID を使用する必要があるかもしれません。<br />
<br />
{{hc|$ nvidia-settings -q all {{!}} grep -i pcibus|<br />
Attribute 'PCIBus' (host:0[gpu:0]): 101.<br />
'PCIBus' is an integer attribute.<br />
'PCIBus' is a read-only attribute.<br />
'PCIBus' can use the following target types: GPU, SDI Input Device.<br />
Attribute 'PCIBus' (host:0[gpu:1]): 23.<br />
'PCIBus' is an integer attribute.<br />
'PCIBus' is a read-only attribute.<br />
'PCIBus' can use the following target types: GPU, SDI Input Device.<br />
}}<br />
<br />
そして、xorg.d 内の PrimaryGPU オプションをコメントアウトしてください:<br />
<br />
{{hc|/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf|<br />
...<br />
<br />
Section "OutputClass"<br />
...<br />
# Option "PrimaryGPU" "yes"<br />
...<br />
}}<br />
<br />
この設定でグラフィカルブートの問題も解決できるかもしれません。<br />
<br />
=== マルチモニター ===<br />
<br />
一般的な情報は [[マルチディスプレイ]] を見て下さい。<br />
<br />
==== NVIDIA Settings を使う ====<br />
<br />
[[#nvidia-settings|nvidia-settings]] ツールを使ってマルチモニターを設定できます。<br />
<br />
CLI で設定する場合、まずは以下を実行して {{ic|CurrentMetaMode}} を確認してください:<br />
<br />
{{hc|$ nvidia-settings -q CurrentMetaMode|2=<br />
Attribute 'CurrentMetaMode' (hostnmae:0.0): id=50, switchable=no, source=nv-control :: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}<br />
}}<br />
<br />
{{ic|::}} 以降の全て (上記の場合: {{ic|1=DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0&#125;}}) を使って {{ic|1=nvidia-settings --assign "CurrentMetaMode=''your_meta_mode''"}} でディスプレイを再設定できます。<br />
<br />
{{Tip|使用するモニターや解像度の設定ごとにシェルのエイリアスを作成すると便利です。}}<br />
<br />
==== ConnectedMonitor ====<br />
<br />
ドライバーがセカンドモニタを正しく認識しない場合は、ConnectedMonitor を使って認識するように強制できます。<br />
<br />
{{hc|/etc/X11/xorg.conf|<br />
<br />
Section "Monitor"<br />
Identifier "Monitor1"<br />
VendorName "Panasonic"<br />
ModelName "Panasonic MICRON 2100Ex"<br />
HorizSync 30.0 - 121.0 # this monitor has incorrect EDID, hence Option "UseEDIDFreqs" "false"<br />
VertRefresh 50.0 - 160.0<br />
Option "DPMS"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor2"<br />
VendorName "Gateway"<br />
ModelName "GatewayVX1120"<br />
HorizSync 30.0 - 121.0<br />
VertRefresh 50.0 - 160.0<br />
Option "DPMS"<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device1"<br />
Driver "nvidia"<br />
Option "NoLogo"<br />
Option "UseEDIDFreqs" "false"<br />
Option "ConnectedMonitor" "CRT,CRT"<br />
VendorName "NVIDIA Corporation"<br />
BoardName "GeForce 6200 LE"<br />
BusID "PCI:3:0:0"<br />
Screen 0<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device2"<br />
Driver "nvidia"<br />
Option "NoLogo"<br />
Option "UseEDIDFreqs" "false"<br />
Option "ConnectedMonitor" "CRT,CRT"<br />
VendorName "NVIDIA Corporation"<br />
BoardName "GeForce 6200 LE"<br />
BusID "PCI:3:0:0"<br />
Screen 1<br />
EndSection<br />
<br />
}}<br />
<br />
{{ic|TwinView}} を使わずに1つのカードで2つのモニターを X で使うために {{ic|Screen}} でデバイスを複製しています。{{ic|nvidia-settings}} は追加した {{ic|ConnectedMonitor}} オプションを全て消してしまうので注意してください。<br />
<br />
==== TwinView ====<br />
<br />
画面を2つ表示するのではなく1つの大きな画面を表示したい場合、{{ic|TwinView}} 引数を {{ic|1}} に設定してください。コンポジットを使いたい場合、このオプションを使用する必要があります。TwinView は全てのモニターが同一のカードに接続されている場合にのみ機能します。<br />
<br />
Option "TwinView" "1"<br />
<br />
設定例:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/10-monitor.conf|<br />
Section "ServerLayout"<br />
Identifier "TwinLayout"<br />
Screen 0 "metaScreen" 0 0<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
Option "Enable" "true"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor1"<br />
Option "Enable" "true"<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Card0"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
<br />
#refer to the link below for more information on each of the following options.<br />
Option "HorizSync" "DFP-0: 28-33; DFP-1 28-33"<br />
Option "VertRefresh" "DFP-0: 43-73; DFP-1 43-73"<br />
Option "MetaModes" "1920x1080, 1920x1080"<br />
Option "ConnectedMonitor" "DFP-0, DFP-1"<br />
Option "MetaModeOrientation" "DFP-1 LeftOf DFP-0"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "metaScreen"<br />
Device "Card0"<br />
Monitor "Monitor0"<br />
DefaultDepth 24<br />
Option "TwinView" "True"<br />
SubSection "Display"<br />
Modes "1920x1080"<br />
EndSubSection<br />
EndSection<br />
}}<br />
<br />
[https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/configtwinview.html Device オプション情報]。<br />
<br />
SLI に対応しているカードが複数枚存在する場合、別々のカードに接続された複数のモニターを使うことができます (例: 2枚のカードが SLI で、各々のカードにモニターが1台ずつ接続)。SLI モザイクモードと "MetaModes" オプションで有効になります。以下は上記と同じように設定する例で、[[GNOME]] が完璧に動作します:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/10-monitor.conf|<br />
Section "Device"<br />
Identifier "Card A"<br />
Driver "nvidia"<br />
BusID "PCI:1:00:0"<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Card B"<br />
Driver "nvidia"<br />
BusID "PCI:2:00:0"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Right Monitor"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Left Monitor"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Right Screen"<br />
Device "Card A"<br />
Monitor "Right Monitor"<br />
DefaultDepth 24<br />
Option "SLI" "Mosaic"<br />
Option "Stereo" "0"<br />
Option "BaseMosaic" "True"<br />
Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"<br />
SubSection "Display"<br />
Depth 24<br />
EndSubSection<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Left Screen"<br />
Device "Card B"<br />
Monitor "Left Monitor"<br />
DefaultDepth 24<br />
Option "SLI" "Mosaic"<br />
Option "Stereo" "0"<br />
Option "BaseMosaic" "True"<br />
Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"<br />
SubSection "Display"<br />
Depth 24<br />
EndSubSection<br />
EndSection<br />
<br />
Section "ServerLayout"<br />
Identifier "Default"<br />
Screen 0 "Right Screen" 0 0<br />
Option "Xinerama" "0"<br />
EndSection<br />
}}<br />
<br />
===== TwinView を使って垂直同期 =====<br />
<br />
TwinView と垂直同期 ('''nvidia-settings''' の "Sync to VBlank" オプション) を使っている場合、モニターの大きさが異なっていると片方の画面だけが同期されます。'''nvidia-settings''' にはどちらの画面を同期させるか設定するオプション ("Sync to this display device" オプション) が存在しますが、必ずしも機能するとはいいがたいです。起動時に以下の環境変数を追加することで解決します (例: {{ic|/etc/profile}} に追加):<br />
<br />
export __GL_SYNC_TO_VBLANK=1<br />
export __GL_SYNC_DISPLAY_DEVICE=DFP-0<br />
export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0<br />
<br />
{{ic|DFP-0}} は適切な画面に置き換えてください ({{ic|DFP-0}} は DVI 端子で {{ic|CRT-0}} は VGA 端子です)。ディスプレイの識別名は '''nvidia-settings''' の "X Server XVideoSettings" セクションで確認できます。<br />
<br />
===== Twinview を使ってゲームを遊ぶ =====<br />
<br />
TwinView を使ってフルスクリーンのゲームを遊ぶ場合、2つの画面が1つの大きな画面としてゲームから認識されることがあります。技術的にこれは正しいのですが (仮想的な X スクリーンの横幅は両方の画面を合わせたサイズになります)、ゲームを遊ぶときは両方の画面を使わないようにしたいときもあるでしょう。<br />
<br />
SDL のこの挙動を修正するには、次を試して下さい:<br />
<br />
export SDL_VIDEO_FULLSCREEN_HEAD=1<br />
<br />
OpenGL の場合、{{ic|xorg.conf}} の {{ic|Device}} セクションに適切な Metamodes を追加して X を再起動してください:<br />
<br />
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"<br />
<br />
[[ゲーム#別の X サーバーでゲームを起動する|別の X サーバーでゲームを起動する]]方法もあります。上記の方法と一緒に使うことも可能です。<br />
<br />
==== モザイクモード ====<br />
<br />
モザイクモードは、複数のグラフィクカードでコンポジット有りで3つ以上のモニタを使用する唯一の方法です。ウィンドウマネージャは各モニタの違いを認識するかもしれませんし、しないかもしれません。モザイクモードには、有効な SLI 設定が必要です。SLI を使わずにベースモードを使用する場合でも、GPU は依然として SLI 対応/互換でなければなりません。<br />
<br />
===== ベースモザイク =====<br />
<br />
ベースモザイクモードは Geforce 8000 シリーズ以上の GPU で動作します。nvidia-setting の GUI から有効にすることはできません。''nvidia-xconfig'' コマンドラインプログラムを使用するか {{ic|xorg.conf}} を手動で編集する必要があります。Metamodes を指定してください。以下は4台の DFP を 2x2 の構成で使用する例です。各々の解像度は 1920x1024 で、2枚のカードにそれぞれ2台の DFP が接続されている場合:<br />
<br />
$ nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"<br />
<br />
{{Note|ドキュメントには 2x2 のモニター構成が記述されていますが、Base Mosaic モードで[https://forums.developer.nvidia.com/t/basemosaic-v295-vs-v310-vs-v325-only-up-to-three-screens/30583#3954733 GeForce カードは人為的にモニタ3台に制限されています]。Quadro カードは4台以上のモニタをサポートしています。2014年9月現在、Windows ドライバはこの人為的な制限を落としましたが、Linux ドライバでは未だに残っています。}}<br />
<br />
===== SLI モザイク =====<br />
<br />
SLI 構成を使っていて、使用する GPU が Quadro FX 5800 や Quadro Fermi 以降の場合、SLI モザイクモードが利用できます。nvidia-settings の GUI の中から有効化するか、コマンドラインで設定してください:<br />
<br />
$ nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"<br />
<br />
== Wayland ==<br />
<br />
さらなる情報については [[Wayland#要件]] をご覧ください。<br />
<br />
さらなる設定オプションについては、それぞれのコンポジタの wiki ページやドキュメントをご覧ください。<br />
<br />
Xwayland に関しては [[Wayland#Xwayland]] をご覧ください。<br />
<br />
GDM を使用している場合は、[[GDM#Wayland とプロプライエタリな NVIDIA ドライバ]] をご覧ください。<br />
<br />
== ヒントとテクニック ==<br />
<br />
[[NVIDIA/ヒントとテクニック]] を参照。<br />
<br />
== トラブルシューティング ==<br />
<br />
[[NVIDIA/トラブルシューティング]] を参照。<br />
<br />
== 参照 ==<br />
<br />
* [https://forums.developer.nvidia.com/t/current-graphics-driver-releases/28500 Current graphics driver releases in official NVIDIA Forum]<br />
* [https://forums.developer.nvidia.com/c/gpu-graphics/linux/148 NVIDIA Developers Forum - Linux Subforum]<br />
<br />
{{TranslationStatus|NVIDIA|2024-03-21|803810}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=SDDM&diff=36600
SDDM
2024-03-21T09:33:23Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:KDE]]<br />
[[Category:ディスプレイマネージャ]]<br />
[[de:Login-Manager#SDDM]]<br />
[[en:SDDM]]<br />
[[fr:SDDM]]<br />
[[ru:SDDM]]<br />
[[zh-hans:SDDM]]<br />
{{Related articles start}}<br />
{{Related|ディスプレイマネージャ}}<br />
{{Related|KDE}}<br />
{{Related articles end}}<br />
The [https://github.com/sddm/sddm/ Simple Desktop Display Manager] (SDDM) は[[ディスプレイマネージャ]]です。[[KDE]] Plasma と [[LXQt]] デスクトップ環境の推奨ディスプレイマネージャです。<br />
<br />
[[Wikipedia:ja:Simple Desktop Display Manager]] より:<br />
<br />
:Simple Desktop Display Manager (SDDM) は、X Window SystemとWayland向けのディスプレイマネージャである。SDDMはC++11で書かれており、QMLによるテーマをサポートしている。<br />
<br />
[[KDE]] の開発チームは、SDDM プロジェクトを Plasma Desktop プロジェクトに組み込むという[https://invent.kde.org/plasma/plasma-desktop/-/issues/91 提案を受け入れました]。SDDM は Plasma の正式な一部となり、SDDM のアップデートは Plasma Desktop のアップデートと共にリリースされる可能性があります。<br />
<br />
{{Note|SDDM バージョン 0.20 の時点で、[[Wayland]] セッションは一覧に表示され、SDDM から起動することは可能ですが、SDDM greeter 自体はデフォルトでは依然として X11 モードで動作します。しかし、実験的な Wayland greeter を[[#Wayland|有効化することが可能です]]。}}<br />
<br />
== インストール ==<br />
<br />
{{Pkg|sddm}} パッケージを[[インストール]]してください。任意で [[KDE#KCM|KConfig Module]] のための {{Pkg|sddm-kcm}} もインストールしてください。<br />
<br />
[[ディスプレイマネージャ#ディスプレイマネージャをロードする]]に従って、ブート時に SDDM を起動させてください。<br />
<br />
== 設定 ==<br />
<br />
SDDM のデフォルト設定ファイルは {{ic|/usr/lib/sddm/sddm.conf.d/default.conf}} に存在します。設定を変更するときは {{ic|/etc/sddm.conf.d/}} に設定ファイルを作成してください。利用可能なオプションは {{man|5|sddm.conf}} を見て下さい。<br />
<br />
({{grp|plasma}} グループに含まれている) {{pkg|sddm-kcm}} パッケージをインストールすることで Plasma のシステム設定から GUI で SDDM を設定できます。[[Qt]] ベースの設定エディタ {{AUR|sddm-conf-git}} も存在します。<br />
<br />
Arch Linux は [[systemd]] を使用していて、さらに SDDM はデフォルトで {{ic|systemd-logind}} をセッション管理に使用するので、特に設定せずに機能するはずです。<br />
<br />
=== 自動ログイン ===<br />
<br />
SDDM は設定ファイルによって自動ログインをサポートしています、例:<br />
<br />
{{hc|/etc/sddm.conf.d/autologin.conf|2=<br />
[Autologin]<br />
User=john<br />
Session=plasma<br />
}}<br />
<br />
上の設定だと、システムが起動した時に {{ic|john}} ユーザーで KDE Plasma セッションが起動します。利用できるセッションのタイプについては、X 用は {{ic|/usr/share/xsessions/}} で、Wayland 用は {{ic|/usr/share/wayland-sessions/}} でわかります。<br />
<br />
KDE Plasma に自動ログインすると同時にセッションをロックするオプションは利用できません。[https://github.com/sddm/sddm/issues/306]<br />
<br />
回避策として、Plasma のスクリーンセーバをアクティブ化するスクリプトを自動起動に追加することができます:<br />
<br />
#!/bin/sh<br />
/usr/bin/dbus-send --session --type=method_call --dest=org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock &<br />
<br />
=== パスワードレスログイン ===<br />
<br />
パスワード無しで一部のアカウントにログインできるように SDDM を設定することができます。ログインするアカウントを選ぶ必要があるという点で自動ログインとは異なり、また、([[SSH]] 経由でログインしてきたリモートユーザなどを除く) インタラクティブユーザのみにログインを許可するという点で、アカウントのパスワードを空白に設定するのとも異なります。<br />
<br />
パスワードレスログインをセットアップするために、[[LightDM#インタラクティブなパスワードレスログインを有効化する|LightDM の場合の手順]]に従うことができます。ただし、{{ic|/etc/pam.d/lightdm}} ではなく {{ic|/etc/pam.d/sddm}} を変更する必要があります。<br />
<br />
=== ログイン時に KDE Wallet のロックを解除 ===<br />
<br />
[[KDE Wallet#ログイン時に KDE ウォレットを自動的にアンロック]] を見てください。<br />
<br />
=== テーマ設定 ===<br />
<br />
{{ic|[Theme]}} セクションでテーマの設定を変更できます。Plasma の KDE システム設定を使っている場合、テーマのプレビューを表示できます。<br />
<br />
デフォルトの Plasma テーマを使うには {{ic|breeze}} に設定してください。<br />
<br />
{{AUR|archlinux-themes-sddm}} など、[[AUR]] から入手できるテーマもあります。<br />
<br />
==== 現在のテーマ ====<br />
<br />
現在のテーマは {{ic|Current}} で設定します。例: {{ic|1=Current=archlinux-simplyblack}}。<br />
<br />
==== テーマの編集 ====<br />
<br />
SDDM のデフォルトのテーマディレクトリは {{ic|/usr/share/sddm/themes/}} です。作成したカスタムテーマはこのディレクトリのサブディレクトリに追加することができます。サブディレクトリの名前はテーマの名前と同じである必要があります。インストールされているファイルを参考に自分自身のテーマを作成してみてください。<br />
<br />
==== テーマをカスタマイズ ====<br />
<br />
設定ファイル {{ic|theme.conf}} の設定をオーバーライドするには、カスタムの {{ic|theme.conf.user}} ファイルを同じディレクトリに作成してください。例えば、テーマの背景を変更するには:<br />
<br />
{{hc|head=/usr/share/sddm/themes/''name''/theme.conf.user|output=<br />
[General]<br />
background=''/path/to/background.png''<br />
}}<br />
<br />
==== テーマのテスト (プレビュー) ====<br />
<br />
必要であれば SDDM のテーマをプレビューすることができます。これは、テーマを編集した際などにテーマがどのような見た目になるか分からない場合や、ログアウトせずにテーマを確認したい場合などに便利です。以下のようにコマンドを実行してください:<br />
<br />
$ sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/breeze<br />
<br />
接続されているモニタすべてに新しいウィンドウが開き、テーマのプレビューが表示されます。<br />
<br />
{{Note|これはプレビューだけです。このモードでは、シャットダウンやサスペンド、ログインなどの一部のアクションは効果がありません。}}<br />
<br />
==== マウスカーソル ====<br />
<br />
マウスカーソルのテーマを設定したい場合は、{{ic|CursorTheme}} を使用したいカーソルテーマに設定してください。<br />
<br />
[[Plasma]] で使用できるマウスカーソルのテーマの名前は、{{ic|breeze_cursors}}、{{ic|Breeze_Snow}}、そして {{ic|breeze-dark}} です。<br />
<br />
==== ユーザアイコン (アバター) ====<br />
<br />
{{Out of date|設定をせずとも SDDM は {{ic|/var/lib/AccountsService/icons/}} 内のアイコンを検出します。そして、Plasma はもはや {{ic|$HOME/}} 内にファイル (以下で述べているアイコンファイルや、そのファイルへのシンボリックリンク) を作成しません。}}<br />
<br />
SDDM は、各ユーザの {{ic|~/.face.icon}} か、あるいは SDDM 設定ファイル内の {{ic|FacesDir}} で指定された全ユーザに共通の場所から PNG イメージのユーザアイコン (別名: "アバター") を読み込みます。設定は {{ic|/etc/sddm.conf}} に直接、あるいは {{ic|/etc/sddm.conf.d/avatar.conf}} のように {{ic|/etc/sddm.conf.d/}} 下のファイルとして保存することができます (後者が推奨されます)。<br />
<br />
{{ic|FacesDir}} のオプションを使用するには、設定ファイルの {{ic|FacesDir}} キーで指定された場所に各ユーザに対して {{ic|''ユーザ名''.face.icon}} という名前で PNG イメージファイルを配置してください。デフォルトの {{ic|FacesDir}} は {{ic|/usr/share/sddm/faces/}} です。ニーズに応じてデフォルトの {{ic|FacesDir}} を変更することができます。例えば以下のように:<br />
<br />
{{hc|/etc/sddm.conf.d/avatar.conf|2=<br />
[Theme]<br />
FacesDir=/var/lib/AccountsService/icons/<br />
}}<br />
<br />
もう一つの方法は、ホームディレクトリのルートに {{ic|.face.icon}} という名前の PNG ファイルを置くことです。この場合、SDDM の設定ファイルを変更する必要はありません。ただし、{{ic|sddm}} ユーザがユーザアイコンの PNG イメージファイルを読むことができるようにしておく必要があります。<br />
<br />
{{Note|多くの KDE バージョンで、ユーザのアイコンイメージファイルは {{ic|~/.face}} であり、{{ic|~/.face.icon}} はそのファイルへのシンボリックリンクとなっています。ユーザのアイコンイメージがシンボリックリンクである場合、シンボリックリンク先のファイルに適切なファイルパーミッションを設定する必要があります。}}<br />
<br />
[[アクセス制御リスト#ACL の設定|適切なパーミッションを設定する]]には、以下を実行してください:<br />
<br />
$ setfacl -m u:sddm:x ~/<br />
$ setfacl -m u:sddm:r ~/.face.icon<br />
<br />
以下を実行することで、[[アクセス制御リスト#ACL の表示|パーミッションを確認する]]ことができます:<br />
<br />
$ getfacl ~/<br />
$ getfacl ~/.face.icon<br />
<br />
[https://github.com/sddm/sddm#no-user-icon SDDM README: No User Icon] を参照してください。<br />
<br />
=== Numlock ===<br />
<br />
Numlock を強制的に有効にしたい場合、{{ic|[General]}} セクションに {{ic|1=Numlock=on}} と設定してください。<br />
<br />
SDDM が Wayland で動作している場合、numlock の設定は現在反映されません。Numlock を有効化するには KWin の設定を変更する必要があるかもしれません。[https://github.com/sddm/sddm/issues/1830#issuecomment-1859339401 この issue] を参照してください。<br />
<br />
=== ディスプレイの回転 ===<br />
<br />
[[Xrandr#設定]] を見てください。<br />
<br />
=== DPI の設定 ===<br />
<br />
ディスプレイマネージャのレベルでディスプレイの PPI 設定を適切に設定できると便利です。[https://github.com/sddm/sddm/blob/master/README.md#custom-dpi] {{ic|ServerArguments}} の末尾にパラメータ {{ic|-dpi ''your_dpi''}} を追加する必要があります。例:<br />
<br />
{{hc|head=/etc/sddm.conf.d/dpi.conf|output=<br />
[X11]<br />
ServerArguments=-nolisten tcp -dpi 94<br />
}}<br />
<br />
=== HiDPI の有効化 ===<br />
<br />
{{Note|SDDM バージョン 0.20.0 から、HiDPI サポートがデフォルトで有効化されており、以下のステップは必要ではなくなりました。}}<br />
<br />
以下のファイルを作成してください:<br />
<br />
{{hc|/etc/sddm.conf.d/hidpi.conf|2=<br />
[Wayland]<br />
EnableHiDPI=true<br />
<br />
[X11]<br />
EnableHiDPI=true<br />
}}<br />
<br />
Wayland を使用する場合、HiDPI スケーリングは、使用する greeter に依存します。[https://github.com/sddm/sddm/issues/1704] 例えば、Breeze などの Qt ベースの greeter を使用する場合、以下の設定を追加してください:<br />
<br />
{{bc|1=<br />
[General]<br />
GreeterEnvironment=QT_SCREEN_SCALE_FACTORS=2,QT_FONT_DPI=192<br />
}}<br />
<br />
=== 仮想キーボードを有効化する ===<br />
<br />
{{pkg|qt5-virtualkeyboard}} をインストールしてください。<br />
<br />
以下のファイルを作成してください:<br />
<br />
{{hc|/etc/sddm.conf.d/virtualkbd.conf|2=<br />
[General]<br />
InputMethod=qtvirtualkeyboard<br />
}}<br />
<br />
これで、SDDM は仮想キーボードを開くボタンをログインスクリーンの左下の角に表示するようになります。<br />
<br />
=== 指紋リーダーを使う ===<br />
<br />
{{Note|これらの変更を加える前に、あなたの指紋が登録されていることを確認してください。指紋リーダーへの対応はまだ不完全であり、この方法を使うとパスワードのみでのログインができなくなってしまうようです。}}<br />
<br />
SDDM では [[fprint]] を利用した指紋認証が可能です。{{Pkg|fprint}} をインストールして指紋署名を登録したのち、{{ic|/etc/pam.d/sddm}} の先頭に以下の行を加えてください:<br />
<br />
{{hc|/etc/pam.d/sddm|<br />
auth sufficient pam_fprintd.so}}<br />
<br />
パスワードか指紋認証のいずれか片方を使うには、代わりに以下の行を {{ic|/etc/pam.d/sddm}} の先頭に加えてください:<br />
<br />
{{hc|1=/etc/pam.d/sddm|2=<br />
auth [success=1 new_authtok_reqd=1 default=ignore] pam_unix.so try_first_pass likeauth nullok<br />
auth sufficient pam_fprintd.so}}<br />
<br />
KWallet は指紋リーダーを使ってロックを解除できないことに注意してください ([[KDE Wallet#ログイン時に KDE ウォレットを自動的にアンロック]] をご覧ください)。しかし、1行目の記述によりパスワードログインが自動的に KWallet を解除することが保証されます。<br />
<br />
{{Tip|以下を {{ic|/etc/pam.d/kde}} の先頭に追加することで、これを KDE のロックスクリーンでも動作させることができます:<br />
<br />
{{hc|/etc/pam.d/kde|<br />
auth sufficient pam_unix.so try_first_pass likeauth nullok<br />
auth sufficient pam_fprintd.so}}<br />
<br />
1行目が先の {{ic|/etc/pam.d/sddm}} の対応する設定と異なることがわかります。KDE のロックスクリーンは KWallet の pam モジュールを実行する必要がないからです。<br />
}}<br />
<br />
パスワード欄を空にして {{ic|Enter}} キーを押すと、指紋認証が開始されます。<br />
<br />
=== Rootless Xorg ===<br />
<br />
従来、[[X11]] ディスプレイサーバーはデフォルトで root 権限で実行されてきました。この rootful モードでは、X11 はシステムリソースに無制限にアクセスできます (ハードウェアへの直接的なアクセスと管理が一般的であった環境では rootful モードが動作に不可欠だったのです)。しかし、最近のコンピューティング環境ではセキュリティが重要視されるようになり、rootless モードへ移行する作業が行われてきました。また、これは [[Wayland]] がデフォルトで rootless モードで動作する理由でもあります。<br />
<br />
非特権 X11 (及び Wayland) セッションは {{Pkg|sddm}} 0.20.0 からサポートされています。[https://github.com/sddm/sddm/blob/v0.20.0/ChangeLog]<br />
<br />
Rootless モードを有効化するには、{{ic|/etc/sddm.conf.d/}} に新しいファイルを適当な名前で作成し、以下を追加してください (必要に応じて {{ic|x11-user}} は {{ic|wayland}} に置き換えてください):<br />
<br />
{{hc|/etc/sddm.conf.d/rootless-x11.conf|2=<br />
[General]<br />
DisplayServer=x11-user}}<br />
<br />
Rootless モードで動作しているかどうかを確認するには、コンポジタのプロセス ({{ic|kwin_wayland}}) など) がどのユーザーによって所有されているかを調べてください。<br />
<br />
{{Note|SDDM では、Wayland のサポートは実験的とされています。}}<br />
<br />
{{Tip|デフォルトでは、{{ic|1=DisplayServer=wayland}} は、たとえインストールされていなくとも、[[weston]] コンポジタの使用を試みます。他の Wayland コンポジタを使用するには、[[#KDE / KWin]] で説明されているように {{ic|CompositorCommand}} オプションにプログラムと関連引数を指定してください。詳細は {{man|5|sddm.conf}} を参照してください。}}<br />
<br />
=== Wayland ===<br />
<br />
==== KDE / KWin ====<br />
<br />
{{Warning|デフォルトでは、KWin はグローバルなショートカットキーを有効化した状態で起動します。デフォルトのキーバインディングを使用してログインプロンプトをバイパスできるようになるため、この挙動はログインスクリーンにおいては危険です。{{ic|--no-global-shortcuts}} フラグを使用することにより、この問題を解決できます。[https://invent.kde.org/plasma/plasma-workspace/-/commit/7e4159e46f816dc65ac62eae37b15c882f0c8064]}}<br />
<br />
以下の記述を設定ファイルに追加すれば、KWin が Wayland コンポジタとして使用されるようになり、[https://wayland.app/protocols/wlr-layer-shell-unstable-v1 wlr_layer_shell] Wayland プロトコル拡張も有効化されます。この layer shell は {{Pkg|layer-shell-qt}} と {{Pkg|layer-shell-qt5}} に含まれています。後者のパッケージは、SDDM で Qt5 が使用されなくなるまで必要であり、これがないと黒画面になります。[https://bbs.archlinux.org/viewtopic.php?id=293540]<br />
<br />
{{hc|/etc/sddm.conf.d/10-wayland.conf|2=<br />
[General]<br />
GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell<br />
<br />
[Wayland]<br />
CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1}}<br />
<br />
===== 仮想キーボード =====<br />
<br />
仮想キーボードのサポートを有効化するには (例えば、{{pkg|qt5-virtualkeyboard}} や {{pkg|maliit-keyboard}} を使う場合)、以下のように {{ic|--inputmethod}} フラグに適切なキーボードを指定して、{{ic|kwin_wayland}} コマンドに追加してください。{{ic|InputMethod}} オプションは {{ic|General}} セクションで指定しないでください。仮想キーボードが表示されなくなってしまいます。<br />
<br />
{{hc|/etc/sddm.conf.d/10-wayland.conf|2=<br />
[Wayland]<br />
CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1 --inputmethod maliit-keyboard}}<br />
<br />
===== KDE のディスプレイ設定に合わせる =====<br />
<br />
KDE Wayland のディスプレイの設定 (例:モニターレイアウト、解像度など) に対する如何なる変更も SDDM に対しては適用されません。設定を適用させるには、KDE の ''KDE システム設定'' を開き、''起動と終了 > ログイン画面 (SDDM)'' へ行き、"''Plasma 設定を適用...''" をクリックしてください。この操作を行うためには許可が必要です。<br />
<br />
同じことは、以下のようにして手動で行うこともできます:<br />
<br />
SDDM でディスプレイを適切に管理するには (スケーリング、モニタの解像度、リフレッシュレートなど)、ホームディレクトリから適切な設定ファイルを SDDM の設定ディレクトリにコピー (かつ必要であれば変更) することができます:<br />
<br />
# cp ~/.config/kwinoutputconfig.json /var/lib/sddm/.config/<br />
# chown sddm:sddm /var/lib/sddm/.config/kwinoutputconfig.json<br />
<br />
SDDM で適切な入力処理 (タップでクリックやタッチスクリーンのマッピングなど) を可能にするには、適切な設定ファイルをホームディレクトリから SDDM の設定ディレクトリにコピーしてください:<br />
<br />
# cp ~/.config/kcminputrc /var/lib/sddm/.config/<br />
# chown sddm:sddm /var/lib/sddm/.config/kcminputrc<br />
<br />
== トラブルシューティング ==<br />
<br />
=== greeter が表示されず、カーソルのみの黒画面 ===<br />
<br />
利用可能なディスクの空き領域が存在しない場合、greeter はクラッシュします。{{ic|df -h}} でディスクの空き領域を確認してください。<br />
<br />
ディスクの空き領域の問題でないとしたら、[https://github.com/sddm/sddm/issues/1179 バグ]のせいかもしれません。[[Getty#インストール|他の TTY に切り替えて]]、{{ic|loginctl unlock-session ''session_id''}} を実行するか、SDDM を[[再起動]]してみてください。<br />
<br />
=== SDDM が greeter を表示するのに時間がかかる ===<br />
<br />
エントロピープールが小さいと SDDM のロードに長い時間がかかる可能性があります ([https://github.com/sddm/sddm/issues/1036 バグレポート])。[[乱数生成]] の記事にエントロピープールを大きくする方法があります。<br />
<br />
=== ログイン後にフリーズする ===<br />
<br />
{{ic|~/.Xauthority}} を削除し、再起動せずに再ログインしてみてください。ログインせずに再起動すると、このファイルが再び作成されてしまい、問題が解決されません。<br />
<br />
=== SDDM が tty7 ではなく tty1 で起動する ===<br />
<br />
SDDM は [http://0pointer.de/blog/projects/serial-console.html systemd の慣習]に従って tty1 に最初のグラフィカルセッションを起動します。<br />
<br />
設定ファイルには {{ic|MinimumVT}} オプションがまだ存在しますが、SDDM 0.20 からこのオプションは無視されるようになったことに注意してください: {{man|5|sddm.conf|3=MinimumVT=|url=https://man.archlinux.org/man/sddm.conf.5#MinimumVT=}}。<br />
<br />
=== 1つ以上のユーザが greeter に表示されない ===<br />
<br />
{{Warning|一般に、[https://systemd.io/UIDS-GIDS/ 1000 未満あるいは 60513 より大きい UID] に設定されているユーザは[[ディスプレイマネージャ]]に公開すべきではありません。}}<br />
<br />
デフォルトでは、SDDM は 1000 から 60513 の範囲内の UID を持つユーザのみを表示するように設定されています。表示したいユーザの UID がこの範囲の外である場合、この範囲を変更しなければなりません。<br />
<br />
例えば、501 の UID を持つユーザの場合、{{ic|MinimumUid}} を設定し、システムユーザによって使用されるシェルを持つユーザは隠してください:<br />
<br />
{{hc|/etc/sddm.conf.d/uid.conf|2=<br />
[Users]<br />
HideShells=/usr/bin/nologin,/sbin/nologin,/bin/false,/usr/bin/git-shell<br />
MinimumUid=500<br />
}}<br />
<br />
高い UID を持つユーザの場合は {{ic|MaximumUid}} を適切な値に変更してください。<br />
<br />
=== ユーザのアバターが greeter に表示されない ===<br />
<br />
ユーザの数が {{ic|DisableAvatarsThreshold}} を超過した場合や、アバターが {{ic|EnableAvatars}} パラメータによって有効化されていない場合、ユーザのアバターは表示されません。これを回避するには、以下の記述を sddm の設定に追加してください:<br />
<br />
{{hc|/etc/sddm.conf.d/avatars.conf|2=<br />
[Theme]<br />
EnableAvatars=true # enable avatars<br />
DisableAvatarsThreshold=7 # set the threshold for the number of users. Avatars are not shown if this threshold is exceeded.<br />
}}<br />
<br />
=== SDDM が US キーボードのレイアウトしかロードしない ===<br />
<br />
SDDM は {{ic|/etc/X11/xorg.conf.d/00-keyboard.conf}} で指定されたキーボードレイアウトをロードします。{{ic|localectl set-x11-keymap}} コマンドを使うことでこの設定ファイルを生成することが可能です。詳しくは [[Xorg でのキーボード設定]] を見て下さい。<br />
<br />
SDDM でのみ効果を持ち、後続のセッションには適用されないキーボードレイアウトを設定するもう一つの方法は、SDDM のスタートアップスクリプト ({{ic|/usr/share/sddm/scripts/Xsetup}} にあり) で ''setxkbmap'' コマンドを実行することです。例は [[Xorg でのキーボード設定#setxkbmap を使う]] を参照してください。<br />
<br />
また、SDDM は間違ってレイアウトを US キーボードとして表示することもありますが、パスワードを打ち始めると即座に正しいレイアウトに変わります [https://github.com/sddm/sddm/issues/202#issuecomment-76001543]。これは SDDM のバグではなく、[[X]] のバグのようです。[https://gitlab.freedesktop.org/xorg/xserver/-/issues/257]<br />
<br />
=== 画面解像度が低すぎる ===<br />
<br />
[[Wikipedia:Extended Display Identification Data|EDID]] の情報が壊れているディスプレイで [[HiDPI]] を使用した場合に発生する可能性のある問題です [https://github.com/sddm/sddm/issues/692]。[[#HiDPI の有効化|HiDPI]] を有効化している場合、HiDPI を無効にしてみてください。<br />
<br />
無効にしても問題が解決しない場合、Xorg の設定ファイルでスクリーンのサイズを設定してみることができます:<br />
<br />
{{hc|/etc/X11/xorg.conf.d/90-monitor.conf|2=<br />
Section "Monitor"<br />
Identifier "<default monitor>"<br />
DisplaySize 345 194 # in millimeters<br />
EndSection<br />
}}<br />
<br />
=== ホームディレクトリが autofs の場合にロード時間が長い ===<br />
<br />
SDDM はデフォルトでユーザーのアバターとして {{ic|~/.face.icon}} ファイルを使います。ホームディレクトリが [[autofs]] の場合 (例えば [[dm-crypt]] を使っている場合)、autofs がディレクトリをマウントできないと報告するまで SDDM は60秒間待機します。<br />
<br />
以下の設定ファイルを作成することでアバターを無効化することができます:<br />
<br />
{{hc|/etc/sddm.conf.d/avatar.conf|2=<br />
[Theme]<br />
EnableAvatars=false<br />
}}<br />
<br />
=== X authority (別名 MIT-MAGIC-COOKIE) ファイル ===<br />
<br />
[https://github.com/sddm/sddm/issues/622] で詳細が言及されているように、SDDM は 認証ファイルのためにランダムな新しい UUID を使います。そのため、そのファイルを見つけるためにスクリプトを使うことができます:<br />
<br />
# find /var/run/sddm/ -type f<br />
<br />
ログイン中のユーザーがいない時に [[x11vnc]] を開始する必要がある場合、このスクリプトが必要である場合があります。例えば:<br />
<br />
# x11vnc -display :0 -auth "$( find /var/run/sddm/ -type f )"<br />
<br />
=== マルチモニタの環境で greeter が重複する ===<br />
<br />
複数スクリーンの環境で X モニターのレイアウトが正しく設定されずに greeter が重複することがあります。この問題を解決するためには、以下のスクリプトを追加して、sddm greeter のレイアウトを左から右に並べてください:<br />
<br />
{{hc|/usr/share/sddm/scripts/Xsetup|2=<br />
for next in $(xrandr --listmonitors {{!}} grep -E " *[0-9]+:.*" {{!}} cut -d" " -f6); do<br />
[ -z "$current" ] && current=$next && continue<br />
xrandr --output $current --auto --output $next --auto --right-of $current<br />
current=$next<br />
done<br />
}}<br />
<br />
=== 予期しないディスプレイにログイン画面が表示される ===<br />
<br />
複数のディスプレイが接続されている場合に、SDDM のログインセッションがプライマリディスプレイではないディスプレイに表示されることがあります。サブディスプレイが回転されているがプライマリディスプレイはそうなっていない場合、この問題は腹立たしいでしょう。この問題に対するシンプルな修正法は、''xrandr'' を使って、ログインセッションが ''Xsetup'' スクリプトを使用する前にディスプレイを設定することです。例えば、以下では、''xrandr'' は、2つのディスプレイが接続されており、2つ目のディスプレイ (DP-2) はプライマリディスプレイ (DP-4) の左にあると報告しています。<br />
<br />
# xrandr | grep -w connected<br />
DP-2 connected 2160x3840+0+0 left (normal left inverted right x axis y axis) 597mm x 336mm<br />
DP-4 connected primary 3840x2160+2160+0 (normal left inverted right x axis y axis) 697mm x 392mm<br />
<br />
以下の ''Xsetup'' は、上記のセットアップをログインウィンドウのために再作成します:<br />
{{hc|/usr/share/sddm/scripts/Xsetup|2=<br />
#!/bin/sh<br />
# Xsetup - run as root before the login dialog appears<br />
<br />
xrandr --output DP-4 --auto --primary<br />
xrandr --output DP-2 --left-of DP-4 --rotate left --noprimary<br />
}}<br />
<br />
=== NVIDIA グラフィックカードでログアウト後に黒画面 ===<br />
<br />
ユーザからログアウトした後に、完全な黒画面や、カーソル/ディスプレイデバイスのロゴだけの黒画面が発生する場合があります。これは、{{ic|sddm.service}} が NVIDIA ドライバよりも早く起動してしまうため、発生します。[[NVIDIA#早期ロード|KMS の早期ロード]]を検討してください。<br />
<br />
=== パスワードの最初の試行に失敗すると、その後の試行で数回キーを押すと文字列が勝手に消されてしまう===<br />
<br />
デフォルト以外の別のテーマを使用してください。<br />
<br />
{{TranslationStatus|SDDM|2024-03-21|804034}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2&diff=36587
USB インストールメディア
2024-03-19T11:39:14Z
<p>AshMyzk: 日本語版ダウンロードページリンクを削除</p>
<hr />
<div>[[Category:Arch の入手とインストール]]<br />
[[de:Installation von einem USB-Stick]]<br />
[[en:USB flash installation medium]]<br />
[[es:USB flash installation medium]]<br />
[[fr:USB flash installation medium]]<br />
[[pt:USB flash installation medium]]<br />
[[ru:USB flash installation medium]]<br />
[[tr:USB flash installation medium]]<br />
[[zh-hans:USB flash installation medium]]<br />
{{Related articles start}}<br />
{{Related|光学ディスクドライブ}}<br />
{{Related|Archiso}}<br />
{{Related|マルチブート USB ドライブ}}<br />
{{Related articles end}}<br />
このページでは Arch Linux のインストーラーを USB ドライブ (別名: ''"フラッシュドライブ", "USB スティック", "USB キー"'' など) に書き込む様々な方法を記述します。[[Wikipedia:ja:Live USB|Live USB]] ([[Wikipedia:ja:Live CD|Live CD]] ライクな)システムは Arch Linux のインストールやシステムメンテナンス、システムの回復に使用できます。{{ic|/}} に [[Overlayfs]] を使うので、コンピュータを一度シャットダウンすると、すべての変更は破棄されます。<br />
<br />
USB ドライブからの Arch Linux のフルインストールをしたい場合 (すなわち永続的な設定もする場合) は、[[リムーバブルメディアに Arch Linux をインストール]] を参照してください。ブータブル Arch Linux USB スティックをレスキュー USB として使いたい場合は、[[chroot]] を参照してください。<br />
<br />
以下の手順に進む前に、https://archlinux.org/download/ から ISO をダウンロードし、[[インストールガイド#署名の検証|ファイルの整合性を検証]]してください。<br />
<br />
== ISO をそのまま使う (BIOS と UEFI) ==<br />
<br />
{{Warning|以下は USB フラッシュドライブ上の全データを不可逆的に削除するため、以下のことを行う前にフラッシュドライブ上に重要なファイルが残っていないことを確認してください。}}<br />
<br />
{{Note|ISO を USB フラッシュドライブや SD カードではなく、ハードディスクドライブやソリッドステートドライブに書き込みたい場合、ドライブの論理セクタサイズが 2048 バイト ([[Wikipedia:ja:ISO 9660|ISO 9660]] のセクタサイズ) 以下であり、かつそのサイズにアライメントされていることを確認してください。これはつまり、この ISO はこの方法を使って 4Kn [[Advanced Format]] ドライブに書き込むことはできないことを意味します。}}<br />
<br />
=== GNU/Linux で ===<br />
<br />
==== 基本的なコマンドラインユーティリティを使う ====<br />
<br />
以下のツールは {{Pkg|coreutils}} ({{Pkg|base}} [[メタパッケージ]]によってインストールされます) であるため、この方法はシンプルで汎用性があり、おすすめできます。<br />
<br />
{{ic|ls -l /dev/disk/by-id/usb-*}} を実行して USB ドライブの名前を調べ、{{ic|lsblk}} を実行してそのドライブがマウント'''されていない'''ことを確認してください。<br />
<br />
以下のコマンドを実行する際、{{ic|/dev/disk/by-id/usb-''My_flash_drive''}} の部分はあなたのドライブに合わせて変更してください (例: {{ic|/dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0}})。(パーティション番号を'''付けないでください'''。つまり、{{ic|/dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0'''-part1'''}} や {{ic|/dev/sdb'''1'''}} のようにしては'''いけません'''):<br />
<br />
* {{man|1|cat}} を使う: {{bc|# cat ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* {{man|1|cp}} を使う: {{bc|# cp ''path/to/''archlinux-''version''-x86_64.iso /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* [[dd]] を使う: {{bc|1=# dd bs=4M if=''path/to/''archlinux-''version''-x86_64.iso of=/dev/disk/by-id/usb-''My_flash_drive'' conv=fsync oflag=direct status=progress}}<br />
* [[tee]] を使う: {{bc|# tee < ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
* {{Pkg|pv}} を使う: {{bc|# pv ''path/to/''archlinux-''version''-x86_64.iso > /dev/disk/by-id/usb-''My_flash_drive''}}<br />
<br />
これらのツールの比較と観点、そしてなぜ ''dd'' があまり使われないのかについては、[https://unix.stackexchange.com/questions/224277/is-it-better-to-use-cat-dd-pv-or-another-procedure-to-copy-a-cd-dvd/224314#224314] と [https://www.vidarholen.net/contents/blog/?p=479] を見てください。<br />
<br />
{{Tip|<br />
* コマンドを実行した後に {{ic|sync}} を root 権限で実行することで、ドライブを抜く前にバッファが完全に書き込まれることを保証できます。<br />
* USB の Arch ISO の UEFI バージョンがハングする場合やロードできない場合、メディアの作成手順を同じ USB ドライブで複数回繰り返してみてください。これでうまく行かない場合、マザーボードのファームウェアをアップデートしてみると良いかもしれません。}}<br />
<br />
{{Note|Arch ISO イメージを書き込んだ USB ドライブを空の使用可能なストレージデバイスに戻すには、その USB ドライブを[[パーティショニング|再パーティショニング]]したり[[フォーマット|再フォーマット]]したりする前に、{{ic|wipefs --all /dev/disk/by-id/usb-''My_flash_drive''}} を root として実行して、ISO 9660 ファイルシステムシグネチャを削除する必要があります。}}<br />
<br />
==== GNOME Disk Utility を使う ====<br />
<br />
GNOME を使っている Linux ディストリビューションなら {{Pkg|nautilus}} と {{Pkg|gnome-disk-utility}} を使うことで簡単にライブ CD が作成できます。{{ic|.iso}} ファイルを右クリックして、 "Open With Disk Image Writer" を選択してください。GNOME Disk Utility が開いたら、"Destination" ドロップダウンメニューからフラッシュドライブを選択して "Start Restoring" をクリックしてください。<br />
<br />
==== MultiWriter を使う ====<br />
<br />
{{pkg|gnome-multi-writer}} は、ISO ファイルを複数の USB デバイスに一度に書き込める、シンプルな [[GTK]]3 ベースのグラフィカルツールです。<br />
<br />
==== Kindd を使う ====<br />
<br />
[https://github.com/LinArcX/Kindd Kindd] は、dd の Qt ベースグラフィカルフロントエンドです。{{AUR|kindd}} で利用できます。<br />
<br />
==== Popsicle を使う ====<br />
<br />
[https://github.com/pop-os/popsicle Popsicle] は、ISO ファイルを複数の USB デバイスに並列で書き込むためのツールで、PopOS 開発チームにより作成されました。Rust で記述されており、GTK を使用します。{{AUR|popsicle}} で利用可能です。<br />
<br />
==== SUSE Studio ImageWriter を使う ====<br />
<br />
[https://github.com/openSUSE/imagewriter SUSE Studio ImageWriter] は、OpenSUSE 開発チームにより作成された、Qt ベースのツールです。{{AUR|imagewriter}} で利用可能です。<br />
<br />
==== xorriso-dd-target を使う ====<br />
<br />
({{Pkg|libisoburn}} の) [https://dev.lovelyhq.com/libburnia/libisoburn/raw/master/xorriso-dd-target/xorriso-dd-target xorriso-dd-target] は、間違ったストレージデバイスへの上書きリスクの軽減を試みるシェルスクリプトです。最も安全なモードは {{ic|-plug_test}} という名前です。例えば、[[sudo]] を使って root に昇格できる通常ユーザとしてこのツールを使うには:<br />
<br />
$ xorriso-dd-target -with_sudo -plug_test -DO_WRITE -image_file archlinux-''version''-x86_64.iso<br />
<br />
詳細は {{man|1|xorriso-dd-target}} を見てください。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。{{AUR|usbimager}} で利用できます。<br />
<br />
=== Windows で ===<br />
<br />
==== win32diskimager を使う ====<br />
<br />
[https://sourceforge.net/projects/win32diskimager/ win32diskimager] は、Windows からイメージを USB スティックや SD/CF カードに書き込むためのグラフィカルツールです。ISO イメージを選択して、書き込み先の USB ドライブ文字を選択し (先にフォーマットする必要があります)、''Write'' をクリックしてください。<br />
<br />
==== USBwriter を使う ====<br />
<br />
Linux の {{ic|dd}} と同じように簡単に使うことができます。Arch Linux の ISO をダウンロードして、管理者権限で [https://sourceforge.net/p/usbwriter/wiki/Documentation/ USBwriter] ユーティリティを使って USB フラッシュメモリに書き込むだけです。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。<br />
<br />
==== Rufus を使う ====<br />
<br />
[https://rufus.akeo.ie/ Rufus] は多目的の USB ISO 書き込みツールです。このツールはグラフィカルな UI を提供し、ドライブが正しくフォーマットされているかどうかを気にしません。<br />
<br />
単に Arch Linux の ISO と、ブータブルな Arch Linux を作成したい USB ドライブを選択し、''START'' をクリックするだけです。<br />
<br />
{{Note|デフォルトの ISO イメージモードを使って作成した USB ドライブが正しく起動しない場合、'''DD イメージモード'''を代わりに使用する必要があります。モードを切り替えるには、''パーティション構成'' ドロップダウンメニューから ''GPT'' を選択してください。''START'' をクリックしたあとに、モード選択のダイアログが表示されるので、''DD イメージモード''を選択してください。}}<br />
<br />
{{Tip|[https://github.com/pbatard/rufus/issues/691 永続的なデータ保存のための追加パーティション]を追加するには、保存領域のサイズを選択するためのスライダーを使ってください。永続的なパーティションの機能を使う際は、''パーティション構成''ドロップダウンメニューで ''MBR'' を選択して、''ターゲットシステム''で ''BIOS または UEFI'' を選択してください。さもないと、ドライブは BIOS と UEFI の両方で使用できなくなります。}}<br />
<br />
==== Cygwin を使う ====<br />
<br />
[https://www.cygwin.com/ Cygwin] をインストールするときに {{ic|dd}} パッケージを選択してください。<br />
<br />
イメージファイルをホームディレクトリに置いてください:<br />
<br />
C:\cygwin\home\''User''\<br />
<br />
管理者として cygwin を実行します (cygwin からのハードウェアへのアクセスが必要です)。次のコマンドで USB ドライブに書き込みます:<br />
<br />
dd if=archlinux-''version''-x86_64.iso of=\\.\''x'': bs=4M<br />
<br />
{{ic|archlinux-''version''-x86_64.iso}} の部分は {{ic|cygwin}} ディレクトリ内にある iso イメージファイルへのパスです。{{ic|\\.\''x'':}} の部分は USB フラッシュドライブで、{{ic|''x''}} は windows が決めた文字になります、例: {{ic|\\.\d:}}。<br />
<br />
cygwin 6.0 では正しいパーティションを見つけてください:<br />
<br />
cat /proc/partitions<br />
<br />
そして出力を見て ISO イメージを焼きこみます。例:<br />
<br />
dd if=archlinux-''version''-x86_64.iso of=/dev/sdb bs=4M<br />
<br />
==== dd for Windows を使う ====<br />
<br />
Windows に対応した GPL ライセンスの dd が http://www.chrysocome.net/dd から利用できます。Cygwin と比べてダウンロード容量は少なくてすみます。使用方法は、上の Cygwin の方法に従って下さい。<br />
<br />
初めに dd for Windows の最新バージョンをダウンロードしてください。ダウンロードが完了したら、圧縮ファイルを {{ic|Downloads}} ディレクトリかどこかに展開してください。<br />
<br />
そして、管理者として ''Command Prompt'' を立ち上げてください。次に、{{ic|Downloads}} ディレクトリにディレクトリを変更 ({{ic|cd}}) してください。<br />
<br />
Arch Linux の ISO は ''dd'' の実行可能ファイルがある場所と同じフォルダに置いた方が便利です、どこか他のところに ISO を置いた場合はフルパスを記述する必要があります。<br />
<br />
使用するコマンドは以下のようになります:<br />
<br />
# dd if=archlinux-''version''-x86_64.iso od=\\.\''x'': bs=4M<br />
<br />
{{Note|Windows のドライブ文字はパーティションに紐付けられています。ディスク全体を選択できるようにするため、''dd for Windows'' には {{ic|od}} パラメータが存在し、上記のコマンドで使用しています。このパラメータが使えるのは ''dd for Windows'' だけであり、他の ''dd'' 実装では存在しないので注意してください。}}<br />
<br />
==== flashnul を使う ====<br />
<br />
[https://github.com/amarao/flashnul/blob/master/README.md flashnul] はフラッシュメモリ(USB-Flash, IDE-Flash, SecureDigital, MMC, MemoryStick, SmartMedia, XD, CompactFlash など)の機能を検証したりメンテナンスしたりするユーティリティです。<br />
<br />
コマンドプロンプトから flashnul を {{ic|-p}} 付きで実行してください。そして、どのデバイスインデックスが、対象の USB ドライブであるかを判断してください。例:<br />
<br />
{{hc|C:\>flashnul -p|<br />
Avaible physical drives:<br />
Avaible logical disks:<br />
C:\<br />
D:\<br />
E:\<br />
}}<br />
<br />
正しいデバイスを見つけたら、デバイスにイメージを書き込むことができます。{{ic|-L}} とデバイスインデックス、イメージへのパスを付けて flashnul を実行してください。例:<br />
<br />
C:\>flashnul '''E:''' -L ''path\to\''archlinux-''version''-x86_64.iso<br />
<br />
データを書き込んでいいと確信しているのであれば yes と入力してください。そして、書き込みが終わるまで少し待ってください。アクセス拒否のエラーが発生した場合、開いているエクスプローラーのウインドウをすべて閉じてください。<br />
<br />
{{Note|コマンドプロンプトは管理者として開いてください。さもないと、flashnul はフラッシュメモリをブロックデバイスとして開くことができず、Windows が提供するドライブハンドルを通してしか書き込むことができません。}}<br />
<br />
=== macOS で ===<br />
<br />
==== macOS dd を使う ====<br />
<br />
まず USB ドライブを確認する必要があります。{{ic|/Applications/Utilities/Terminal}} を開いて以下のコマンドでストレージデバイスを全て確認できます:<br />
<br />
$ diskutil list<br />
<br />
USB デバイスは {{ic|/dev/disk2 (external, physical)}} のように表示されます。名前や容量から消去したいデバイスであることを確認できたら、識別子を使って下のコマンドを実行してください ({{ic|/dev/disk''X''}} を確認できた識別子に置き換えてください)。<br />
<br />
通常 masOS では USB デバイスは自動的にマウントされるため、{{ic|dd}} を使ってブロック単位で書き込む前にアンマウントする必要があります (エジェクトではありません)。ターミナルで、以下を実行:<br />
<br />
$ diskutil unmountDisk /dev/disk''X''<br />
<br />
それから ISO イメージファイルをデバイスにコピーしてください:<br />
<br />
{{Note|<br />
* BSD から継承した {{ic|dd}} (macOS のデフォルトの {{ic|dd}} も含む) は、小文字の {{ic|m}} サフィックスを使います。これは、この記事の他の部分で使用されている GNU {{ic|dd}} とは異なります。<br />
* {{ic|disk}} の前に {{ic|r}} を付けると raw モードになり、転送をより速くすることができます。<br />
* 新しいバージョンの macOS では、dd コマンドは {{ic|1=status=progress}} をサポートしており、進捗状況を表示させることができます。以下のように手動で進捗状況を表示させることも可能です。<br />
}}<br />
<br />
# dd if=''path/to''/archlinux-''version''-x86_64.iso of=/dev/'''r'''disk''X'' bs=1m<br />
<br />
このコマンドは何も出力せずに動きます。進捗を表示させるには、{{ic|Ctrl+t}} を押して SIGINFO を送信してください。{{ic|disk''X''}} には {{ic|s1}} サフィックスを含めるべきではないことに注意してください。さもないと、その USB デバイスは UEFI モードでしか起動できず、レガシーモードでは起動できません。完了すると macOS が ''セットしたディスクは、このコンピュータで読み取れないディスクでした。'' とエラーを吐くことがあります。''無視'' を選択してください。これで USB デバイスはブータブルになります。<br />
<br />
==== USBImager を使う ====<br />
<br />
[https://gitlab.com/bztsrc/usbimager/ USBImager] は、圧縮ディスクイメージを USB ドライブに書き込んだり、検証したり、バックアップを作成したりする、マルチプラットフォームのグラフィカルアプリケーションです。<br />
<br />
=== Android で ===<br />
<br />
==== EtchDroid を使う ====<br />
<br />
[https://etchdroid.depau.eu/ EtchDroid] は、Android のための OS イメージ書き込みツールです。Android 5 以降、root 権限が無くとも動作します。問題が生じた場合は、上流の [https://github.com/EtchDroid/EtchDroid/issues/ GitHub] を確認してください。<br />
<br />
Arch Linux インストーラーを作成するには、ISO イメージを Android デバイス上にダウンロードしてください。(必要であれば USB-OTG アダプタを使って) USB ドライブを Android デバイスに挿入してください。EtchDroid を開き、''Flash raw image'' を選択し、Arch ISO を選択し、USB ドライブを選択してください。USB API の使用許可を付与し、確認してください。<br />
<br />
イメージの書き込み中は携帯を机の上に置いておいてください: 多くの USB-OTG アダプタは少しぐらつくので、間違えて抜けてしまうかもしれません。<br />
<br />
== 手動フォーマットを使う ==<br />
<br />
=== BIOS と UEFI ===<br />
<br />
==== GNU/Linux で ====<br />
<br />
この方法は {{ic|dd}} でイメージを直接書き込むより少し複雑ですが、ドライブをデータストレージとして使える状態のままにすることができます (既存の[[パーティショニング|パーティション分割されたデバイス]]の中のパーティションに ISO をインストールします)。<br />
<br />
{{Note|ここでは、対象のパーティションを {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}} と表記します。{{ic|''My_flash_drive''}} と {{ic|''n''}} の部分はあなたのシステムに合わせて置き換えてください。}}<br />
<br />
* {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} 上に[[パーティショニング#パーティションテーブル|パーティションテーブル]]を作成してください (まだ作成していないのであれば)。<br />
* デバイス上にパーティションを作成してください(まだ作成していないのであれば)。パーティション {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}} は [[FAT32]] にフォーマットされていなければなりません。<br />
* USB フラッシュデバイスにあるその FAT32 ファイルシステムをマウントしてください。そして、ISO イメージの内容をそこへ[[アーカイブと圧縮|展開]]してください。例えば:<br />
<br />
# mount /dev/disk/by-id/usb-''My_flash_drive''-part''n'' /mnt<br />
# bsdtar -x -f archlinux-''version''-x86_64.iso -C /mnt<br />
<br />
BIOS ブートを行うには、ファイルが存在しているボリュームを指定する必要があります。デフォルトでは、UUID {{ic|''YYYY-mm-dd-HH-MM-SS''-00}} (適切な UTC のリリース日と時間) が使用されます。{{ic|/mnt/boot/syslinux/archiso_sys-linux.cfg}} 内の {{ic|1=archisodevice=}} パラメータはデバイスの[[永続的なブロックデバイスの命名|永続的なデバイス識別子]]に置き換えてください。例えば: {{ic|1=archisodevice=UUID=''YOUR-UUID''}}。<br />
<br />
{{Note|{{ic|archisolabel}} や {{ic|archisodevice}} を間違えると、作成したメディアから起動できなくなります。}}<br />
<br />
BIOS システム用の [[Syslinux]] のファイルはすでに {{ic|/mnt/boot/syslinux}} へコピーされています。<br />
FAT ファイルシステムを[[ファイルシステム#ファイルシステムのアンマウント|アンマウント]]し、{{Pkg|syslinux}} と {{Pkg|mtools}} を[[インストール]]して、パーティションを起動可能にするために以下のコマンドを実行してください:<br />
<br />
# umount /mnt<br />
# syslinux --directory boot/syslinux --install /dev/disk/by-id/usb-''My_flash_drive''-part''n''<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/disk/by-id/usb-''My_flash_drive''<br />
<br />
{{Note|<br />
* {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} に [[GPT|GUID パーティションテーブル]]が存在する場合、{{ic|mbr.bin}} は {{ic|gptmbr.bin}} に置き換えてください。詳細は [[Syslinux#手動インストール]] を見てください。<br />
* [[MBR]] パーティションテーブルの場合は、"boot" フラグを設定する必要があります。詳細は [[Syslinux#MBR パーティションテーブル]] を見てください。<br />
}}<br />
<br />
==== Windows で ====<br />
<br />
{{Note|<br />
* UEFI ブータブル USB を作成するのに '''Bootable USB Creator ユーティリティ'''を使ってはいけません。手動フォーマットの場合、USB ドライブに ISO を dd するのに ''dd for Windows'' を使わないで下さい。<br />
* 下のコマンド内の '''X:''' は Windows での USB フラッシュドライブを意味しています。<br />
* Windows はパスを分けるのにバックスラッシュ {{ic|\}} を使っているので、下のコマンドでもバックスラッシュを使っています。<br />
* 全てのコマンドは Windows のコマンドプロンプトで'''管理者として'''実行する必要があります。<br />
* {{ic|>}} は Windows のコマンドプロンプトを示しています。<br />
}}<br />
<br />
* [https://rufus.ie/ Rufus USB partitioner] を使って USB ドライブをパーティショニングし、フォーマットしてください。パーティション構成オプションは '''MBR for BIOS and UEFI''' を、ファイルシステムは '''FAT32''' を選んで下さい。"Create a bootable disk using ISO image" と "Create extended label and icon files" オプションのチェックを外して下さい。<br />
* '''Volume Label''' は好きに設定してください。このステップは公式 ISO ([[Archiso]]) に必要です。このステップは、前の "パーティショニングとフォーマット" のステップで Rufus を使用することでも可能です。<br />
* ISO を (ZIP アーカイブの解凍と同じように) USB フラッシュドライブに [https://www.7-zip.org/ 7-Zip] を使って展開してください。<br />
* {{ic|''X'':\boot\syslinux\archiso_sys-linux.cfg}} を編集して、{{ic|1=archisodevice=UUID=''YYYY-mm-dd-HH-MM-SS''-00}} の部分を全て {{ic|1=archisodevice=LABEl=''YOUR_LABEL''}} に置き換えてください。{{ic|''YOUR_LABEL''}} の部分は、先ほど設定したボリュームラベルです。<br />
* https://www.kernel.org/pub/linux/utils/boot/syslinux/ から最新の公式 syslinux 6.xx バイナリ (zip ファイル) をダウンロードして展開してください。Syslinux のバージョンは ISO イメージで使われているバージョンと合わせてください。<br />
* 以下のコマンドを実行してください (管理者として実行した Windows のコマンドプロンプトで実行):<br />
<br />
> cd bios\<br />
> for /r %Y in (*.c32) do copy "%Y" "''X'':\boot\syslinux\" /y<br />
> copy mbr\*.bin ''X'':\boot\syslinux\ /y<br />
<br />
* 以下を実行して Syslinux を USB にインストールしてください (64ビット版 Windows では {{ic|win64\syslinux64.exe}} を使ってください):<br />
<br />
> cd bios\<br />
> win32\syslinux.exe -d /boot/syslinux -i -a -m ''X'':<br />
<br />
{{Note|<br />
* ただファイルをコピーしただけでは起動可能なデバイスにはなりません。最後のコマンドは、Syslinux のファイルを USB のパーティションの VBR にインストールし、そのパーティションを MBR パーティションテーブル上で "active/boot" に設定し、MBR ブートコードを USB デバイスに書き込みます。<br />
* {{ic|-d}} スイッチには Unix 環境と同じようにスラッシュで区切るパスを使います。<br />
}}<br />
<br />
=== BIOS のみ ===<br />
<br />
==== GNU/Linux で ====<br />
<br />
===== USB-ZIP ドライブの作成 =====<br />
<br />
一部の古い BIOS 環境では、USB-ZIP ドライブからの起動しかサポートされていないことがあります。この方法では USB ハードドライブからの起動を可能とします。<br />
<br />
* {{Pkg|syslinux}} と {{Pkg|mtools}} を[[インストール]]してください。<br />
* {{ic|ls /dev/disk/by-id/usb-*}} で USB ドライブを確認します。<br />
* {{ic|mkdiskimage -4 /dev/disk/by-id/usb-''My_flash_drive'' 0 64 32}} を実行してください。しばらく時間がかかります。<br />
<br />
ここからは手動フォーマットの手順に従ってください。ZIP ドライブのためパーティションは {{ic|/dev/disk/by-id/usb-''My_flash_drive''-part4}} になります。<br />
<br />
{{Note|ドライブを FAT32 でフォーマットしてはいけません。FAT16 のままにしてください。}}<br />
<br />
=== UEFI のみ ===<br />
<br />
UEFI のみでブートさせる場合、FAT でフォーマットされた USB フラッシュドライブへ ISO のコンテンツを展開するだけで十分です。<br />
<br />
ドライブ上に EFI システムパーティションを作成する必要はありません。すべての UEFI (実装) は、USB フラッシュドライブ上の任意の FAT ボリュームから起動できるからです。最も互換性の高いセットアップは、{{ic|0c}} "W95 FAT32 (LBA)" タイプの単一のアクティブ (ブータブル) プライマリパーティションを持つ MBR パーティションテーブルを使用することです。[https://lists.gnu.org/archive/html/grub-devel/2019-05/msg00063.html]<br />
<br />
{{Tip|セキュアブートがカスタムの鍵で設定されている場合、[[セキュアブート#公式の ISO をカスタムの鍵で署名する]] を参照して、どのファイルを署名する必要があるかを確認してください。}}<br />
<br />
==== GNU/Linux で ====<br />
<br />
この方法では、ファイルを ISO イメージから USB フラッシュドライブへ展開します。<br />
<br />
* もしまだなら、[[パーティショニング#パーティションテーブル|パーティションテーブル]]を {{ic|/dev/disk/by-id/usb-''My_flash_drive''}} に作成し、[[パーティション]] をデバイス上の ({{ic|/dev/disk/by-id/usb-''My_flash_drive''-part''n''}}) に作成してください。<br />
* もしまだなら、そのパーティションを [[FAT32]] にフォーマットしてください: {{bc|# mkfs.fat -F 32 /dev/disk/by-id/usb-''My_flash_drive''-part''n''}}<br />
* そのファイルシステムを[[マウント]]してください: {{bc|# mount /dev/disk/by-id/usb-''My_flash_drive''-part''n'' /mnt}}<br />
* そのマウントしたファイルシステムに ISO イメージを展開してください: {{bc|1=# bsdtar -x -f archlinux-''version''-x86_64.iso -C /mnt}}<br />
# ファイルシステムを[[アンマウント]]してください。<br />
<br />
==== Windows で ====<br />
<br />
この方法では、ファイルを ISO イメージから USB フラッシュドライブへコピーします。<br />
<br />
# USB フラッシュドライブをパーティショニングし、FAT32 にフォーマットしてください。<br />
# {{ic|archlinux-''version''-x86_64.iso}} を右クリックし、''マウント''を選択してください。<br />
# 新しく作成した DVD ドライブに移動し、すべてのファイルとフォルダを USB フラッシュドライブにコピーしてください。<br />
# コピーが終わったら、DVD ドライブを右クリックして、''取り出し''を選択してください。<br />
# USB フラッシュドライブを取り出してください。<br />
<br />
==== macOS で ====<br />
<br />
''DiskImageMounter'' と ''Disk Utility'' のどちらも isohybrid ISO をマウントすることはできません。しかし、macOS には ''libarchive'' が同梱されているため、''bsdtar'' を使って ISO をフラッシュドライブに展開することができます。<br />
<br />
# まだ行っていないならば、''Disk Utility'' を使って USB フラッシュドライブをパーティショニングし、そのパーティションを FAT32 でフォーマットしてください。<br />
# そのボリュームをマウントしてください。<br />
# ''Terminal'' アプリケーションを開き、''bsdtar'' を使って ISO イメージを先のマウント済みのファイルシステムに展開してください: {{bc|$ bsdtar -x -f archlinux-''version''-x86_64.iso -C /Volumes/''your-flash-drive''}}<br />
# 終わったら、USB フラッシュドライブをアンマウントし、取り出してください。<br />
<br />
== マルチブート USB ドライブを使う ==<br />
<br />
この方法では archiso を含む複数の ISO をひとつの USB デバイスから起動できるようにします。他の方法よりも既存の USB ドライブを新しい ISO にアップデートするのが簡単です。[[マルチブート USB ドライブ]]を参照してください。<br />
<br />
=== ventoy を使う ===<br />
<br />
[[Ventoy]] は、ISO/WIM/IMG/VHD(x)/EFI ファイルの起動可能な USB ドライブを作成するためのオープンソースなツールです。ventoy では、ディスクを何回もフォーマットする必要はありません。ただ ISO/WIM/IMG/VHD(x)EFI ファイルを USB ドライブにコピーするだけで、それらを直接起動できます。一度に多くのファイルをコピーでき、ventoy は起動するファイルを選択するブートメニューを提供します。{{AUR|ventoy-bin}} で利用可能です。<br />
<br />
=== Windows で ===<br />
<br />
==== RAM からインストールメディアをロードする ====<br />
<br />
[[Syslinux]] と [[RAM ディスク]] ([https://wiki.syslinux.org/wiki/index.php/MEMDISK MEMDISK]) を使って RAM から ISO イメージをロードする方法です。システムメモリ上で全てを実行するので、それに見合った RAM が積まれていなければなりません。MEMDISK を使って Arch Linux をインストールするために必要な RAM の最低量は 500 MB から 1 GB です。<br />
<br />
Arch Linux と MEMDISK のシステム要件については[[インストールガイド]]と [http://www.etherboot.org/wiki/bootingmemdisk#preliminaries こちら] に詳しく載っています。[https://bbs.archlinux.org/viewtopic.php?id=135266 フォーラムスレッド] も参照してください。<br />
<br />
{{Tip|一度ロードが完了しグラフィカルメニューが表示されたら、USB スティックを抜いてもオーケーです。そのままスティックを他のマシンで使ってもかまいません。また、起動に使った USB スティックに Arch をインストールすることもできます。}}<br />
<br />
===== USB フラッシュドライブの準備 =====<br />
<br />
USB スティックを FAT32 でフォーマットし、新しくフォーマットしたドライブに以下のフォルダを作ります:<br />
* {{ic|Boot}}<br />
** {{ic|Boot/ISOs}}<br />
** {{ic|Boot/Settings}}<br />
<br />
===== 必要なファイルを USB フラッシュドライブにコピー =====<br />
<br />
ブートしたい ISO を {{ic|Boot/ISOs}} フォルダにコピーしてください。その後、[https://www.kernel.org/pub/linux/utils/boot/syslinux/ ここ] から {{pkg|syslinux}} の最新版を取ってきて以下のファイルをコピーしてください。<br />
* {{ic|./win32/syslinux.exe}} をデスクトップかダウンロードフォルダに置いて下さい。<br />
* {{ic|./memdisk/memdisk}} を USB フラッシュドライブ上の {{ic|Settings}} フォルダに置きます。<br />
<br />
===== 設定ファイルの作成 =====<br />
<br />
必要なファイルをコピーしたら、{{ic|/boot/Settings}} フォルダの中に {{ic|syslinux.cfg}} ファイルを作ります:<br />
{{Warning|{{ic|INITRD}} 行には、{{ic|ISOs}} フォルダにコピーした ISO ファイルの名前を使って下さい。}}<br />
{{hc|/Boot/Settings/syslinux.cfg|2=<br />
DEFAULT arch_iso<br />
<br />
LABEL arch_iso<br />
MENU LABEL Arch Setup<br />
LINUX memdisk<br />
INITRD /Boot/ISOs/archlinux-2017.04.01-x86_64.iso<br />
APPEND iso}}<br />
Syslinux について詳しくは [[Syslinux]] を参照してください。<br />
<br />
===== 最後の手順 =====<br />
<br />
最後に {{ic|syslinux.exe}} と同じところに {{ic|*.bat}} を作り、実行します (Vista や Windows 7 を使っているときは"管理者として実行"します):<br />
<br />
{{hc|C:\Documents and Settings\username\Desktop\install.bat|<br />
@echo off<br />
syslinux.exe -m -a -d /Boot/Settings X:<br />
}}<br />
<br />
== 推奨されない方法 ==<br />
<br />
{{Warning|以下の方法は推奨されません。}}<br />
<br />
=== etcher を使う ===<br />
<br />
etcher にはアナリティクスとファーストパーティの広告があります。[https://github.com/balena-io/etcher/issues/2057]、[https://github.com/balena-io/etcher/blob/37769efbeda0abe7993d95e2b2aea2f461edd307/lib/gui/app/pages/main/MainPage.tsx#L151]、[https://github.com/balena-io/etcher/blob/37769efbeda0abe7993d95e2b2aea2f461edd307/docs/MAINTAINERS.md#publishing] を見てください。<br />
<br />
=== Universal USB Installer を使う ===<br />
<br />
* ダウンロードページには偽の ''Download'' ボタンがあり、マルウェアが含まれているかもしれません。<br />
* Universal USB Installer は ISO をそのまま書き込みません。そのため、syslinux バージョンの不一致により BIOS ブートが壊れます。[https://bbs.archlinux.org/viewtopic.php?pid=1344629] を見てください。<br />
* Arch Linux のインストールイメージのブートローダは {{ic|ARCH_''YYYYXX''}} というラベルのボリュームに ISO の内容が存在することを期待します。Universal USB Installer はファイルシステムのラベルをアップデートせず、ブートローダの設定も修正しません。<br />
<br />
=== UNetbootin を使う ===<br />
<br />
* UNetbootin は ISO をそのまま書き込みません。そのため、syslinux バージョンの不一致により BIOS ブートが壊れます。<br />
* Arch Linux のインストールイメージのブートローダは {{ic|ARCH_''YYYYXX''}} というラベルのボリュームに ISO の内容が存在することを期待します。UNetbootin はファイルシステムのラベルをアップデートせず、ブートローダの設定も修正しません。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== デバイスが表示されない ===<br />
<br />
{{ic|/dev/disk/by-label/ARCH_XXXXXX}} がマウントされず "device did not show up after 30 seconds" エラーが表示される場合は、USB メディアの名前を {{ic|ARCH_XXXXXX}} に変えてみて下さい (例: {{ic|archlinux-2021.02.01-x86_64.iso}} の場合は {{ic|ARCH_202102}})。<br />
<br />
=== ループバックデバイスのセットアップに失敗する: No such file or directory ===<br />
<br />
{{ic|losetup: /run/archiso/bootmnt/arch/x86_64/airootfs.sfs: failed to set up loop devices: No such file or directory}} というエラーが発生する場合、USB 2.0 のポートを使ってみてください。例えば、一部の USB 3.0 ポートは USB ハブを介して動作しません。<br />
<br />
=== 他のエラー ===<br />
<br />
その他のエラーが発生する場合、他の USB デバイスを使用してみてください。そうすることですべての問題が解決したという事例が複数あります。<br />
<br />
== 参照 ==<br />
<br />
* [[Gentoo:LiveUSB/Guide]]<br />
* [[Fedora:How to create and use Live USB]]<br />
* [https://en.opensuse.org/SDB:Live_USB_stick openSUSE wiki - SDB:ライブ USB メモリ]<br />
<br />
{{TranslationStatus|USB flash installation medium|2023-09-24|788125}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%BC%E3%83%89&diff=36581
マイクロコード
2024-03-18T12:36:28Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:CPU]]<br />
[[Category:セキュリティ]]<br />
[[de:Microcode]]<br />
[[en:Microcode]]<br />
[[es:Microcode]]<br />
[[ru:Microcode]]<br />
[[zh-hans:Microcode]]<br />
プロセッサの製造者はプロセッサ[[Wikipedia:ja:マイクロプログラム方式|マイクロコード]]に安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。<br />
<br />
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。<br />
<br />
== マイクロコードをロードする ==<br />
<br />
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:<br />
<br />
# '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。<br />
# '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。<br />
# '''遅延ロード''' ([https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください:<br />
* {{Pkg|amd-ucode}} : AMD プロセッサ<br />
* {{Pkg|intel-ucode}} : Intel プロセッサ<br />
<br />
=== 早期ロード ===<br />
<br />
マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) によって読み込む必要があります。<br />
<br />
早期ローダは、マイクロコードのアップデートファイルが未圧縮 CPIO アーカイブ (initramfs イメージ) 内の {{ic|/kernel/x86/microcode/GenuineIntel.bin}} または {{ic|/kernel/x86/microcode/AuthenticAMD.bin}} として存在していることを期待します。<br />
<br />
早期 initramfs イメージ (マイクロコードのアップデートファイル) は、メインの initramfs イメージと合体して1つのファイルにし、(ブートローダーで {{ic|1=initrd=}} カーネルコマンドラインオプションを使うか、unified カーネルイメージ内にパックして) 単一の initramfs ファイルとしてカーネルに渡すこともできますし、個別のファイルとして使用することもできます (この場合、{{ic|1=initrd=}} カーネルコマンドラインオプションを複数回使用する必要があります)。いずれにせよ、マイクロコードを含んでいる未圧縮 CPIO アーカイブはメインの initramfs より前に配置'''しなければなりません'''。<br />
<br />
注意点として、ユーザーの初期ブート構成は多様なので、Arch のデフォルトの設定ではマイクロコードのアップデートは自動的にトリガーされません。<br />
<br />
==== カスタムビルドされたカーネル ====<br />
<br />
早期ローダーを[[カーネル/Arch build system|カスタムカーネル]]で動作させるには、"CPU microcode loading support" を、モジュールとしてコンパイルせずに、カーネルに組み込む必要があります。これにより "Early load microcode" プロンプトが有効化され、これを {{ic|Y}} に設定する必要があります。<br />
<br />
CONFIG_BLK_DEV_INITRD=Y<br />
CONFIG_MICROCODE=y<br />
CONFIG_MICROCODE_INTEL=Y<br />
CONFIG_MICROCODE_AMD=y<br />
<br />
==== Unified カーネルイメージ ====<br />
<br />
[[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。<br />
<br />
==== マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする ====<br />
<br />
未圧縮のマイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に追加する]ことが可能であり、単一の initramfs ファイルとして利用できるようになります。この方法は、追加のブートパラメータの設定が必要ないため、[[#別個のマイクロコード initramfs ファイルを使う]] の方法よりも推奨されます。<br />
<br />
[[mkinitcpio]] と [[dracut]] は、このような複数のファイルが混合された initramfs ファイルの生成をサポートしており、この動作がデフォルトです。しかし、[[Booster]] は[https://github.com/anatol/booster/issues/40 複数のファイルが混合された initramfs ファイルの生成をサポートしていません]。<br />
<br />
===== mkinitcpio =====<br />
<br />
[[mkinitcpio]] でマイクロコードを含んでいる initramfs ファイルを生成するには、{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|microcode}} フックが含まれていることを確認してください。<br />
<br />
{{ic|autodetect}} フックが {{ic|microcode}} フックよりも前にある場合、現在使用している CPU のマイクロコードのみが追加されます。システム上に存在する全ての CPU マイクロコードファイルを追加するには、{{ic|microcode}} フックを {{ic|autodetect}} フックより前に移動するか、{{ic|autodetect}} フックを削除してください。<br />
<br />
Initramfs の生成時に ''mkinitcpio'' は以下のようなメッセージを表示します:<br />
<br />
-> Early uncompressed CPIO image generation successful<br />
<br />
{{man|1|lsinitcpio}} コマンドを使えば、マイクロコードのアップデートファイルが initramfs 内に存在していることを確認できます。例えば:<br />
<br />
{{hc|# lsinitcpio --early /boot/initramfs-linux.img|<br />
early_cpio<br />
kernel/<br />
kernel/x86/<br />
kernel/x86/microcode/<br />
kernel/x86/microcode/AuthenticAMD.bin<br />
}}<br />
<br />
===== dracut =====<br />
<br />
[[dracut]] に関しては {{man|5|dracut.conf|DESCRIPTION}} を見てください。<br />
<br />
==== 別個のマイクロコード initramfs ファイルを使う ====<br />
<br />
先の方法を用いない場合、マイクロコードの早期アップデートは {{ic|/boot/amd-ucode.img}} や {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルで最初の initrd''' として追加することで有効化する必要があります。マイクロコードの initrd は通常の initrd ファイルよりも前に来る必要があります。一般的なブートローダーにおける手順は以下を参照してください。<br />
<br />
以下の章では、{{ic|''cpu_manufacturer''}} という記述はあなたの CPU の製造業者名 (つまり、{{ic|amd}} か {{ic|intel}}) に置き換えてください。<br />
<br />
===== GRUB =====<br />
<br />
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように {{ic|/boot/''cpu_manufacturer''-ucode.img}} を追加できます(別のパーティションに {{ic|/boot}} がある場合は {{ic|/''cpu_manufacturer''-ucode.img}}):<br />
<br />
{{hc|/boot/grub/grub.cfg|<br />
...<br />
echo 'Loading initial ramdisk'<br />
initrd '''/boot/''cpu_manufacturer''-ucode.img''' /boot/initramfs-linux.img<br />
...<br />
}}<br />
<br />
それぞれのメニュエントリに対してこれを行ってください。<br />
<br />
===== systemd-boot =====<br />
<br />
以下のように、マイクロコードを読み込むオプションを初期 RAM ディスクより前に使用してください:<br />
<br />
{{hc|/boot/loader/entries/''entry''.conf|<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
'''initrd /''cpu_manufacturer''-ucode.img'''<br />
initrd /initramfs-linux.img<br />
...<br />
}}<br />
<br />
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。<br />
<br />
===== EFISTUB =====<br />
<br />
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:<br />
<br />
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img<br />
<br />
===== rEFInd =====<br />
<br />
{{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡せるようにするために [[rEFInd#設定]] で説明されている手順に従う必要があります。}}<br />
<br />
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、マイクロコードイメージをロードするための {{ic|1=initrd=}} オプションを最初の {{ic|initrd}} 引数として追加してください。{{ic|/boot}} 内のファイルが別のパーティションの直下にあるかどうかに応じて、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} か {{ic|1=initrd=''cpu_manufacturer''-ucode.img}} のどちらかを使ってください。<br />
<br />
マイクロコードは、ブートオプションのリストの中で最初に宣言された initramfs でなければなりません。例えば:<br />
<br />
"Boot using default options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap initrd=boot\''cpu_manufacturer''-ucode.img initrd=boot\initramfs-%v.img"<br />
<br />
====== 手動でブートオプションを記述する ======<br />
<br />
[[rEFInd#手動でブートエントリを記述する|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合は、{{ic|1=initrd=}} パラメータを追加して、ブートパーティション内の適切なパスに設定する必要があります。このパラメータは options 行の一部である必要があり、設定のメインの部分ではありません。例:<br />
<br />
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"<br />
<br />
===== Syslinux =====<br />
<br />
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}<br />
<br />
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます:<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
INITRD '''../''cpu_manufacturer''-ucode.img''',../initramfs-linux.img<br />
...<br />
<br />
===== LILO =====<br />
<br />
[[LILO]] は複数の初期 RAM ディスクイメージの読み込みをサポートしておらず、他の古いブートローダーも同じくサポートしていない可能性があります。代わりに [[#マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする]] で説明されている方法に従ってください。<br />
<br />
===== Limine =====<br />
<br />
[[Limine]] においては、[[Limine#設定|limine.cfg]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です:<br />
<br />
{{hc|limine.cfg|2=<br />
DEFAULT_ENTRY=1<br />
TIMEOUT=3<br />
<br />
:Arch<br />
COMMENT=Arch Linux<br />
<br />
PROTOCOL=linux<br />
KERNEL_PATH=boot:///vmlinuz-linux<br />
CMDLINE=root=UUID=c0748521-eca9-4f38-989c-43811b6e39a1 rw loglevel=3<br />
'''MODULE_PATH=boot:///''cpu_manufacturer-ucode''.img'''<br />
MODULE_PATH=boot:///initramfs-linux.img<br />
}}<br />
<br />
=== 遅延ロード ===<br />
<br />
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 以降で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}<br />
<br />
マイクロコードアップデートの遅延ロードは、システムが起動し終わった後に行われます。その時、{{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるファイルが使用されます。AMD CPU と Intel CPU のマイクロコードのアップデートファイルは、それぞれ {{Pkg|amd-ucode}} と {{Pkg|intel-ucode}} によって提供されています。<br />
<br />
遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462]<br />
<br />
==== マイクロコードのアップデートの遅延ロード ====<br />
<br />
実行中のシステムで手動でマイクロコードをアップデートするには (例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後に):<br />
<br />
# echo 1 > /sys/devices/system/cpu/microcode/reload<br />
<br />
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
== 起動時にマイクロコードのアップデートがされたか確認する ==<br />
<br />
マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください:<br />
<br />
# journalctl -k --grep='microcode:'<br />
<br />
ブート時に毎回以下のような出力がなされるはずです (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています):<br />
<br />
kernel: microcode: Current revision: 0x00000012<br />
kernel: microcode: Updated early from: 0x0000000e<br />
<br />
場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。<br />
<br />
AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。<br />
<br />
== マイクロコードのアップデートができる CPU ==<br />
<br />
特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます:<br />
<br />
* [[Gentoo:AMD microcode#Microcode firmware files]]。<br />
* [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。<br />
<br />
=== マイクロコードのアップデートが必要かどうか確認する ===<br />
<br />
Intel CPU の場合は、{{man|8|iucode_tool}} コマンドを使うことで、現在使用中の CPU 向けのマイクロコードが {{ic|/usr/lib/firmware/intel-ucode/}} に含まれているかどうかを確認することができます。<br />
<br />
# {{Pkg|intel-ucode}} と {{Pkg|iucode-tool}} を[[インストール]]してください。<br />
# {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}}<br />
# 該当する cpuid を検索: {{bc|$ iucode_tool -lS /usr/lib/firmware/intel-ucode/}}<br />
# アップデートが存在する場合は、''selected microcodes'' の下に表示されます。<br />
# メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。<br />
<br />
AMD CPU の場合、手動により確認することができます。<br />
<br />
# {{man|1|lscpu}} か {{ic|/proc/cpuinfo}} の出力を見る。<br />
# CPU のファミリ、モデル、ステッピングを確認する。これらの値を16進数に変更する。<br />
# {{ic|/usr/lib/firmware/amd-ucode/README}} に書かれてあるリストにそれらの値とマッチするものを見つける。<br />
# 見つかった場合は、現在使用中のマイクロコードのバージョンとリストにある {{ic|Patch}} の値を比較する。<br />
<br />
== 参照 ==<br />
<br />
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes – Experiences in the community]<br />
* [http://inertiawar.com/microcode/ Intel マイクロコードアップデートのノート – Ben Hawkes]<br />
* [https://docs.kernel.org/arch/x86/microcode.html カーネルマイクロコードローダ – カーネルドキュメント]<br />
* [https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ – AnandTech]<br />
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]<br />
<br />
{{TranslationStatus|Microcode|2024-03-18|803780}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%BC%E3%83%89&diff=36561
マイクロコード
2024-03-16T11:20:06Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:CPU]]<br />
[[Category:セキュリティ]]<br />
[[de:Microcode]]<br />
[[en:Microcode]]<br />
[[es:Microcode]]<br />
[[ru:Microcode]]<br />
[[zh-hans:Microcode]]<br />
プロセッサの製造者はプロセッサ[[Wikipedia:ja:マイクロプログラム方式|マイクロコード]]に安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。<br />
<br />
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。<br />
<br />
== マイクロコードをロードする ==<br />
<br />
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:<br />
<br />
# '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。<br />
# '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。<br />
# '''遅延ロード''' ([https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください:<br />
* {{Pkg|amd-ucode}} : AMD プロセッサ<br />
* {{Pkg|intel-ucode}} : Intel プロセッサ<br />
<br />
=== 早期ロード ===<br />
<br />
マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) によって読み込む必要があります。<br />
<br />
早期ローダは、マイクロコードのアップデートファイルが未圧縮 CPIO アーカイブ (initramfs イメージ) 内の {{ic|/kernel/x86/microcode/GenuineIntel.bin}} または {{ic|/kernel/x86/microcode/AuthenticAMD.bin}} として存在していることを期待します。<br />
<br />
早期 initramfs イメージ (マイクロコードのアップデートファイル) は、メインの initramfs イメージと合体して1つのファイルにし、(ブートローダーで {{ic|1=initrd=}} カーネルコマンドラインオプションを使うか、unified カーネルイメージ内にパックして) 単一の initramfs ファイルとしてカーネルに渡すこともできますし、個別のファイルとして使用することもできます (この場合、{{ic|1=initrd=}} カーネルコマンドラインオプションを複数回使用する必要があります)。いずれにせよ、マイクロコードを含んでいる未圧縮 CPIO アーカイブはメインの initramfs より前に配置'''しなければなりません'''。<br />
<br />
注意点として、ユーザーの初期ブート構成は多様なので、Arch のデフォルトの設定ではマイクロコードのアップデートは自動的にトリガーされません。<br />
<br />
==== カスタムビルドされたカーネル ====<br />
<br />
早期ローダーを[[カーネル/Arch build system|カスタムカーネル]]で動作させるには、"CPU microcode loading support" を、モジュールとしてコンパイルせずに、カーネルに組み込む必要があります。これにより "Early load microcode" プロンプトが有効化され、これを {{ic|Y}} に設定する必要があります。<br />
<br />
CONFIG_BLK_DEV_INITRD=Y<br />
CONFIG_MICROCODE=y<br />
CONFIG_MICROCODE_INTEL=Y<br />
CONFIG_MICROCODE_AMD=y<br />
<br />
==== Unified カーネルイメージ ====<br />
<br />
[[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。<br />
<br />
==== マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする ====<br />
<br />
未圧縮のマイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に追加する]ことが可能であり、単一の initramfs ファイルとして利用できるようになります。この方法は、追加のブートパラメータの設定が必要ないため、[[#別個のマイクロコード initramfs ファイルを使う]] の方法よりも推奨されます。<br />
<br />
[[mkinitcpio]] と [[dracut]] は、このような複数のファイルが混合された initramfs ファイルの生成をサポートしています。しかし、[[Booster]] は[https://github.com/anatol/booster/issues/40 サポートしていません]。<br />
<br />
===== mkinitcpio =====<br />
<br />
[[mkinitcpio]] でマイクロコードを含んでいる initramfs ファイルを生成するには、{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|microcode}} フックが含まれていることを確認してください。<br />
<br />
{{ic|autodetect}} フックが {{ic|microcode}} フックよりも前にある場合、現在使用している CPU のマイクロコードのみが追加されます。システム上に存在する全ての CPU マイクロコードファイルを追加するには、{{ic|microcode}} フックを {{ic|autodetect}} フックより前に移動するか、{{ic|autodetect}} フックを削除してください。<br />
<br />
Initramfs の生成時に ''mkinitcpio'' は以下のようなメッセージを表示します:<br />
<br />
-> Early uncompressed CPIO image generation successful<br />
<br />
{{man|1|lsinitcpio}} コマンドを使えば、マイクロコードのアップデートファイルが initramfs 内に存在していることを確認できます。例えば:<br />
<br />
{{hc|$ lsinitcpio /boot/initramfs-linux.img|<br />
early_cpio<br />
kernel/<br />
kernel/x86/<br />
kernel/x86/microcode/<br />
kernel/x86/microcode/AuthenticAMD.bin<br />
...<br />
}}<br />
<br />
===== dracut =====<br />
<br />
[[dracut]] に関しては {{man|5|dracut.conf|DESCRIPTION}} を見てください。<br />
<br />
==== 別個のマイクロコード initramfs ファイルを使う ====<br />
<br />
先の方法を用いない場合、マイクロコードの早期アップデートは {{ic|/boot/amd-ucode.img}} や {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルで最初の initrd''' として追加することで有効化する必要があります。マイクロコードの initrd は通常の initrd ファイルよりも前に来る必要があります。一般的なブートローダーにおける手順は以下を参照してください。<br />
<br />
以下の章では、{{ic|''cpu_manufacturer''}} という記述はあなたの CPU の製造業者名 (つまり、{{ic|amd}} か {{ic|intel}}) に置き換えてください。<br />
<br />
===== GRUB =====<br />
<br />
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように {{ic|/boot/''cpu_manufacturer''-ucode.img}} を追加できます(別のパーティションに {{ic|/boot}} がある場合は {{ic|/''cpu_manufacturer''-ucode.img}}):<br />
<br />
{{hc|/boot/grub/grub.cfg|<br />
...<br />
echo 'Loading initial ramdisk'<br />
initrd '''/boot/''cpu_manufacturer''-ucode.img''' /boot/initramfs-linux.img<br />
...<br />
}}<br />
<br />
それぞれのメニュエントリに対してこれを行ってください。<br />
<br />
===== systemd-boot =====<br />
<br />
以下のように、マイクロコードを読み込むオプションを初期 RAM ディスクより前に使用してください:<br />
<br />
{{hc|/boot/loader/entries/''entry''.conf|<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
'''initrd /''cpu_manufacturer''-ucode.img'''<br />
initrd /initramfs-linux.img<br />
...<br />
}}<br />
<br />
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。<br />
<br />
===== EFISTUB =====<br />
<br />
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:<br />
<br />
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img<br />
<br />
===== rEFInd =====<br />
<br />
{{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡せるようにするために [[rEFInd#設定]] で説明されている手順に従う必要があります。}}<br />
<br />
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、マイクロコードイメージをロードするための {{ic|1=initrd=}} オプションを最初の {{ic|initrd}} 引数として追加してください。{{ic|/boot}} 内のファイルが別のパーティションの直下にあるかどうかに応じて、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} か {{ic|1=initrd=''cpu_manufacturer''-ucode.img}} のどちらかを使ってください。<br />
<br />
マイクロコードは、ブートオプションのリストの中で最初に宣言された initramfs でなければなりません。例えば:<br />
<br />
"Boot using default options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap initrd=boot\''cpu_manufacturer''-ucode.img initrd=boot\initramfs-%v.img"<br />
<br />
====== 手動でブートオプションを記述する ======<br />
<br />
[[rEFInd#手動でブートエントリを記述する|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合は、{{ic|1=initrd=}} パラメータを追加して、ブートパーティション内の適切なパスに設定する必要があります。このパラメータは options 行の一部である必要があり、設定のメインの部分ではありません。例:<br />
<br />
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"<br />
<br />
===== Syslinux =====<br />
<br />
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}<br />
<br />
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます:<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
INITRD '''../''cpu_manufacturer''-ucode.img''',../initramfs-linux.img<br />
...<br />
<br />
===== LILO =====<br />
<br />
[[LILO]] は複数の初期 RAM ディスクイメージの読み込みをサポートしておらず、他の古いブートローダーも同じくサポートしていない可能性があります。代わりに [[#マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする]] で説明されている方法に従ってください。<br />
<br />
===== Limine =====<br />
<br />
[[Limine]] においては、[[Limine#設定|limine.cfg]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です:<br />
<br />
{{hc|limine.cfg|2=<br />
DEFAULT_ENTRY=1<br />
TIMEOUT=3<br />
<br />
:Arch<br />
COMMENT=Arch Linux<br />
<br />
PROTOCOL=linux<br />
KERNEL_PATH=boot:///vmlinuz-linux<br />
CMDLINE=root=UUID=c0748521-eca9-4f38-989c-43811b6e39a1 rw loglevel=3<br />
'''MODULE_PATH=boot:///''cpu_manufacturer-ucode''.img'''<br />
MODULE_PATH=boot:///initramfs-linux.img<br />
}}<br />
<br />
=== 遅延ロード ===<br />
<br />
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 以降で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}<br />
<br />
マイクロコードアップデートの遅延ロードは、システムが起動し終わった後に行われます。その時、{{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるファイルが使用されます。AMD CPU と Intel CPU のマイクロコードのアップデートファイルは、それぞれ {{Pkg|amd-ucode}} と {{Pkg|intel-ucode}} によって提供されています。<br />
<br />
遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462]<br />
<br />
==== マイクロコードのアップデートの遅延ロード ====<br />
<br />
実行中のシステムで手動でマイクロコードをアップデートするには (例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後に):<br />
<br />
# echo 1 > /sys/devices/system/cpu/microcode/reload<br />
<br />
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
== 起動時にマイクロコードのアップデートがされたか確認する ==<br />
<br />
マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください:<br />
<br />
# journalctl -k --grep=microcode<br />
<br />
Intel が載っているシステムでは、起動時に以下のような表示がされます (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています):<br />
<br />
kernel: microcode: Current revision: 0x00000012<br />
kernel: microcode: Updated early from: 0x0000000e<br />
<br />
場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。<br />
<br />
AMD 環境でマイクロコードを早期ロードしている場合、以下のように出力されます:<br />
<br />
kernel: microcode: CPU3: patch_level=0x0a20102b<br />
kernel: microcode: CPU10: patch_level=0x0a20102b<br />
...<br />
kernel: microcode: Microcode Update Driver: v2.2.<br />
<br />
AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。<br />
<br />
== マイクロコードのアップデートができる CPU ==<br />
<br />
特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます:<br />
<br />
* [[Gentoo:AMD microcode#Specific firmware only]]。<br />
* [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。<br />
<br />
=== マイクロコードのアップデートが必要かどうか確認する ===<br />
<br />
{{Pkg|iucode-tool}} を使って、使用している CPU のマイクロコードイメージが {{ic|intel-ucode.img}} に含まれているかどうか確認できます。<br />
<br />
# {{Pkg|intel-ucode}} を[[インストール]] (アップデートがあるかどうか確認するのに initrd の変更は必要ありません)<br />
# {{Pkg|iucode-tool}} を[[インストール]]<br />
# {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}}<br />
# マイクロコードイメージを展開して cpuid で検索:<br/>{{bc|# bsdtar -Oxf /boot/intel-ucode.img {{!}} iucode_tool -tb -lS -}}<br />
# アップデートが存在する場合は、''selected microcodes'' の下に表示されます。<br />
# メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes – Experiences in the community]<br />
* [http://inertiawar.com/microcode/ Intel マイクロコードアップデートのノート – Ben Hawkes]<br />
* [https://docs.kernel.org/arch/x86/microcode.html カーネルマイクロコードローダ – カーネルドキュメント]<br />
* [https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ – AnandTech]<br />
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]<br />
<br />
{{TranslationStatus|Microcode|2024-03-16|803364}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AE%E5%90%91%E4%B8%8A&diff=36560
パフォーマンスの向上
2024-03-16T10:40:57Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:ハードウェア]]<br />
[[Category:システム管理]]<br />
[[en:Improving performance]]<br />
[[es:Improving performance]]<br />
[[fr:Improving performance]]<br />
[[pl:Improving performance]]<br />
[[pt:Improving performance]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|パフォーマンスの向上/ブートプロセス}}<br />
{{Related|Pacman ヒント#パフォーマンス}}<br />
{{Related|OpenSSH#SSH の高速化}}<br />
{{Related|OpenOffice#OpenOffice の高速化}}<br />
{{Related|ノートパソコン}}<br />
{{Related|Preload}}<br />
{{Related articles end}}<br />
<br />
この記事では、知覚または計測できるシステムパフォーマンスの向上を最終目的として、パフォーマンスに関連する基本的なシステム診断、及び、リソース消費量の削減やシステム最適化のための手順に関する情報を提供しています。ゲーミングおよび低レイテンシに特有のその他のアドバイスは [[ゲーム#パフォーマンスを向上させる]] も参照してください。<br />
<br />
== 基本 ==<br />
<br />
=== システムを知る ===<br />
<br />
システムをチューンするには、全体のスピードを下げているボトルネックやサブシステムに狙いを定めるがベストな方法です。システムの仕様を知ることは、それらを特定することに役立ちます。<br />
<br />
* (LibreOffice や Firefox などの) 巨大なアプリケーションを同時に動作させたときにコンピュータが遅くなる場合、RAM の容量が十分であるか確認してください。以下のコマンドを使って、"available" 列の値を確認してください: {{bc|$ free -h}}<br />
* 起動時間が長い場合、または、アプリケーションを初めて起動するとき (だけ) にロードに長い時間が掛かる場合、おそらくハードドライブが遅過ぎます。ハードドライブの速度を計測するには {{ic|hdparm}} コマンドを使うことができます: {{bc|# hdparm -t /dev/sd''X''}} {{Note|{{Pkg|hdparm}} で出力されるのはハードドライブの純粋な読み込み速度なので、有効なベンチマークとは言えませんが、平均的なコンピュータでは (アイドル状態のときに) 40MB/s より高い数値が出るのが妥当です。}}<br />
* 十分な RAM が利用できる時でも CPU 負荷が一貫して高い場合、不要な[[デーモン]]やプロセスを無効化するなどして CPU 使用量を減らすことを試みてください。{{Pkg|htop}} や {{ic|pstree}} などの[[アプリケーション一覧/ユーティリティ#システム監視|システム監視ツール]]で CPU 負担をモニタすることができます: {{bc|$ htop}}<br />
* ダイレクトレンダリングを使うアプリケーション (つまり、ビデオプレイヤ、ゲーム、[[ウィンドウマネージャ]]などの GPU を使うアプリケーション) が遅い場合、GPU パフォーマンスを向上させることで解決するはずです。まず初めにダイレクトレンダリングが有効になっているかどうか確認しましょう。{{ic|glxinfo}} コマンドを使うことで確認できます ({{Pkg|mesa-utils}} パッケージに含まれています)。次のコマンドを実行すると {{ic|direct rendering: Yes}} と表示される必要があります: {{bc|$ glxinfo {{!}} grep "direct rendering"}}<br />
* [[デスクトップ環境]]を動かしている場合、(不要な) 視覚デスクトップ効果を無効化することで GPU 使用率を削減できる場合があります。現在使用しているものがハードウェアや個人の要件に合わない場合、より軽量な環境を使用するか、[[デスクトップ環境#カスタム環境|カスタムの環境]]を作成しましょう。<br />
* 最適化された[[カーネル]]を使用することでパフォーマンスを向上できます。一般に {{Pkg|linux-zen}} が良い選択肢です。しかし、この記事の特定の部分で説明されているように、デフォルトのカーネルを調節することで良いパフォーマンスを得られます。<br />
<br />
=== ベンチマーク ===<br />
<br />
最適化の効果を判断できないことがたびたびあります。そういった場合は[[ベンチマーク]]ツールで計測することができます。<br />
<br />
== ストレージデバイス ==<br />
<br />
=== 複数のハードウェアパス ===<br />
<br />
内部ハードウェアパスは、ストレージデバイスがマザーボードを介してどのように接続されているかを表します。NIC、PCIe、Firewire、Raid カード、USB など、マザーボードを介する接続方法は複数あります。ストレージデバイスを複数の接続点に分けることで、ボトルネックを回避できます。なぜなら、マザーボードに入る「エントリーパス」は「パイプ」のようなもので、そのパイプを一度に通ることのできる量には制限があるからです。通常、マザーボードには複数の「パイプ」が存在するため、これは回避できます。<br />
<br />
これの具体例としては、マシン前面に2つの USB ポート、背面に4つの USB ポートがあり、4つのディスクを接続したい場合です。通常、3つのディスクを背面に接続し、残り1つを前面に接続するよりも、2つを前面に接続し、別の2つを背面に接続する方が高速です。これは、ほとんどの場合、前面と背面のポートは内部的に別の Root USB Hub に接続されていて、片方ではなく両方を使用することで同時に送信できるデータが増えるからです。<br />
<br />
次のコマンドは、マシンの様々なパスを特性するのに役立ちます。<br />
<br />
{{hc|USB デバイスツリー|$ lsusb -t}}<br />
<br />
{{hc|PCI デバイスツリー|$ lspci -tv}}<br />
<br />
=== パーティショニング ===<br />
<br />
パーティションが[[パーティショニング#パーティションアライメント|適切にアライメントされている]]ことを確認してください。<br />
<br />
==== 複数のドライブ ====<br />
<br />
複数のドライブを持っているのであれば、ソフトウェア [[RAID]] を組んでパフォーマンスを劇的に向上させることができます。<br />
<br />
[[スワップ]]を別のディスク上に作成することでもパフォーマンスを多少向上させることができます。特に、スワップが頻繁に発生する場合です。<br />
<br />
==== HDD でのレイアウト ====<br />
<br />
従来の回転式 HDD を使用している場合、パーティションのレイアウトがシステムのパフォーマンスに影響を与える可能性があります。ドライブの最初のセクター(ディスクの外周の近く)は最後のセクターよりも高速です。また、パーティションを小さくすれば必要なドライブヘッドの移動が少なくなり、ディスク操作をスピードアップできます。従って、システムのために作るパーティションは小さく (15~20GiB、必要に応じて調節) して、できるだけドライブの最初に配置することが推奨されます。他のデータ(画像・動画など)は別のパーティションに置くべきです。通常、システム ({{ic|/}}) から home ディレクトリ ({{ic|/home}}) を分割することでこれを達成できます。<br />
<br />
{{Note|このページのすべてのアドバイスにおいて言えることですが、得られる利益を計測してください: ハードドライブを[https://blog.stuffedcow.net/2019/09/hard-disk-geometry-microbenchmarking/#shortstroke ショートストローク]したり、合計容量の数%しか使わないようにしたりしない限り、一般的な使用においては読み書き操作が依然としてドライブ全体に及ぶため、パーティションを分割してもほんの数%しかアクセス時間は改善されません。それと比べて、SSD にアップグレードするとパフォーマンスが1桁以上向上します。}}<br />
<br />
=== ファイルシステムの選択とチューニング ===<br />
<br />
ファイルシステムごとに強みが異なるのでシステムごとにファイルシステムを選ぶことはとても重要です。[[ファイルシステム]]の記事に人気のあるファイルシステムの簡単な説明がされています。[[:カテゴリ:ファイルシステム]]から関連記事も見ることができます。<br />
<br />
==== マウントオプション ====<br />
<br />
様々な [[fstab#atime オプション|*atime]] オプションが、{{ic|strictatime}} のパフォーマンスのペナルティを軽減することができます。<br />
<br />
他のマウントオプションはファイルシステム固有なので、ファイルシステムの関連記事を参照してください:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#パフォーマンスの向上]]<br />
* [[JFS#最適化]]<br />
* [[XFS#パフォーマンス]]<br />
* [[Btrfs#デフラグメンテーション]]、[[Btrfs#圧縮]]、{{man|5|btrfs}}<br />
* [[ZFS#チューニング]]<br />
* [[NTFS#パフォーマンスの向上]]<br />
<br />
===カーネルパラメータの調整===<br />
<br />
ブロックデバイスのパフォーマンスに影響するキーが複数存在します、詳しくは [[sysctl#仮想メモリ]] を見て下さい。<br />
<br />
=== I/O スケジューラの設定 ===<br />
<br />
==== 背景情報 ====<br />
<br />
入出力 ''(I/O)'' スケジューラはストレージデバイスにブロック I/O の操作を送信するときの順番を決めるカーネルコンポーネントです。I/O スケジューラの目的は読み込みリクエストを最適な方法で扱うことであるため、以下の2つのドライブの特徴を押さえておくことが重要です:<br />
<br />
* HDD は回転ディスクでありヘッドが物理的に必要な場所に移動します。そのため、ランダムアクセスは 3〜12ms と非常に遅くなります (ハイエンドサーバーのドライブなのかノートパソコンのドライブなのか、あるいはディスクコントローラの書き込みバッファを迂回するかなどで速度は変わります)。逆に連続アクセスなら高いスループットを得ることが可能です。連続アクセスならヘッドはほとんど動かなくてよいためです。典型的な HDD は毎秒200回ほどの I/O リクエストを処理することができます ''(IOPS)''。<br />
<br />
* SSD には物理的に移動する部品がありません。ランダムアクセスはシーケンシャルアクセスと同じ速度が出ます (0.1ms 未満)。SSD は複数のリクエストを一度にこなすこともできます。典型的な SSD のスループットは 10,000 IOPS を超えるため、大抵の場合は必要な仕事量を上回ります。<br />
<br />
プロセスを大量に実行してストレージの様々な場所の I/O リクエストを発生させているとき (つまりランダムアクセスをしている状態)、数千の IOPS が生成されますが、普通の HDD では 200 IOPS までしか対応できません。ストレージにアクセスできるまで待機するリクエストの待ち行列が作られることになります。I/O スケジューラはこの待ち行列を最適化します。<br />
<br />
==== スケジューリングアルゴリズム ====<br />
<br />
スループットを改善する方法の一つとして、待機リクエストの順番を論理アドレスで並び替えて出来るだけ一番近いリクエストを通すことで、アクセスをリニア化する方法があります。これが [[w:ja:エレベータアルゴリズム|elevator]] スケジューラと呼ばれる Linux の最初の I/O スケジューラでした。<br />
<br />
エレベータアルゴリズムの問題点はシーケンシャルアクセスをするプロセスが上手く動かなくなることです。そのようなプロセスは、データブロックを読み取って数マイクロ秒で処理してから次のブロックを読み出します。エレベータスケジューラはプロセスが近くのブロックを呼びだそうとしていることを知らないため、他の場所のリクエストに移ってしまいます。[[w:Anticipatory_scheduling|anticipatory]] IO スケジューラはこの問題を解決します。このスケジューラは、他のリクエストを処理する前に、近くで別の読み取り操作が発生することを予測して、数ミリ秒待機します。<br />
<br />
上述のスケジューラはどちらも全体のスループットを改善することを目指していましたが、それによって不幸にも長い間待たされてしまうリクエストも発生していました。例えば、プロセスの多くがストレージ領域の最初の部分をリクエストしていて、不幸なプロセスはストレージの末端付近をリクエストしているような状況を考えて下さい。そのため、開発者は公平なアルゴリズムを作成することを決めて [[w:Deadline_scheduler|deadline]] スケジューラが追加されました。deadline スケジューラはアドレスによってキューの順番を決めますが (エレベーターと同じ)、一定期間、リクエストがキューの中で待機した場合、リクエストを (経過時間によって順番が付けられる) "expired" キューに移動します。スケジューラは先に expired キューをチェックして、リクエストを処理してからエレベーターキューに移動します。このアルゴリズムは公平性のために全体のスループットを犠牲にしているわけです。<br />
<br />
[[w:CFQ|Completely Fair Queuing (CFQ)]] は別のアプローチで問題に取り組みました。CFQ はプロセスの優先度に基づくキューを使ってタイムスライスと許容するリクエストの数を割り当てます。さらに [[cgroups]] のサポートを追加することで特定のプロセスグループに一定の IO を予約できるようにしました。これは共有・クラウドサーバーで特に役立ちます。ユーザーはリソースが必要なときに料金を払って IOPS を得られるのです。また、同期 I/O で近くの操作を待機するという ''anticipatory'' スケジューラの機能を改良して取り入れています。''anticipatory'' と ''elevator'' スケジューラは Linux カーネルから外され、下記のより高度な代替スケジューラに置き換えられました。<br />
<br />
[https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing (BFQ)] は CFQ のコードをベースにいくつか改善を加えています。各プロセスに固定長のタイムスライスを与えるかわりに、プロセスのセクタ数から計算した "budget" を割り当ててヒューリスティックを用います。BFQ は想定的に複雑なスケジューラであるため、オーバーヘッドが大きく、回転ドライブや低速 SSD に適しています。特に遅い CPU と組み合わせたときに高速なデバイスの足を引っ張ってしまうような場合に有用です。BFQ は個人用のシステムでインタラクティブな作業を行うときに、ストレージデバイスがまるで待機状態のときのように素早く反応することを目標としています。デフォルト設定ではスループットの最大化よりもレイテンシの最小化が優先されているのが特徴です。これにより、ハードドライブにおいて[https://www.phoronix.com/review/linux-50hdd-io/2 アプリケーションの起動を劇的に加速化]させられる場合があります。<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] はネットワークルーティングで用いられている積極的なキュー管理テクニックから生まれた新しいスケジューラです。リクエストを制限するメカニズムとして「トークン」を基に実装されています。 リクエストの割当を受けるにはキューイングトークンを必要とすることで、リクエストのスタベーションを防ぎます。ディスパッチトークンによってデバイスの特定の優先度の操作に制限されます。さらに、ターゲットの読み込みレイテンシを定義して、レイテンシ目標を達成するためにスケジューラ自身がチューニングを行います。アルゴリズムの実装は比較的シンプルなので高速なデバイスでも効率的に機能します。<br />
<br />
==== カーネルの I/O スケジューラ ====<br />
<br />
初期のアルゴリズムには既にメインラインから外されているものもあります。公式 Linux カーネルがサポートしている I/O スケジューラは以下の2つのカテゴリに分けることができます:<br />
<br />
*'''マルチキュースケジューラ'''はカーネルでデフォルトで利用できます。[https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism (blk-mq)] は I/O クエリを複数のキューに割り当てて、複数のスレッドおよび CPU コアにタスクを分散させます。このフレームワークでは以下のスケジューラが使えます:<br />
**''None''、キューイングアルゴリズムは適用されません。<br />
**''mq-deadline'' は deadline スケジューラ (下記を参照) をマルチスレッドに対応させたスケジューラです。<br />
**''Kyber''<br />
**''BFQ''<br />
<br />
*'''シングルキュースケジューラ'''はレガシーなスケジューラです:<br />
**[[w:Noop scheduler|NOOP]] は最も単純なスケジューラです。全ての I/O リクエストをシンプルな FIFO キューに入れてリクエストをまとめます。NOOP アルゴリズムでは、セクタ番号によってリクエストの順番を変えることがありません。したがって、デバイスレベルで順位付けを行っている場合や SSD など順位付けが意味をなさない場合は NOOP を使用します。<br />
**[[w:Deadline scheduler|Deadline]]<br />
**[[w:CFQ|CFQ]]<br />
<br />
:{{Note|1=シングルキュースケジューラは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f382fb0bcef4c37dc049e9f6963e3baf204d815c Linux 5.0 以降カーネルから削除されました]}}<br />
<br />
==== I/O スケジューラの変更 ====<br />
<br />
{{Note|スケジューラーの最適な選択は、デバイスとワークロードの正確な性質の両方によって異なります。 また、MB/秒単位のスループットだけがパフォーマンスの指標ではありません。デッドラインや公平性は全体的なスループットを低下させますが、システムの応答性を向上させる可能性があります。 [[ベンチマーク]] は、各 I/O スケジューラのパフォーマンスを示すのに役立つ場合があります。}}<br />
<br />
特定のデバイスで利用可能なスケジューラとアクティブなスケジューラを表示するには (アクティブなスケジューラは角括弧の中):<br />
<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
}}<br />
<br />
全デバイスで利用可能なスケジューラを表示するには:<br />
<br />
{{hc|$ grep "" /sys/block/'''*'''/queue/scheduler|<br />
/sys/block/pktcdvd0/queue/scheduler:none<br />
/sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none<br />
/sys/block/sr0/queue/scheduler:[mq-deadline] kyber bfq none<br />
}}<br />
<br />
デバイス ''sda'' のアクティブな I/O スケジューラを ''bfq'' に変更するには:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
<br />
I/O スケジューラの変更プロセスは、ディスクが回転式か否かに応じて自動化することができ、起動毎に永続化させることができます。例えば、以下の [[udev]] ルールは、回転ドライブに対しては ''bfq'' を、[[SSD]]/eMMC ドライブに対しては ''bfq'' を、[[NVMe]] に対しては ''none'' を設定します:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|<nowiki><br />
# HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"<br />
<br />
# SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"<br />
<br />
# NVMe SSD<br />
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"<br />
</nowiki>}}<br />
<br />
再起動するか、強制的に[[udev#新しいルールをロードする|新しいルールをロード]]してください。<br />
<br />
==== IO スケジューラの調整 ====<br />
<br />
カーネルの I/O スケジューラには遅延・期限時間や FIFO パラメータなどそれぞれ設定項目が存在します。特定のデバイスとワークロードの組み合わせにあわせてアルゴリズムを調整することが可能です。スループットを高めたり遅延を少なくしたりするときに用います。<br />
設定項目と説明は [https://docs.kernel.org/block/index.html カーネルドキュメント] で確認できます。<br />
<br />
特定のデバイスで設定可能なパラメータを確認するには (以下の例では ''sdb'' は ''deadline'' を使用しています):<br />
<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
レイテンシを犠牲に ''deadline'' のスループットを高めるには以下のコマンドで {{ic|fifo_batch}} を増やします:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== 電源管理設定とライトキャッシュ ===<br />
<br />
従来の回転ディスク (HDD) を使用する場合は、省電力機能を完全に無効にするか下げるかし、書き込みキャッシュが有効になっているかどうかを確認すると良いかもしれません。<br />
<br />
[[Hdparm#電源管理の設定]] と [[Hdparm#ライトキャッシュ]] を参照してください。<br />
<br />
後で、起動時にこれらを適用する [[Hdparm#udev ルールによる永続的な設定|udev ルール]] を作成することができます。<br />
<br />
{{Tip|[[GNOME]] では、"ディスク" アプリケーションからこれらのパラメータのいくつかを設定でき、udev ルールは必要ありません。}}<br />
<br />
{{Note|一部の機能はあなたのハードドライブではサポートされていないかもしれません。その場合、Hdparm が通知します。なので、この特定の機能の設定を無視してください。}}<br />
<br />
=== ディスクの読み書きを減らす ===<br />
<br />
遅いストレージデバイスへの不必要なアクセスを避けることはパフォーマンスを向上にとって良いことであり、デバイスの寿命を伸ばすことにも繋がります。ただし最近のハードウェアでは寿命への影響はわずかです。<br />
<br />
{{Note|書き込み増幅率が平凡な 10x で、書き込み/消去サイクルが標準的な 10000 である、32GB の SSD の場合、'''毎日 10GB のデータ書き込みを行うと'''、'''8年間で寿命が尽きる'''とされます。この数字はもっと容量が大きい SSD を使ったり書き込み増幅が少ない最新のコントローラを使うことで改善されます。また、ディスクの書き込みを制限するのにどの方法が必要なのか考えるときは [https://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead/ この耐久実験] も参照してください。}}<br />
<br />
==== ディスクの書き込みを表示する ====<br />
<br />
{{Pkg|iotop}} パッケージはプログラムをディスクの書き込み数でソートして、どれくらいの頻度でどれだけディスクに書き込んでいるか表示します。詳しくは {{man|8|iotop}} を見てください。<br />
<br />
==== ファイルを tmpfs に再配置する ====<br />
<br />
ブラウザプロファイルなどのファイルを [[tmpfs]] ファイルシステムに再配置してメモリ内に保存することで、アプリケーションのレスポンスを向上させることができます:<br />
<br />
* ブラウザプロファイルを同期させる方法については [[Profile-sync-daemon]] を参照してください。特定のブラウザには注意が必要な場合があります。例えば [[Firefox Ramdisk]] を参照してください。<br />
* 任意の指定されたフォルダを同期させる方法については [[Anything-sync-daemon]] を参照してください。<br />
* tmpfs 内でパッケージをビルドすることでコンパイル時間を減らす方法については [[Makepkg#ビルド時間を短縮する]] を参照してください。<br />
<br />
==== ファイルシステム ====<br />
<br />
対応する[[ファイルシステム]]ページを参照して、パフォーマンス改善に関する指示があるか見てください。例: [[Ext4#パフォーマンスの向上]]、[[XFS#パフォーマンス]]。<br />
<br />
==== スワップ領域 ====<br />
<br />
[[スワップ#パフォーマンス]] を見てください。<br />
<br />
==== ライトバックの間隔とバッファサイズ ====<br />
<br />
詳細は [[Sysctl#仮想メモリ]] を見てください。<br />
<br />
==== コアダンプを無効化する ====<br />
<br />
[[コアダンプ#自動的なコアダンプの無効化]] を見てください。<br />
<br />
=== ionice によるストレージ I/O スケジューリング ===<br />
<br />
バックアップなど多くのタスクにおいては、そのタスクを実行するために、ストレージ I/O の遅延が短かったり、ストレージ I/O の帯域が大きかったりする必要はありません。そのようなタスクはバックグラウンドタスクに分類することができます。一方、デスクトップにおいて高速な I/O は UI の応答性を高める上で必須です。ゆえに、他のタスクがストレージ I/O を必要としている間は、バックグラウンドタスクによって利用できるストレージ帯域幅を減らすことが有益です。これは、プロセスごとに異なる優先度を設定できる Linux I/O スケジューラ CFQ を使用することで実現できます。<br />
<br />
以下のようにバックグラウンドプロセスを実行することで、プロセスの I/O 優先度 "Idle" レベルまで落とすことができます:<br />
<br />
# ionice -c 3 command<br />
<br />
詳細は [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html a short introduction to ionice] や {{man|1|ionice}} を参照してください。<br />
<br />
=== トリム ===<br />
<br />
最適なパフォーマンスを得るには、SSD を定期的にトリムしてランダム読み込みの速度を最適化するべきです。詳細は [[ソリッドステートドライブ#TRIM]] を参照してください。<br />
<br />
== CPU ==<br />
<br />
=== オーバークロック ===<br />
<br />
[[Wikipedia:ja:オーバークロック|オーバークロック]]は、CPU クロック周波数の上限を上げることにより、CPU の計算パフォーマンスを向上させます。オーバークロックできるかどうかは、CPU モデルとマザーボードモデルの組み合わせに依存します。オーバークロックは BIOS を介して行うのが最も一般的です。オーバークロックには欠点とリスクもあります。ここでは推奨も非推奨もしないでおきましょう。<br />
<br />
Intel 製のチップの多くは acpi_cpufreq などや他のほとんどのユーティリティに正しいクロック周波数を伝えません。この結果、[[dmesg]] は極端なメッセージを表示します (これは、{{ic|acpi_cpufreq}} カーネルモジュールをアンロードしてブラックリスト化することで回避可能です)。クロック速度を読むには、{{Pkg|i7z}} パッケージの ''i7z'' を使用してください。オーバークロックされた CPU が正しく動作していることを確認する方法として、[[ストレステスト]]が推奨されます。<br />
<br />
=== 周波数スケーリング ===<br />
<br />
[[CPU 周波数スケーリング]]を見てください。<br />
<br />
=== CPU スケジューラ ===<br />
<br />
メインライン Linux カーネルのデフォルトの CPU スケジューラは [https://lwn.net/Articles/925371/ EEVDF] です。<br />
<br />
* {{App|[[Wikipedia:Brain_Fuck_Scheduler#MuQSS|MuQSS]]|Multiple Queue Skiplist Scheduler。[[Wikipedia:Con_Kolivas|Con Kolivas]] によって開発されている {{ic|-ck}} パッチセットにより利用可能。|[[非公式ユーザーリポジトリ/Repo-ck]]|{{AUR|linux-ck}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/PDS PDS]|デスクトップのレスポンスに焦点を当てている、優先度 (Priority) とデッドライン (Deadline) をベースとした Skiplist 複数キュースケジューラ。|https://cchalpha.blogspot.com/|{{AUR|linux-pds}}}}<br />
* {{App|[https://cchalpha.blogspot.com/search/label/BMQ BMQ]|BMQ "BitMap Queue" スケジューラは、既存の PDS 開発経験を元に作成され、Google の Zircon (Fuchsia OS イニシアチブ内のカーネル) に使用されているスケジューラからインスパイアされました。CachyOS からのパッチセットにより利用可能。|https://cchalpha.blogspot.com/|{{AUR|linux-cachyos-bmq}}}}<br />
* {{App|[https://cchalpha.blogspot.com/2020/05/project-c-announcement.html Project C]|BMQ を Project C にリファクタリングするためのクロスプロジェクト。Project C コードベースに基づいて PSD を再作成します。よって、これは2つのプロジェクトのマージであり、その後 PDS が Project C として更新されます。より最近の開発として推奨されます。|https://cchalpha.blogspot.com/|{{AUR|linux-prjc}}}}<br />
* {{App|[https://github.com/hamadmarri/TT-CPU-Scheduler TT]|Task Type (TT) スケジューラの目標は、動作に基づいてタスクの種類を検出し、その種類に基づいてスケジューリングを制御することです。|https://github.com/hamadmarri/TT-CPU-Scheduler|{{AUR|linux-tt}}}}<br />
* {{App|[https://github.com/firelzrd/bore-scheduler BORE]|BORE スケジューラは、対話型タスクにおいてある程度の公平性を犠牲にして低レイテンシを実現することに焦点を当てています。CFS の上に構築されており、vruntime コード更新だけに調整されています。なので、他の非公式 CPU スケジューラと比較して、全体的な変更は非常に小さいです。|https://github.com/firelzrd/bore-scheduler|{{AUR|linux-cachyos-bore}}}}<br />
<br />
=== リアルタイムカーネル ===<br />
<br />
(TV チューナーカードをフル HD 解像度 (1080p) で実行するなど) 一部の使用用途では、[[リアルタイムカーネル]]を使うと利益を得られる場合があります。<br />
<br />
=== プロセスの優先順位を設定 ===<br />
<br />
{{man|1|nice}} と {{man|1|renice}} も参照してください。<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] は動的に実行可能ファイルの nice レベルを調整するためのデーモンで、{{AUR|ananicy-git}} や {{AUR|ananicy-cpp}} パッケージで利用可能です。nice レベルとは、CPU 資源を配分するときの実行可能ファイルの優先度を表すものです。<br />
<br />
==== cgroups ====<br />
<br />
[[cgroups]] を見てください。<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] は特定のプロセスの CPU 使用率を制限するプログラムです。{{AUR|cpulimit}} をインストールすれば、プロセスの PID で CPU 使用率を 0 から 100 までの値にコンピュータに搭載されている CPU コア数をかけた数字の範囲で制限することができます。例えば、CPU コアが8個であれば利用可能な値は 0 から 800 です。使用例:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
{{Pkg|irqbalance}} はマルチプロセッサシステムでパフォーマンスを向上させるためにプロセッサ間でハードウェア割り込みを分散させます。{{ic|irqbalance.service}} で[[systemd#ユニットを使う|操作]]することが可能です。<br />
<br />
=== CPU の脆弱性の緩和策をオフにする ===<br />
<br />
{{Warning|1=以下の設定を使うときは問題の脆弱性について確認してください。詳しくは [https://phoronix.com/scan.php?page=news_item&px=Linux-Improve-CPU-Spec-Switches こちら] や [https://linuxreviews.org/HOWTO_make_Linux_run_blazing_fast_(again)_on_Intel_CPUs こちら] のページを参照。}}<br />
<br />
CPU の脆弱性の緩和策をオフにすることで、パフォーマンスが向上する場合があります。以下の[[カーネルパラメータ]]ですべての緩和策が無効になります:<br />
<br />
mitigations=off<br />
<br />
このパラメータによって切り替えられるすべてのスイッチについての説明は、[https://docs.kernel.org/admin-guide/kernel-parameters.html kernel.org] で見られます。{{AUR|spectre-meltdown-checker}} や {{man|1|lscpu}} ({{Pkg|util-linux}} に同梱) を使うことで、脆弱性チェックを行うことができます。<br />
<br />
{{Note|1=第10世代およびそれ以降の Intel CPU、または AMD Ryzen シリーズ 1000 およびそれ以降の CPU を使用している場合、緩和策を無効化することにより得られるパフォーマンスの向上は、最大でも 5% にとどまります。一方、それ以前の世代の CPU では、最大 25% まで向上します。[https://www.phoronix.com/scan.php?page=article&item=3-years-specmelt 2021 初頭における総評]、[https://www.phoronix.com/scan.php?page=article&item=spectre-rocket-lake Rocket Lake におけるテスト]、[https://www.phoronix.com/scan.php?page=article&item=alder-lake-mitigations Alder Lake におけるテスト] を参照。}}<br />
<br />
== グラフィック ==<br />
<br />
=== Xorg の設定 ===<br />
<br />
グラフィックパフォーマンスは {{man|5|xorg.conf}} の設定に依存している場合があります。[[NVIDIA]]、[[AMDGPU]]、[[Intel]] の記事を参照してください。不適切な設定は Xorg が動作しなくなる原因になるため、注意しましょう。<br />
<br />
=== Mesa の設定 ===<br />
<br />
Mesa ドライバのパフォーマンスは [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc] で設定できます。GUI の設定ツールもあります:<br />
<br />
* {{App|adriconf (Advanced DRI Configurator)|オプションを設定して標準の drirc ファイルに書き込むことで MESA ドライバを設定する GUI ツール。|https://gitlab.freedesktop.org/mesa/adriconf/|{{Pkg|adriconf}}}}<br />
* {{App|DRIconf|Direct Rendering Infrastructure の設定アプレット。OpenGL ドライバのパフォーマンスや視覚クオリティ設定をドライバ毎、スクリーン毎、プリケーション毎レベルでカスタマイズできます。|https://dri.freedesktop.org/wiki/DriConf/|{{AUR|driconf}}}}<br />
<br />
=== ハードウェアビデオアクセラレーション ===<br />
<br />
[[ハードウェアビデオアクセラレーション]]により、ビデオカードに動画のデコード/エンコードをさせることができます。<br />
<br />
=== オーバークロック ===<br />
<br />
CPU と同様に、(GPU の) オーバークロックは直接的にパフォーマンスを向上できますが、一般には推奨されません。いくつかのパッケージがあります: {{AUR|rovclock}} (ATI カード)、{{Pkg|rocm-smi-lib}} (最近の AMD カード)、{{AUR|nvclock}} (古い NVIDIA カード - Geforce 9 まで)、{{Pkg|nvidia-utils}} (最近の NVIDIA カード)。<br />
<br />
[[AMDGPU#オーバークロック]] や [[NVIDIA/ヒントとテクニック#オーバークロックを有効化する]] を参照してください。<br />
<br />
=== PCI resizable BAR を有効化する ===<br />
<br />
{{Note|<br />
* 一部のシステムでは、PCI resizable BAR を有効化するとパフォーマンスが大幅に劣化する可能性があります。システムのベンチマークを行って、PCI resizable BAR がパフォーマンスを向上させていることを確認してください。<br />
* 効果を発揮させるには、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] を無効化しなければなりません。<br />
}}<br />
<br />
PCI の仕様では、PCI デバイスのメモリを PCI コントローラに公開するために、より大きい[[wikipedia:PCI_configuration_space#Standardized_registers|基底アドレスレジスタ (BAR)]] を使用できます。そうすることで、ビデオカードのパフォーマンスを向上できる可能性があります。ビデオメモリ全体にアクセスすることでパフォーマンスを向上できますし、グラフィックドライバの最適化も可能になります。Resizable BAR、above 4G decoding、そしてドライバ最適化の組み合わせを、AMD は [https://www.amd.com/ja/technologies/smart-access-memory AMD Smart Access Memory] と呼んでおり、初期は AMD Series 500 チップセットマザーボードで利用できましたが、後に UEFI アップデートを通して AMD Series 400 と Intel Series 300 以降に拡張されました。この設定はすべてのマザーボードで利用できるわけではなく、特定のボードではブート問題を引き起こすことが知られています。<br />
<br />
BAR のサイズが 256M の場合、この機能は有効化されていないか、サポートされていません:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=256M}}<br />
<br />
有効化するには、マザーボード設定で "Above 4G Decode" か ">4GB MMIO" という名前の設定を有効化してください。BAR が大きくなっていることを確認するには:<br />
<br />
{{hc|1=# dmesg {{!}} grep BAR=|2=<br />
[drm] Detected VRAM RAM=8176M, BAR=8192M}}<br />
<br />
== RAM、スワップ、OOM 処理 ==<br />
<br />
=== クロック周波数とタイミング ===<br />
<br />
RAM は BIOS で設定することで、クロック周波数とタイミングを別々にすることができます。メモリのパフォーマンスは両方の値によって変わります。BIOS に用意されている最高速のプリセットを選択することでデフォルト設定よりも性能を上げることができます。マザーボードやメモリのメーカーがサポートしていない周波数まで値を高めると、CPU のオーバークロックと同じようなリスクがあるので注意してください。[[#オーバークロック]]を参照。<br />
<br />
=== RAM オーバーレイ上に root を置く ===<br />
<br />
{{Out of date|liveroot スクリプトはメンテナンスされていないようです。しかし、このアプローチは依然として機能するはずです。}}<br />
<br />
書き込みが遅いメディア (USB や 回転 HDD) を使う場合、(ディスク上の) 読み取り専用の root の上で RAM オーバーレイを作って root を動作させることができます。root に書き込みできる領域が制限されるかわりにパフォーマンスが劇的に改善します。{{AUR|liveroot}} を見て下さい。<br />
<br />
=== Zram または zswap ===<br />
<br />
[[zswap]] や [[zram]] を使うことで、同様の利点を (同様のコストで) 得られます。これら2つは一般に意図が似ていますが、操作が異なります。zswap は、圧縮 RAM キャッシュとして機能し、高コストなユーザ空間の設定を要求しません (そして、許可もしません)。[[zram]] は、RAM 内に圧縮ブロックデバイスを作成するために使用できるカーネルモジュールです。[[zswap]] はスワップデバイスと組み合わさって機能するのに対し、[[zram]] は補助スワップデバイスを必要としません。<br />
<br />
===グラフィックカードの RAM を使う===<br />
<br />
稀なケースとして、RAM 容量が非常に小さいが、ビデオ RAM に余りがある場合、後者をスワップとして使用できます。[[ビデオメモリにスワップ]] を参照してください。<br />
<br />
=== メモリ不足の状況におけるシステムのレスポンスを改善する ===<br />
<br />
従来の GNU/Linux システム (特にグラフィカルワークステーション) では、割り当てられたメモリがオーバーコミットすると、カーネル内の OOM killer がトリガーされるか、十分な量のメモリが開放される (システムが応答しない場合、メモリを大量消費するアプリケーションを閉じることは難しいため、これはすぐには起こり得ないでしょう) まで、システム全体のレスポンスがほぼ使用不能な状態まで低下します。挙動は特定の環境や条件に依存しており、通常のレスポンス状態に戻るまでには数秒から30分以上かかる場合があります。会議でのプレゼンテーションなどのような重要な状況においては、待つのが苦痛になるでしょう。<br />
<br />
[https://lore.kernel.org/lkml/d9802b6a-949b-b327-c4a6-3dbca485ec20@gmx.com/T/ カーネル]と[https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/XUZLHJ5O32OX24LG44R7UZ2TMN6NY47N/ Fedora] のメーリングリストで議論されている通り、メモリ不足の状況におけるカーネルとユーザ空間の挙動は将来的に改善されるかもしれませんが、ユーザは、システムのハードリセットや {{ic|vm.overcommit_*}} [[sysctl]] パラメータの調整よりも実行可能で効果的なオプションを使うことができます:<br />
<br />
* [https://docs.kernel.org/admin-guide/sysrq.html Magic SysRq キー] ({{ic|Alt+SysRq+f}}) で手動でカーネルの OOM killer をトリガーする。<br />
* ユーザ空間の OOM デーモンを使ってこれに自動的 (または対話的) に対処する。<br />
<br />
{{Warning|OOM killer をトリガーして実行中のアプリケーションを kill すると、保存されていない作業が失われる場合があります。アプリケーションが最終的に通常通りメモリを開放してくれることを期待して辛抱強く待つか、あるいは応答がないシステムを可能な限り早く通常に戻したいと望むかは、あなた次第です。}}<br />
<br />
カーネルの OOM killer では終了する (しない) プロセスに優先順位を付けられないので、SysRq よりも OOM デーモンのほうが好ましい場合もあります。いくつかの OOM デーモンをリストアップしました:<br />
<br />
* {{App|systemd-oomd|[[systemd]] によって {{ic|systemd-oomd.service}} として提供されています。cgroups-v2 と pressure stall information (PSI) を使用してプロセスを監視し、カーネル空間で OOM が発生する前にアクションを取ります。|https://github.com/systemd/systemd, {{man|8|systemd-oomd}}|{{Pkg|systemd}}}}<br />
* {{App|earlyoom|C で書かれた、シンプルなユーザ空間の OOM killer 実装です。|https://github.com/rfjakob/earlyoom|{{Pkg|earlyoom}}}}<br />
* {{App|oomd|[https://lwn.net/Articles/759781/ PSI] ベースの OOM killer 実装です。Linux カーネルバージョン 4.20+ を必要とします。設定は JSON で行い、非常に複雑です。Facebook の本番環境において動作確認済み。|https://github.com/facebookincubator/oomd|{{AUR|oomd}}}}<br />
* {{App|nohang|Python で書かれた、洗練された OOM ハンドラ。オプションで PSI サポートあり。earlyoom よりも設定可能です。|https://github.com/hakavlad/nohang|{{AUR|nohang-git}}}}<br />
* {{App|low-memory-monitor|GNOME 開発者の取り組み。ユーザ空間のアプリケーションにメモリ不足の状態を伝えるためのより良いコミュニケーションを提供することを目的としており、さらにカーネルの OOM killer をトリガーするように設定することができます。PSI ベースで、Linux 5.2+ を必要とします。|https://gitlab.freedesktop.org/hadess/low-memory-monitor/|{{AUR|low-memory-monitor-git}}}}<br />
* {{App|uresourced|アクティブなグラフィカルユーザセッションに対して、cgroup ベースのリソース保護を有効化する小さなデーモン。|https://gitlab.freedesktop.org/benzea/uresourced|{{AUR|uresourced}}}}<br />
<br />
== ネットワーク ==<br />
<br />
* カーネルネットワーキング: [[Sysctl#パフォーマンスを向上させる]] を参照<br />
* NIC: [[ネットワーク設定#MTU とキューの長さの設定]] を参照<br />
* DNS: キャッシュ付きの DNS リゾルバの使用を検討してください。[[ドメイン名前解決#DNS サーバ]] を参照<br />
* Samba: [[Samba#スループットを向上させる]] を参照<br />
<br />
== ウォッチドッグ ==<br />
<br />
[[wikipedia:ja:ウォッチドッグタイマー]]より:<br />
<br />
:ウォッチドッグタイマーはコンピュータの動作に支障が生じていないか確認して復旧するために使われる電子的なタイマーである。通常、コンピュータは定期的にウォッチドッグタイマーをリセットする。何らかの理由でウォッチドッグをリセットできなかった場合、タイマーによってタイムアウト信号が生成され、コンピュータを安定状態に移行して通常のシステムオペレーティングを復旧させるなどの対応が行われる。<br />
<br />
システムがミッションクリティカルな役割 (サーバーなど) を担う場合や電源のリセットができない場合 (組み込みデバイスなど)、上記のようなウォッチドッグ機能が必要となります。ユースケースによってはウォッチドッグ機能はシステム運用に不可欠な存在です。一方で、普通のユーザー (デスクトップやノートパソコンユーザー) にとっては不要な機能であり無効化しても問題ありません。<br />
<br />
(ソフトウェアとハードウェア両方の) ウォッチドッグタイマーを無効化するには、ブートパラメータに {{ic|nowatchdog}} を追加してください。<br />
<br />
{{ic|nowatchdog}} ブートパラメータは Intel TCO ハードウェアウォッチドッグに対しては機能しない場合があります。[https://bbs.archlinux.org/viewtopic.php?id=221239] そのような場合、{{ic|1=modprobe.blacklist=iTCO_wdt}} [[カーネルパラメータ]]を使って TCO のカーネルモジュールを無効化することができます。<br />
<br />
AMD Ryzen CPU を使用している場合、[[journal]] で {{ic|sp5100-tco}} も確認してください。これは [[Wikipedia:AMD_700_chipset_series|AMD 700 チップセットシリーズ]]内部のハードウェア watchdog です。これを無効化するには、以下を作成してください:<br />
<br />
{{hc|/etc/modprobe.d/disable-sp5100-watchdog.conf|<br />
blacklist sp5100_tco<br />
}}<br />
<br />
あるいは、{{ic|1=modprobe.blacklist=sp5100_tco}} [[カーネルパラメータ]]を使用してください。<br />
<br />
{{ic|cat /proc/sys/kernel/watchdog}} か {{ic|wdctl}} で新しい設定が機能していることを確認してください。<br />
<br />
ロードされるモジュールが減ることで起動やシャットダウンが高速化されます。さらに、ウォッチドッグを無効にするとパフォーマンスが向上し、[[電源管理#NMI watchdog の無効化|消費電力も抑えられます]]。<br />
<br />
詳しくは [https://bbs.archlinux.org/viewtopic.php?id=163768]、[https://bbs.archlinux.org/viewtopic.php?id=165834]、[https://0pointer.de/blog/projects/watchdog.html]、[https://docs.kernel.org/watchdog/watchdog-parameters.html] を参照してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]<br />
<br />
{{TranslationStatus|Improving performance|2024-03-16|803302}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Stateless_OpenPGP&diff=36558
Stateless OpenPGP
2024-03-16T03:04:19Z
<p>AshMyzk: 初版</p>
<hr />
<div>[[Category:暗号化]]<br />
[[Category:OpenPGP]]<br />
{{Related articles start}}<br />
[[en:Stateless OpenPGP]]<br />
{{Related|保存データ暗号化}}<br />
{{Related|アプリケーション一覧/セキュリティ#暗号化, 署名, ステガノグラフィー}}<br />
{{Related|OpenPGP}}<br />
{{Related articles end}}<br />
<br />
Stateless OpenPGP (SOP) は、コマンドラインインターフェイス (CLI) ツールが [[OpenPGP]] の操作を行うための標準規格です。<br />
この機能と構文の概要が記されている[https://datatracker.ietf.org/doc/draft-dkg-openpgp-stateless-cli/ これについて扱っている IETF のドラフト]で定義されています。<br />
<br />
多くの SOP 実装が存在しており、[https://tests.sequoia-pgp.org/ 相互運用性テストスイート]で相互テストされています。<br />
<br />
実装は様々な名前の実行可能ファイルを提供していますが、これらは全て同じ CLI を持っており、コア機能は互換性があります。<br />
<br />
== インストール ==<br />
<br />
[[インストール]]可能な実装はいくつか存在します:<br />
<br />
* {{Pkg|rsop}}<br />
* {{Pkg|sequoia-sop}}<br />
<br />
== ヒントとテクニック ==<br />
<br />
以下の例では、SOP 実行ファイルの名前 (例: ''rsop'' や ''sqop'') が {{ic|$SOP}} 環境変数に格納されていると仮定します。<br />
<br />
=== 秘密鍵を作成する ===<br />
<br />
[https://openpgp.dev/book/glossary.html#term-User-ID User ID] {{ic|<archie@example.org>}} 付きの OpenPGP [https://openpgp.dev/book/glossary.html#term-Transferable-Secret-Key transferable secret key] (別名: 秘密鍵) を作成するには:<br />
<br />
$ $SOP generate-key "<archie@example.org>" > archie.tsk<br />
<br />
=== 証明書を抽出する ===<br />
<br />
作成した transferable secret key から[https://openpgp.dev/book/glossary.html#term-OpenPGP-Certificate 証明書] (別名: 公開鍵) を抽出するには:<br />
<br />
$ $SOP extract-cert > archie.cert < archie.tsk<br />
<br />
=== Detached 署名を作成する ===<br />
<br />
メッセージの [https://openpgp.dev/book/glossary.html#term-Detached-Signature detached 署名]を作成するには:<br />
<br />
$ echo "Hello world" | $SOP sign archie.tsk > msg.sig<br />
<br />
=== Detached 署名を検証する ===<br />
<br />
Detached 署名を検証するには、オリジナルのメッセージ、署名、そして OpenPGP 証明書を使用してください:<br />
<br />
{{hc|$ echo "Hello world" {{!}} $SOP verify msg.sig archie.cert|<br />
2024-02-27T17:36:28Z 12b7169b5fc99d1a2d546b8755d1f4d8a355f3cb 12b7169b5fc99d1a2d546b8755d1f4d8a355f3cb mode:binary<br />
}}<br />
<br />
=== メッセージを暗号化する ===<br />
<br />
メッセージは、受信者の OpenPGP 証明書によって暗号化できます:<br />
<br />
$ echo "Hello world" | $SOP encrypt archie.cert > encrypted.msg<br />
<br />
=== メッセージを復号する ===<br />
<br />
暗号化されたメッセージを受信したユーザーは、そのユーザーの transferable secret key によってメッセージを復号することができます:<br />
<br />
{{hc|$ $SOP decrypt archie.tsk < encrypted.msg|<br />
Hello world<br />
}}<br />
<br />
=== Cleartext 署名されたメッセージを作成する ===<br />
<br />
Transferable secret key で [https://openpgp.dev/book/glossary.html#term-Cleartext-Signature cleartext 署名]されたメッセージを作成できます:<br />
<br />
{{hc|$ echo "Hello world" {{!}} $SOP inline-sign --as clearsigned archie.tsk|<nowiki><br />
-----BEGIN PGP SIGNED MESSAGE-----<br />
<br />
Hello world<br />
<br />
-----BEGIN PGP SIGNATURE-----<br />
<br />
wnUEARYKAB0WIQQStxabX8mdGi1Ua4dV0fTYo1XzywUCZd4eOgAKCRBV0fTYo1Xz<br />
yyqJAQDUD/lbhqOHL/O0cjtytXQXnMOx5twW3FT3RJPlu9JZUAEA2OAMhzLmX6Bb<br />
mXz8Tu0eApqbxu64ksieL8YNN20IwQs=<br />
=77wU<br />
-----END PGP SIGNATURE-----<br />
</nowiki>}}<br />
<br />
== 参照 ==<br />
<br />
* [https://datatracker.ietf.org/doc/draft-dkg-openpgp-stateless-cli/ IETF draft]<br />
* [https://tests.sequoia-pgp.org/ Interoperability test suite]<br />
* [https://openpgp.dev/book/ OpenPGP for application developers]<br />
<br />
{{TranslationStatus|Stateless OpenPGP|2024-03-16|801673}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=OpenPGP&diff=36557
OpenPGP
2024-03-16T02:32:51Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:認証]]<br />
[[Category:デジタル署名]]<br />
[[Category:暗号化]]<br />
[[Category:OpenPGP]]<br />
[[en:OpenPGP]]<br />
[[it:OpenPGP]]<br />
[[ru:OpenPGP]]<br />
{{Related articles start}}<br />
{{Related|OpenPGP-card-tools}}<br />
{{Related|GnuPG}}<br />
{{Related|スマートカード}}<br />
{{Related|Stateless OpenPGP}}<br />
{{Related articles end}}<br />
[[Wikipedia:ja:Pretty Good Privacy#OpenPGP|OpenPGP]] とは、暗号関連の処理に関するオープンな標準規格です。このシステムは、広く知られた暗号ビルディングブロック (cryptographic building blocks) をベースとしています。OpenPGP は、送信者と受信者との間におけるファイル及びメッセージのセキュアな転送をサポートしています。また、相手が確かに本物であるかどうかの認証も行います。<br />
<br />
== ソフトウェア ==<br />
<br />
=== アプリケーション ===<br />
<br />
多くの [https://www.openpgp.org/software/ E メールクライアントが OpenPGP の機能を実装しています] (例えば [[Thunderbird]])。<br />
<br />
汎用の OpenPGP コマンドラインツールとしては、{{pkg|gnupg}} や {{pkg|sequoia-sq}} があります。<br />
<br />
=== Stateless OpenPGP (SOP) ===<br />
<br />
[[Stateless OpenPGP]] (通称 SOP) は、OpenPGP のメッセージを処理するためのステートレスな汎用コマンドラインインターフェイスを定義しています。この標準規格は、OpenPGP オブジェクトのセキュリティをカバーする、最小の API を正しく構築することを目的としています。<br />
<br />
多くのユースケースにおいて、SOP は必要な機能を全て提供し、[[GnuPG]] などの代替として、ベンダーに依らないスタンドアローンなツールとして使用することができます (詳細は、これに関して扱っている [https://datatracker.ietf.org/doc/draft-dkg-openpgp-stateless-cli/ IETF ドラフト]を参照してください)。<br />
<br />
多くの SOP 実装が存在しており、[https://tests.sequoia-pgp.org/ 相互運用性テストスイート]で相互テストされています。<br />
<br />
=== ライブラリ ===<br />
<br />
様々なプログラミング向けに多くの [https://www.openpgp.org/software/developer/ ライブラリ]が存在しています。<br />
<br />
== ハードウェアセキュリティデバイスのサポート ==<br />
<br />
OpenPGP の秘密鍵は、専用のハードウェアデバイスによってセキュアに管理することができます。OpenPGP カードの標準規格は、この目的のためのスマートカードアプリケーションについて定義しています。多くのデバイスがこの規格を実装しています (例えば、[[Nitrokey]] や [[YubiKey]] のほぼすべてのモデル)。<br />
<br />
[[スマートカード]]は、[[GnuPG#スマートカード|GnuPG]] や [[OpenPGP-card-tools]] といったソフトウェアで使用することができます。<br />
<br />
== 標準化 ==<br />
<br />
OpenPGP の標準化は、[https://datatracker.ietf.org/wg/openpgp/about/ IETF OpenPGP ワーキンググループ]において行われています。<br />
<br />
[[Wikipedia:ja:Internet Engineering Task Force|IETF]] が採択した、OpenPGP に関する標準の中で最も最近の広く採用されているものは、[https://datatracker.ietf.org/doc/html/rfc4880 RFC4880] です。<br />
この標準は、現在 "OpenPGP version 4" と呼ばれている形式を定義しています。<br />
<br />
[https://datatracker.ietf.org/doc/html/rfc6637 RFC6637] は、NIST の素体曲線を使用する[[Wikipedia:ja:楕円曲線暗号|楕円曲線暗号]]の拡張を定義しています。<br />
<br />
[[Wikipedia:ja:Curve25519|Curve 25519]] をベースとしたアルゴリズムの拡張は広く使用されています。これは、この標準 (RFC4880) の新しいバージョンとしてはまだ最終化されていない [https://www.ietf.org/archive/id/draft-ietf-openpgp-rfc4880bis-10.html#name-elliptic-curve-cryptography RFC4880bis] において暫定的に定義されました。<br />
<br />
このワーキンググループは現在、RFC4880bis の後継となる [https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/ OpenPGP の更新された規格]の最終化に取り組んでいます。<br />
最終化が行われているこの RFC (この標準は "crypto refresh" とも呼ばれています) で取り扱う範囲は、OpenPGP 標準の暗号化機能に対する更新です (詳細は [https://datatracker.ietf.org/doc/charter-ietf-openpgp/02/ IETF OpenPGP ワーキンググループの第2章]を参照)。<br />
この新しい標準規格は、"OpenPGP version 6" の鍵と署名に対する新しい形式を定義し、最近の [[Wikipedia:ja:認証付き暗号|AEAD]] ベースの暗号の使用を容易にします。<br />
<br />
今後は、[[Wikipedia:post-quantum cryptography|ポスト量子暗号 (PQC)]] や[[Wikipedia:ja:Forward secrecy|前方秘匿性]]といったトピックが中心の作業になるでしょう (詳細は [https://datatracker.ietf.org/doc/charter-ietf-openpgp/04/ IETF OpenPGP ワーキンググループの第4章]を参照)。<br />
<br />
== PGP Public Key Infrastructure ==<br />
<br />
OpenPGP のエコシステムは、[https://openpgp.dev/book/glossary.html#term-OpenPGP-Certificate 公開鍵]を処理するための様々なメカニズムを発達させてきました。<br />
この公開鍵のインフラストラクチャ (別名 PGPKI) は、2つの懸念事項に対処します:<br />
<br />
* 通信ピアの証明書の配布と取得<br />
* 証明書での対象の認証<br />
<br />
ピアと通信するには、ピアの証明書のコピーが必要です。証明書のコピーの取得は、以下の章で説明されている配布モデルの1つによって可能です ([[#Keyserver]] と [[#Web Key Directory]] を参照)。<br />
<br />
OpenPGP 証明書には、[https://openpgp.dev/book/glossary.html#term-Identity-Claim identity claim] が含まれています。OpenPGP は、中央の認証機関が存在しない分散型システムなので、identity claim は [https://openpgp.dev/book/glossary.html#term-Certificate-Holder certificate holder] によって発行され、独立して検証することができます。<br />
[[Wikipedia:Threat model|脅威モデル]]によっては、対象の検証 (つまり認証) に異なる方法を取るほうが適切です。<br />
<br />
一部の低リスクな目的においては、認証を無視し、[[Wikipedia:Trust_on_first_use|Trust On First Use (TOFU)]] に頼るのも良いかもしれません。<br />
<br />
検証を行う[[#Keyserver|鍵サーバー]]や [[#Web Key Directory|Web Key Directory]] を利用することで、信頼性の保証が僅かに高くなります。<br />
<br />
[[#Explicit Authentication|Explicit Authentication]] を利用すれば (例えば、証明書の[https://openpgp.dev/book/glossary.html#term-OpenPGP-Fingerprint OpenPGP フィンガープリント]を手動で検証するなど)、最も高いレベルの信頼性を保証できます。<br />
<br />
=== Keyserver ===<br />
<br />
[https://datatracker.ietf.org/doc/draft-gallagher-openpgp-hkp/ OpenPGP HTTP Keyserver Protocol] の[[Wikipedia:Key_server_(cryptographic)|鍵サーバー]]実装は、ユーザーに OpenPGP 証明書へのアクセス手段を提供しつつ、様々な機能も提供します。<br />
<br />
一部の鍵サーバーインスタンスは、他のサーバーと互いに OpenPGP 証明書を''同期''し、同じ鍵データを提供するホストのプールを形成します。<br />
<br />
ほとんどの鍵サーバーは、証明や''検証''を行わずに OpenPGP 証明書を受け入れます。しかし、一部の新しい実装では、アップロードされた証明書に結び付けられているアドレスに検証用の E メールが送られて [https://openpgp.dev/book/glossary.html#term-User-ID User ID] の検証が強制されます。<br />
<br />
以下の表に挙げられている鍵サーバーは、必要な公共サービスをエコシステムに提供している、[[Wikipedia:ja:個人情報|個人情報]]の削除が可能である、鍵の公開にオプトインが強制されるという条件を (全てまたは一部) 満たしているため、[[Wikipedia:ja:EU一般データ保護規則|EU の一般データ保護規則 (GDPR)]] に準拠しています。<br />
<br />
[https://openpgp.dev/book/glossary.html#term-Third-party-Identity-Certification サードパーティのアイデンティティ証明書]は、どの鍵サーバーにおいても配布されていません。<br />
<br />
{| class="wikitable"<br />
|+ OpenPGP 鍵サーバー<br />
! ホスト !! 同期 !! 検証 !! アイデンティティ証明書 !! ソフトウェア<br />
|-<br />
| https://keys.openpgp.org || {{ No }} || {{ Yes }} || {{ No }} || [https://gitlab.com/keys.openpgp.org/hagrid/ Hagrid]<br />
|-<br />
| https://pgpkeys.eu/ || {{ Yes|https://spider.pgpkeys.eu/sks-peers }} || {{ No }} || {{ Yes }} || [https://github.com/hockeypuck/hockeypuck Hockeypuck]<br />
|-<br />
| https://keyserver.ubuntu.com/ || {{ No }} || {{ No }} || {{ Yes }} || [https://github.com/hockeypuck/hockeypuck Hockeypuck]<br />
|-<br />
| https://keys.mailvelope.com/ || {{ No }} || {{ Yes }} || {{ No }} || [https://github.com/mailvelope/keyserver Mailvelope Keyserver]<br />
|}<br />
<br />
=== Web Key Directory ===<br />
<br />
[https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/ Web Key Directory (WKD)] とは、与えられたドメインの OpenPGP 証明書を配布するための、[[Wikipedia:Well-known_URI|well-known URI]] に基づく仕組みです。<br />
<br />
WKD により、[[ウェブサーバー]]は、正規化されたファイル名による well-known ディレクトリ構造へのアクセス手段を提供し、メールアドレスによる検索が可能になります。<br />
<br />
[[GnuPG]] の Wiki によれば、この仕組みは[https://wiki.gnupg.org/WKD#Mail_Service_Providers_offering_WKD 複数のメールホストプロバイダ]によってサポートされています。<br />
<br />
WKD ディレクトリ構造は、OpenPGP 公開鍵リングから作成でき、[[ウェブサーバー]]から公開することができます。<br />
https://metacode.biz/openpgp/web-key-directory でセットアップが正しいかどうか確認できます。<br />
<br />
=== Explicit Authentication ===<br />
<br />
Explicit authentication は、セキュアなチャネル (例えば、直接対面して) を通じて証明書の OpenPGP フィンガープリントを証明書の所有者と手動で検証することを意味する場合があります。<br />
<br />
[[wikipedia:ja:Web of trust|Web of Trust]] は Explicit authentication の一つであり、手動による認証を機械可読なデータにエンコードします: [https://openpgp.dev/book/glossary.html#term-Certification OpenPGP 証明書] (署名とも)。<br />
直接的な認証と、[https://openpgp.dev/book/glossary.html#term-Trusted-introducer trusted introducer] を介して認証を[https://openpgp.dev/book/glossary.html#term-Delegation 委託]する方法の両方をモデル化できます。<br />
<br />
Arch Linux では、[https://archlinux.org/master-keys/ 主署名鍵]のセットが Arch Linux プロジェクトの[https://openpgp.dev/book/glossary.html#term-Trust-Anchor トラストアンカー]として機能します。これらの鍵は、全ての [https://archlinux.org/people/package-maintainers/ Package Maintainer] と[https://archlinux.org/people/developers/ 開発者たち]の OpenPGP 証明書を証明するために使用されます。<br />
主署名鍵をトラストアンカーとして使用することで、誰でも各パッケージ作成者の信頼性を検証することができます。<br />
Arch Linux ユーザーは、{{pkg|archlinux-keyring}} を[[インストール]]し、{{man|8|pacman-key}} を使用することで、これを行うことができます。<br />
<br />
または、主署名鍵の OpenPGP フィンガープリントは OpenPGP のユーザーによってトラストアンカーとして手動で設定することができます (例えば、https://archlinux.org/master-keys/ で鍵を検証することによって)。<br />
関連する証明書は全て Arch Linux 独自の [[#Web Key Directory|web key directory]]、[https://gitlab.archlinux.org/archlinux/archlinux-keyring/ archlinux-keyring プロジェクト]のリリース、または [[#Keyserver|鍵サーバー]]から取得できます。<br />
<br />
== 使用例 ==<br />
<br />
== 参照 ==<br />
<br />
* [https://www.openpgp.org/ OpenPGP ウェブサイト]<br />
* [https://openpgp.dev/book/ Notes on OpenPGP プロジェクトの "OpenPGP for application developers"]<br />
* [https://gnupg.org/ftp/specs/OpenPGP-smart-card-application-3.4.1.pdf Achim Pietig による "Functional Specification of the OpenPGP application on ISO Smart Card Operating Systems"]<br />
* [https://tests.sequoia-pgp.org/ OpenPGP 相互運用性テストスイート]<br />
* [https://blog.pgpkeys.eu/state-keyservers-2024.html "The State of the Keyservers in 2024" に関するブログ記事]<br />
<br />
{{TranslationStatus|OpenPGP|2024-03-16|803362}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E7%BD%B2%E5%90%8D&diff=36556
カテゴリ:デジタル署名
2024-03-16T02:03:15Z
<p>AshMyzk: 訳を修正</p>
<hr />
<div>[[Category:暗号化]]<br />
[[en:Category:Digital signature]]<br />
[[Wikipedia:ja:デジタル署名|デジタル署名]]に関しては、[[OpenPGP]] や [[OpenSSL]] といった、メッセージ、データ、証明書のデジタル署名に関するトピックを扱う記事があります。</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E7%BD%B2%E5%90%8D&diff=36555
カテゴリ:デジタル署名
2024-03-16T02:00:56Z
<p>AshMyzk: ページの作成:「Category:暗号化 en:Category:Digital signature Wikipedia:ja:デジタル署名の項目では、OpenPGP や OpenSSL といった、メッセージ…」</p>
<hr />
<div>[[Category:暗号化]]<br />
[[en:Category:Digital signature]]<br />
[[Wikipedia:ja:デジタル署名]]の項目では、[[OpenPGP]] や [[OpenSSL]] といった、メッセージ、データ、証明書のデジタル署名に関するトピックを扱う記事をまとめています。</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=OpenPGP&diff=36554
OpenPGP
2024-03-16T01:56:28Z
<p>AshMyzk: 言語間リンク & カテゴリ & 関連リンクを同期</p>
<hr />
<div>[[Category:認証]]<br />
[[Category:デジタル署名]]<br />
[[Category:暗号化]]<br />
[[Category:OpenPGP]]<br />
[[en:OpenPGP]]<br />
[[it:OpenPGP]]<br />
[[ru:OpenPGP]]<br />
{{Related articles start}}<br />
{{Related|OpenPGP-card-tools}}<br />
{{Related|GnuPG}}<br />
{{Related|スマートカード}}<br />
{{Related|Stateless OpenPGP}}<br />
{{Related articles end}}<br />
[[Wikipedia:ja:Pretty Good Privacy#OpenPGP|OpenPGP]] とは、暗号関連の処理に関するオープンな標準規格です。このシステムは、広く知られた暗号ビルディングブロック (cryptographic building blocks) をベースとしています。OpenPGP は、送信者と受信者との間におけるファイル及びメッセージのセキュアな転送をサポートしています。また、相手が確かに本物であるかどうかの認証も行います。<br />
<br />
== ソフトウェア ==<br />
<br />
=== アプリケーション ===<br />
<br />
多くの [https://www.openpgp.org/software/ E メールクライアントが OpenPGP の機能を実装しています] (例えば [[Thunderbird]])。<br />
<br />
汎用の OpenPGP コマンドラインツールとしては、{{pkg|gnupg}} や {{pkg|sequoia-sq}} があります。<br />
<br />
=== ライブラリ ===<br />
<br />
様々なプログラミング向けに多くの [https://www.openpgp.org/software/developer/ ライブラリ]が存在しています。<br />
<br />
== ハードウェアセキュリティデバイスのサポート ==<br />
<br />
OpenPGP の秘密鍵は、専用のハードウェアデバイスによってセキュアに管理することができます。OpenPGP カードの標準規格は、この目的のためのスマートカードアプリケーションについて定義しています。多くのデバイスがこの規格を実装しています (例えば、[[Nitrokey]] や [[YubiKey]] のほぼすべてのモデル)。<br />
<br />
[[スマートカード]]は、[[GnuPG#スマートカード|GnuPG]] や [[OpenPGP-card-tools]] といったソフトウェアで使用することができます。<br />
<br />
== ヒントとテクニック ==<br />
<br />
== 参照 ==<br />
<br />
* https://www.openpgp.org/<br />
* https://gnupg.org/ftp/specs/OpenPGP-smart-card-application-3.4.1.pdf<br />
<br />
{{TranslationStatus|OpenPGP|2023-11-23|793015}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=KDE&diff=36543
KDE
2024-03-14T09:32:58Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:KDE]]<br />
[[de:KDE]]<br />
[[en:KDE]]<br />
[[es:KDE]]<br />
[[it:KDE]]<br />
[[pt:KDE]]<br />
[[ru:KDE]]<br />
[[zh-hans:KDE]]<br />
{{Related articles start}}<br />
{{Related|デスクトップ環境}}<br />
{{Related|ディスプレイマネージャ}}<br />
{{Related|ウィンドウマネージャ}}<br />
{{Related|Qt}}<br />
{{Related|SDDM}}<br />
{{Related|Dolphin}}<br />
{{Related|KDE Wallet}}<br />
{{Related|KDevelop}}<br />
{{Related|Trinity}}<br />
{{Related|Qt と GTK アプリケーションの外観の統合}}<br />
{{Related|公式リポジトリ#kde-unstable}}<br />
{{Related articles end}}<br />
<br />
KDE は現在、Plasma として知られる[[デスクトップ環境]]、ライブラリとフレームワーク (KDE Frameworks) のコレクション、そしてアプリケーション (KDE Applications) からなるソフトウェアプロジェクトです。KDE の上流には、よくメンテナンスされている [https://userbase.kde.org/ UserBase wiki] があり、ほとんどの KDE アプリケーションの詳細情報を見つけることができます。<br />
<br />
== インストール ==<br />
<br />
=== Plasma ===<br />
<br />
{{Pkg|plasma-meta}} メタパッケージか {{Grp|plasma}} グループを[[インストール]]してください。{{Pkg|plasma-meta}} と {{Grp|plasma}} の違いについては [[パッケージグループ]] を参照してください。あるいは、Plasma を動かすための必要最小限のパッケージだけインストールしたい場合、{{Pkg|plasma-desktop}} パッケージをインストールしてください。上流の KDE では、完全な機能を持った Plasma セッションを作るための[https://community.kde.org/Distributions/Packaging_Recommendations パッケージとセットアップの推奨事項]があります。<br />
<br />
プロプライエタリな {{Pkg|nvidia}} で [[NVIDIA]] GPU を使用している場合、Wayland セッションを使用するには [[NVIDIA#DRM カーネルモード設定|DRM カーネルモード設定]]を有効化してください。<br />
<br />
=== Plasma Mobile ===<br />
<br />
{{AUR|plasma-mobile}} を[[インストール]]してください。<br />
<br />
=== KDE アプリケーション ===<br />
<br />
KDE Applications のフルセットをインストールしたいときは、{{Grp|kde-applications}} グループか {{Pkg|kde-applications-meta}} メタパッケージをインストールしてください。ゲームや教育などの特定のカテゴリの KDE アプリケーションだけが欲しい場合、{{Pkg|kde-applications-meta}} の関連する依存パッケージをインストールしてください。このパッケージではアプリケーションだけがインストールされ、Plasma デスクトップは付属していないので注意してください。<br />
<br />
=== 不安定リリース ===<br />
<br />
ベータリリースは [[公式リポジトリ#kde-unstable]] を見てください。<br />
<br />
== Plasma の起動 ==<br />
<br />
{{Note|KDE Plasma 6 では、Wayland セッションは[https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2188 デフォルトとなり、推奨される]ようになるほど成熟しました。[[Xorg]] のセッションも依然としてサポートされていますが、将来のリリースで削除されるでしょう。詳細は [https://community.kde.org/Plasma/Wayland_Known_Significant_Issues Wayland Known Significant Issues] と [https://community.kde.org/Plasma/X11_Known_Significant_Issues X11 Known Significant Issues] を参照してください。}}<br />
<br />
Plasma は[[ディスプレイマネージャ]]やコンソールから起動できます。<br />
<br />
=== ディスプレイマネージャを使う ===<br />
<br />
{{Tip|推奨される[[ディスプレイマネージャ]]は [[SDDM]] です。}}<br />
<br />
* 新しい [[Wayland]] セッションを起動するには ''Plasma (Wayland)'' を選択してください。<br />
* 新しい [[Xorg]] セッションを起動するには ''Plasma (X11)'' を選択してください。<br />
* 新しい Plasma Mobile セッションを [[Wayland]] で起動するには ''Plasma Mobile (Wayland)'' を選択してください。<br />
<br />
=== コンソールから起動 ===<br />
<br />
* コンソールから Plasma を Wayland セッションで起動するには、{{ic|1=/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland}} を実行してください[https://community.kde.org/KWin/Wayland#Start_a_Plasma_session_on_Wayland]。<br />
* [[xinit|xinit/startx]] で Plasma を起動するには、{{ic|.xinitrc}} ファイルに {{ic|1=export DESKTOP_SESSION=plasma}} と {{ic|exec startplasma-x11}} を追加してください。あるいは、コンソールで直接 {{ic|startx /usr/bin/startplasma-x11}} を実行してください。ログイン時に Xorg を起動したい場合、[[ログイン時に X を起動]] を見てください。<br />
<br />
== 設定 ==<br />
<br />
KDE アプリケーションの設定のほとんどは {{ic|~/.config/}} フォルダの中に保存されます。ただし、KDE の設定は基本的に '''KDE システム設定''' アプリケーションから行うことになっています。KDE システム設定はターミナルから {{ic|systemsettings}} を実行することで起動できます。<br />
<br />
=== 個人設定 ===<br />
<br />
==== Plasma デスクトップ ====<br />
<br />
===== テーマ =====<br />
<br />
異なる種類の KDE テーマがあり、テーマによって変更される範囲も様々です:<br />
<br />
* [https://store.kde.org/browse?cat=121 グローバルテーマ]: Plasma テーマ、アプリケーションスタイル、色、フォント、アイコン、カーソル、スプラッシュスクリーン、SDDM テーマ、そして Konsole カラースキームを含むことのできる包括的なパッケージです。<br />
* [https://store.kde.org/browse?cat=104 Plasma テーマ]: Plasma パネルとウィジェットの外観を変更します。これらのテーマには、推奨されている Kvantum や Aurorae テーマがしばしば付属していて、見た目を完成させることができます。<br />
* [https://store.kde.org/browse?cat=421 アプリケーションスタイル]: プログラムの外観を変更します。<br />
* [[Qt と GTK アプリケーションの外観の統合#Kvantum|Kvantum]]、[[Qt#Qt 5 のスタイル|QtCurve]] [https://store.kde.org/browse?cat=119]、[https://github.com/DexterMagnific/QSvgStyle QSvgStyle] [https://store.kde.org/browse?cat=622]、そして [https://store.kde.org/p/1167275/ Aurorae] などの [[Qt と GTK アプリケーションの外観の統合#テーマエンジン|テーマエンジン]]を使うアプリケーションスタイル。<br />
* [[#アイコンテーマ]]: アプリケーション、ファイル、そしてアクションに対するアイコンを提供します。<br />
<br />
システム全体のインストールやアップデートを簡単にするために、一部のテーマは[https://archlinux.org/packages/?sort=&q=kde+theme&maintainer=&flagged= 公式リポジトリ]と [https://aur.archlinux.org/packages?O=0&K=kde+theme AUR] で利用可能です。<br />
<br />
グローバルテーマは、''KDE システム設定 > 外観 > グローバルテーマ > 新しいグローバルテーマを取得...'' でもインストールすることができます。<br />
<br />
====== GTK アプリケーションの外観 ======<br />
<br />
{{Tip|Qt テーマと GTK テーマの統一については、[[Qt と GTK アプリケーションの外観の統合]] を参照。}}<br />
<br />
GTK アプリケーションで優れた外観を得るための推奨テーマは {{Pkg|breeze-gtk}} です。Plasma の Breeze テーマの外観を模倣して作られています。<br />
{{Pkg|kde-gtk-config}} ({{Grp|plasma}} グループに入っています) をインストールして、''KDE システム設定 > 外観 > アプリケーションスタイル > GNOME/GTK のアプリケーションスタイルを設定...'' から GTK のテーマとして {{ic|Breeze}} を選択してください。<br />
<br />
{{Out of date|Plasma GTKd バックグラウンドサービスは Plasma の起動時に GTK の設定を上書きします。}}<br />
<br />
テーマによっては、GTK アプリケーションのツールチップが白地に白字となってしまい、読めなくなることがあります。GTK2 アプリケーションの色を変更するには、{{ic|.gtkrc-2.0}} ファイルを開いてツールチップに関するセクションを探して変更を加えてください。GTK3 アプリケーションの場合、2つのファイル {{ic|gtk.css}} と {{ic|settings.ini}} を変更する必要があります。<br />
<br />
{{AUR|vuescan-bin}} のような一部の GTK2 プログラムは、Plasma セッションで Breeze や Adwaita スキンを設定すると、チェックボックスが見えなくり、使いづらくなります。これを回避するには、例えば Numix-Frost-Light スキンを {{AUR|numix-frost-themes}} でインストールして、''KDE システム設定 > 外観 > アプリケーションスタイル > GNOME/GTK のアプリケーションスタイルを設定... > GTK テーマ'' でそのスキンを選択してください。Numix-Frost-Light は Breeze と見た目が似ています。<br />
<br />
===== フェイス =====<br />
<br />
Plasma と [[SDDM]] はどちらも {{ic|/var/lib/AccountsService/icons/}} にある PNG ファイルをユーザーのアバターとして使用します。 GUI から設定するには、 ''システム設定 > ユーザ'' を使うことができます。これは、[[インストール]]しておく必要があるかもしれません ({{Pkg|plasma-desktop}} パッケージを見てください)。ユーザ名と対応するファイルを削除するとデフォルトのアバターに戻せます。<br />
<br />
===== ウィジェット =====<br />
<br />
[https://store.kde.org/browse?cat=418 Plasmoids] は、デスクトップの機能性を向上させるように作られた、plasma デスクトップシェル用のウィジェットです。[https://aur.archlinux.org/packages?K=plasma5-applet AUR] から探すことができます。<br />
<br />
また、Plasmoid スクリプトは、パネルやデスクトップで右クリックして、''ウィジェットを追加 > 新しいウィジェットを入手... > 新しい Plasma ウィジェットをダウンロード'' を選択することでもインストールすることができます。フロントエンド https://store.kde.org/ が開かれ、ワンクリックで第三者が作成した Plasmoid スクリプトをインストール・アップデート・アンインストールできます。<br />
<br />
===== システムトレイのサウンドアプレット =====<br />
<br />
{{Pkg|plasma-pa}} か {{Pkg|kmix}} を[[インストール]]してください (アプリケーションランチャーから Kmix を起動してください)。{{Pkg|plasma-pa}} は現在 {{Grp|plasma}} グループによりデフォルトでインストールされており、追加の設定は必要ありません。<br />
<br />
{{Note|1=[https://bugs.kde.org/show_bug.cgi?id=313579#c28 ボリュームの上げ下げの変化量]を調整するには、{{ic|~/.config/kmixrc}} の {{ic|[Global]}} セクションに {{ic|1=VolumePercentageStep=1}} のように書き加えて下さい。}}<br />
<br />
===== パネルの影を無効化 =====<br />
<br />
Plasma パネルは他のウィンドウよりも上に表示され、パネルの影が下のウィンドウに描画されます。[https://bbs.archlinux.org/viewtopic.php?pid=1228394#p1228394] 他の影には影響を与えずにこの挙動を無効化したい場合、{{Pkg|xorg-xprop}} を[[インストール]]して次を実行してください:<br />
<br />
$ xprop -remove _KDE_NET_WM_SHADOW<br />
<br />
そして、+カーソルでパネルを選択してください。[https://forum.kde.org/viewtopic.php%3Ff=285&t=121592.html] 自動的に影を無効化したい場合、{{Pkg|xorg-xwininfo}} をインストールして以下のスクリプトを作成してください:<br />
<br />
{{hc|/usr/local/bin/kde-no-shadow|<nowiki><br />
#!/bin/bash<br />
for WID in $(xwininfo -root -tree | sed '/"plasmashell": ("plasmashell" "plasmashell")/!d; s/^ *\([^ ]*\) .*/\1/g'); do<br />
xprop -id $WID -remove _KDE_NET_WM_SHADOW<br />
done<br />
</nowiki>}}<br />
<br />
スクリプトに[[実行可能属性|実行権限を付与]]してください。<br />
<br />
''自動起動'' の ''Add...'' でスクリプトをログイン時に実行させることができます:<br />
<br />
$ kcmshell5 autostart<br />
<br />
===== ディスプレイのスケーリング/高 DPI ディスプレイ =====<br />
<br />
[[HiDPI#KDE Plasma]] を見てください。<br />
<br />
==== Plasma Mobile ====<br />
<br />
小さなスクリーンで Plasma Mobile を使用するために、[https://invent.kde.org/plasma-mobile/plasma-phone-settings plasma-phone-settings] には、グローバル ({{ic|/etc/xdg}}) やユーザ毎 {{ic|~/.config}} に適用できる複数の設定が含まれています。<br />
<br />
===== Applications blacklist =====<br />
<br />
{{ic|/etc/xdg/applications-blacklistrc}} (または {{ic|~/.config/applications-blacklistrc}}) は、アプリケーションメニュー/ランチャーからアプリケーションを消し、整理します。<br />
<br />
===== KDE globals =====<br />
<br />
{{ic|/etc/xdg/kdeglobals}} (または {{ic|~/.config/kdeglobals}}) は以下のことを行います:<br />
<br />
* ウェブブラウザを [https://apps.kde.org/angelfish/ Angelfish] に設定します。<br />
* ウィンドウを最大化してタイトルバーを表示しないなどのルックアンドフィール ([https://invent.kde.org/plasma/plasma-mobile/-/tree/master/look-and-feel org.kde.plasma.phone]) を設定します。<br />
<br />
===== ロックスクリーン =====<br />
<br />
{{ic|/etc/xdg/kscreenlockerrc}} (または {{ic|~/.config/kscreenlockerrc}}) はログイン後すぐにスクリーンをロックします。これは、[[SDDM#自動ログイン]] と組み合わせると便利です。<br />
<br />
===== KWin =====<br />
<br />
{{ic|/etc/xdg/kwinrc}} (または {{ic|~/.config/kwinrc}}) は以下のことを行います:<br />
<br />
* ぼかしを無効化してパフォーマンスを向上させます。<br />
* [https://maliit.github.io/ Maliit] 仮想キーボードを有効化します。<br />
<br />
==== ウィンドウ装飾 ====<br />
<br />
[https://store.kde.org/browse/cat/114/ ウィンドウ装飾] は [https://aur.archlinux.org/packages?K=kde+window+decoration AUR] で見つけることができます。<br />
また、''KDE システム設定 > 外観 > ウインドウの飾り'' からでも変更できます。ワンクリックで直接他のテーマをダウンロード・インストールすることができます。<br />
<br />
==== アイコンテーマ ====<br />
<br />
アイコンテーマは、''KDE システム設定 > 外観 > アイコン'' からインストール・変更できます。<br />
<br />
{{Note|すべてのモダンな Linux デスクトップは共通フォーマットでアイコンテーマを扱いますが、[[GNOME]] などのデスクトップ環境は (特にメニューやツールバーなどで) 使用しているアイコンがやや少なめです。そのようなデスクトップ用に開発されたテーマには Plasma や KDE アプリが必要とするアイコンが含まれていないことが多いです。代わりに Plasma に対応しているアイコンテーマをインストールすることを推奨します。}}<br />
<br />
{{Tip|いくつかのアイコンテーマはデフォルトのアイコンテーマを承継していないため、いくつかのアイコンが欠落している場合があります。<br />
Breeze から承継するには、 {{ic|/usr/share/icon/''theme-name''/index.theme}} の中の {{ic|1=Inherits=}} 配列に {{ic|Breeze}} を追加してください。例えば、{{ic|1=Inherits=breeze,hicolor}} のようになります。アイコンテーマを更新した後は毎回この修正をする必要があります。自動化するには [[Pacman フック]]を使うことを検討してください。}}<br />
<br />
==== スペースの節約 ====<br />
<br />
Plasma Netbook シェルは Plasma 5 から削除されました。詳細は [https://forum.kde.org/viewtopic.php%3Ff=289&t=126631.html#p335947 KDE フォーラムの投稿]を見てください。ただし、{{ic|~/.config/kwinrc}} ファイルを編集して {{ic|[Windows]}} セクションに {{ic|1=BorderlessMaximizedWindows=true}} を追加することで似たようなことを行えます。<br />
<br />
==== サムネイルの生成 ====<br />
<br />
デスクトップや Dolphin でメディアやドキュメントファイルのサムネイルを生成するには、{{Pkg|kdegraphics-thumbnailers}} と {{Pkg|ffmpegthumbs}} をインストールしてください。<br />
<br />
そしてデスクトップを''右クリック''して ''デスクトップと壁紙を設定...'' > ''アイコン'' > ''プレビュー用のプラグインを設定...'' からサムネイルのカテゴリを有効にしてください。<br />
<br />
''Dolphin'' では ''設定 > Dolphin を設定... > 全般 > プレビュー'' を開いてください。<br />
<br />
=== Night Color ===<br />
<br />
Plasma は Night Color と呼ばれる [[Redshift]] のような機能を提供します ([[Xorg]] と [[Wayland]] の両方で機能します)。選択した時間になると、目の疲れを軽減するためにスクリーンの色を暖色に近くなるように変更します。''KDE システム設定 > ディスプレイとモニタ > Night Color'' から有効化できます。<br />
<br />
{{Tip|システムトレイに Night Color の便利な on/off ボタンを設置するには、{{Pkg|kdeplasma-addons}} をインストールしてシステムトレイに追加してください。}}<br />
<br />
=== 印刷 ===<br />
<br />
{{Tip|手早く設定したいときは [[CUPS]] のウェブインタフェースを使って下さい。ウェブインターフェイスから設定したプリンターを KDE のアプリケーションから使うことができます。}}<br />
<br />
''KDE システム設定 > プリンタ'' からもプリンターの設定をすることができます。この方法を取るには、最初に {{Pkg|print-manager}}、{{Pkg|cups}}、そして {{Pkg|system-config-printer}} パッケージをインストールしてください。[[CUPS#設定]] を読んでください。<br />
<br />
=== Samba/Windows サポート ===<br />
<br />
Windows サービスにアクセスしたいときは [[Samba]] ({{Pkg|samba}} パッケージ) をインストールしてください。<br />
<br />
Dolphin の共有機能は {{Pkg|kdenetwork-filesharing}} パッケージを必要とし、ユーザー定義共有が有効になっている必要がありますが、標準の {{ic|smb.conf}} では有効になっていません。[[Samba#ユーザー定義共有を作成する|Samba]] の記事に書かれている指示に従って追加してください。設定後、Samba を再起動すれば Dolphin の共有は自動的に動作するはずです。<br />
<br />
{{Tip|Dolphin のプロンプトから Windows の共有に認証なしでアクセスするには、{{ic|*}} (アスタリスク) をユーザー名とパスワードの両方に使ってください。}}<br />
<br />
起動されたプログラムにも GVfs を使っている GTK のファイルブラウザとは違い、Dolphin から KIO 経由で SMB 共有のファイルを開くと、ほとんどのプログラムで始めにファイル全体をローカル環境にコピーします (VLC は例外です)。<br />
問題を回避したい場合は、{{Pkg|thunar}} などの GTK ベースのファイルマネージャをインストールして {{Pkg|gvfs}} と {{Pkg|gvfs-smb}} (と、ログイン情報を保存したい場合は {{Pkg|gnome-keyring}}) を使って、より有効な方法で SMB 共有にアクセスしてください。<br />
<br />
また、{{Pkg|cifs-utils}} で Samba 共有を[[マウント]]して Plasma から SMB 共有を通常のローカルフォルダと同じように使えるようにするという方法もあります。<br />
詳細は [[Samba#手動マウント]] や [[Samba#自動マウント]] を見てください。<br />
<br />
同じように ''KDE システム設定'' > ''Network Drivers'' から簡単にマウントできるようにする {{AUR|samba-mounter-git}} を使用することもできます。ただし、将来の Plasma では機能しなくなるかもしれません。<br />
<br />
=== KDE デスクトップアクティビティ ===<br />
<br />
[https://userbase.kde.org/Plasma#Activities KDE デスクトップアクティビティ]は、アクティビティ毎に、そのアクティビティを使用しているときにだけ適用される特定の設定を選択できる特殊なワークスペースです。<br />
<br />
=== 電源管理 ===<br />
<br />
Plasma の統合された省電力サービスを使うには、{{Pkg|powerdevil}} を[[インストール]]してください。このサービスは、追加の省電力機能、(サポートされていれば) モニタの輝度調整、そして周辺機器も含めたバッテリー状態の報告を提供します。<br />
<br />
{{Tip|[https://pointieststick.com/2021/07/23/this-week-in-kde-power-profiles-and-a-more-polished-kickoff/ 電源プロファイル]との統合には、任意の依存パッケージである [[power-profiles-daemon]] が必要です。}}<br />
<br />
{{Accuracy|1=以下のノートについて、logind の設定で ''LidSwitchIgnoreInhibited'' のデフォルトが ''yes'' になっていることが問題なのかもしれません。[https://bbs.archlinux.org/viewtopic.php?pid=1649022#p1649022]}}<br />
<br />
{{Note|Powerdevil は logind の全ての設定を[[電源管理#電源マネージャ|継承]]するわけではありません (ノートパソコンのフタを閉じた時のアクションなど)。そのような場合、logind の設定を変更する必要があります。詳しくは [[電源管理#電源管理]] を見てください。}}<br />
<br />
=== 自動起動 ===<br />
<br />
Plasma では、アプリケーションを自動起動したり、起動時やシャットダウン時にスクリプトを実行したりできます。アプリケーションを自動起動するには、''KDE システム設定 > 起動と終了 > 自動起動'' を開いてプログラムやシェルスクリプトを追加してください。アプリケーションの場合、''.desktop'' ファイルが作成されます。ログインスクリプトの場合、スクリプトを起動する ''.desktop'' ファイルが作成されます。<br />
<br />
{{Note|<br />
* プログラムはログイン時にしか自動起動できませんが、シェルスクリプトはシャットダウン時や Plasma が起動する前にも実行できます。<br />
* シェルスクリプトは[[実行可能属性]]を付与しておかないと実行されません。<br />
* 以前に {{ic|~/.config/autostart-scripts/}} に置かれていたシェルスクリプトは [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/736 自動的に .desktop ファイルに変更されます]。<br />
}}<br />
<br />
* 適切な [[XDG Autostart]] ディレクトリに[[デスクトップエントリ]] (つまり ''.desktop'' ファイル) を配置してください。<br />
* シェルスクリプトまたはそのシンボリックリンクは以下のディレクトリのどれかに配置してください:<br />
** {{ic|~/.config/plasma-workspace/env/}}: ログイン時に、Plasma が実行される前に実行。<br />
** {{ic|~/.config/plasma-workspace/shutdown/}}: Plasma の終了時に実行。<br />
<br />
[https://docs.kde.org/stable5/en/plasma-workspace/kcontrol/autostart/index.html 公式ドキュメント] を見てください。<br />
<br />
=== Phonon ===<br />
<br />
[[Wikipedia:ja:Phonon|Wikipedia]] より:<br />
<br />
:Phonon (フォノン) は Linux デスクトップ環境である KDE4 向けに開発されたクロスプラットフォームのマルチメディア API である。Phonon は、Unix 系デスクトップにおけるマルチメディア環境に関する諸問題を解決することを目的として開発された。<br />
<br />
:Phonon 自体はマルチメディアフレームワークではないが、バックエンドを通じて GStreamer や Xine のような既存のフレームワークの橋渡しを行う機能を有し、開発者は Phonon がサポートするあらゆるマルチメディアフレームワークに単一の API を通じてアクセス出来るようになる。これによって、フレームワークが放置されることや API の不安定性、KDE が単一のフレームワークに依存することなどの諸問題を回避できる。<br />
<br />
Phonon は KDE や Qt ソフトウェアの中で音声 (例: システム通知、KDE 音声アプリ) や動画 (例: [[Dolphin]] 動画サムネイル) のために広く使われています。以下のバックエンドを使用できます:<br />
<br />
* [[VLC]]: {{Pkg|phonon-qt5-vlc}}<br />
* [[GStreamer]]: {{Pkg|phonon-qt5-gstreamer}}。追加のコーデックサポートについては [[GStreamer#インストール]] を参照。<br />
* [[mpv]]: {{AUR|phonon-qt5-mpv}}、{{AUR|phonon-qt5-mpv-git}}<br />
<br />
KDE は、[https://community.kde.org/Distributions/Packaging_Recommendations#Non-Plasma_packages recommends VLC バックエンドのみを使用することを推奨しています]。GStreamer バックエンドは[https://invent.kde.org/libraries/phonon-gstreamer/-/issues/1 メンテナンスされていません]。しかし、主要な Linux ディストリビューション (例: Kubuntu や Fedora-KDE) は、特許で守られている MPEG コーデックをデフォルト環境から簡単に取り除けるため、GStreamer をデフォルトで使用しています。<br />
<br />
{{Note|1=<br><br />
* 複数のバックエンドを同時にインストールして、''phononsettings'' アプリケーションからどちらを優先するか設定することも可能です。<br />
* [https://forum.kde.org/viewtopic.php%3Ff=250&t=126476.html#p335080 KDE フォーラム] によると、VLC バックエンドは [[wikipedia:ReplayGain|ReplayGain]] をサポートしていません。<br />
* VLC バックエンドを使用している場合、音声による警告メッセージが送信されたときや、他の沢山のケースでアプリケーションがクラッシュすることがあります [https://forum.kde.org/viewtopic.php%3Ff=289&t=135956.html]。取り得る解決策は、VLC のプラグインキャッシュを再構築することです:<br />
{{bc|# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins}}<br />
}}<br />
<br />
=== バックアップと復元 ===<br />
<br />
KDE Plasma 5 は個人のデスクトップ設定を設定ファイルとして [[XDG Base Directory#仕様|XDG_CONFIG_HOME]] フォルダに保存します。[https://github.com/shalva97/kde-configuration-files 設定ファイルの詳細]を見て、[https://www.addictivetips.com/ubuntu-linux-tips/backup-kde-plasma-5-desktop-linux/ バックアップと復元の方法]を選択してください。<br />
<br />
=== systemd による起動 ===<br />
<br />
Plasma は、[[systemd/ユーザー|systemd ユーザ]]インスタンスを使って Plasma の全サービスを起動・管理します。Plasma 5.25 以降、これはデフォルトのスタートアップメソッドとなっていますが、以下のコマンドにより[https://invent.kde.org/plasma/plasma-workspace/-/wikis/Plasma-and-the-systemd-boot 代わり起動スクリプトを使うようにできます] (しかし、この方法は将来のリリースで機能しなくなるかもしれません):<br />
<br />
$ kwriteconfig5 --file startkderc --group General --key systemdBoot false<br />
<br />
実装の詳細については [https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ Edmundson 氏のブログ: Plasma and the systemd startup] で読めます。<br />
<br />
=== スペルチェック ===<br />
<br />
KDE アプリケーションはスペルチェックに {{Pkg|sonnet}} を使用します。サポートされている[[スペルチェッカ]]の任意の依存パッケージを見てください。<br />
<br />
''KDE システム設定 > 地域の設定 > スペルチェック'' で設定してください。<br />
<br />
=== NVIDIA 上で kwin wayland を動かす ===<br />
<br />
https://community.kde.org/Plasma/Wayland/Nvidia を見てください。<br />
<br />
== アプリケーション ==<br />
<br />
KDE プロジェクトは Plasma デスクトップと統合されたアプリケーションスイートを提供しています。利用可能なアプリケーションの完全なリストは {{Grp|kde-applications}} グループを見てください。また、[[:カテゴリ:KDE]] には KDE 関連のアプリケーションのページが存在します。<br />
<br />
KDE Applications で提供されているプログラム以外にも、Plasma デスクトップを補うアプリケーションは多数存在します。それらのうちいくつかは以下で議論されています。<br />
<br />
=== システム管理 ===<br />
<br />
==== KDE システム設定から Xorg サーバーを終了する ====<br />
<br />
サブメニュー ''KDE システム設定 > 入力デバイス > キーボード > 詳細 (タブ) > "X サーバーを終了するためのキーシーケンス"'' で、チェックボックスにチェックを入れて下さい。<br />
<br />
==== KCM ====<br />
<br />
KCM は '''KC'''onfig '''M'''odule の略です。KCM を使うと、システムの設定をするためのインターフェースを KDE システム設定に表示します。また、''kcmshell5'' でコマンドラインから使えます。<br />
<br />
* {{App|sddm-kcm|[[SDDM]] のための KDE 設定モジュール。|https://invent.kde.org/plasma/sddm-kcm|{{Pkg|sddm-kcm}}}}<br />
* {{App|kde-gtk-config|KDE 用の GTK2 と GTK3 の設定。|https://invent.kde.org/plasma/kde-gtk-config|{{Pkg|kde-gtk-config}}}}<br />
* {{App|システムポリシー|管理者が [[PolicyKit]] の設定を変更できるようにするための設定モジュール群。|https://invent.kde.org/system/polkit-kde-kcmodules-1|{{AUR|kcm-polkit-kde-git}}}}<br />
* {{App|Wacom タブレット|Wacom の Linux ドライバーの KDE GUI。|https://www.linux-apps.com/p/1127862/|{{Pkg|kcm-wacomtablet}}{{Broken package link|replaced by {{Pkg|wacomtablet}}}}}}<br />
* {{App|Kcmsystemd|KDE の systemd 制御モジュール。|https://github.com/rthomsen/kcmsystemd|{{AUR|systemd-kcm}}}}<br />
<br />
[https://www.linux-apps.com/find?search=kcm linux-apps.com] に他にも多くの KCM があります。<br />
<br />
=== デスクトップ検索 ===<br />
<br />
KDE では、ファイルインデックスの作成と検索を行う [[Baloo]] と呼ばれるソフトウェアを使って、デスクトップ検索を実装しています。<br />
<br />
=== ウェブブラウザ ===<br />
<br />
以下のブラウザは Plasma と連携できます:<br />
<br />
* {{App|[[Wikipedia:ja:Konqueror|Konqueror]]|KDE プロジェクトの一部で、KHTML と [[Chromium]] ベースの Qt WebEngine の2つのレンダリングエンジンをサポートしています。|https://konqueror.org/|{{Pkg|konqueror}}}}<br />
* {{App|[[Wikipedia:ja:Falkon|Falkon]]|Plasma との連携機能を持った Qt ウェブブラウザ (以前は Qupzilla と呼ばれていました)。Qt WebEngine を使います。|https://userbase.kde.org/Falkon/|{{Pkg|falkon}}}}<br />
* {{App|[[Chromium]]|Chromium とプロプライエタリ版の Google Chrome は Plasma との連携機能が限定されています。[[KDE Wallet#Chrome と Chromium で KDE ウォレットを使う|KWallet]] と KDE Open/Save windows を使うことができます。|https://www.chromium.org/|{{Pkg|chromium}}}}<br />
* {{App|[[Firefox]]|設定によって Firefox は Plasma と統合できます。詳しくは [[Firefox#KDE との統合]] を参照してください。|https://mozilla.org/firefox|{{Pkg|firefox}}}}<br />
<br />
{{Tip|Plasma は 5.13 以降、[[Firefox]] や [[Chrome]] と連携でき、 Plasma トレイからのメディアの再生のコントロール、ダウンロード通知と KRunner での find open tabs などが利用可能です。{{pkg|plasma-browser-integration}} パッケージと、対応するブラウザアドオンを[[インストール]]してください。Chrome/Chromium のサポートは標準で入っているはずです。Firefox のアドオンは [[Firefox#KDE との統合]] を見てください。}}<br />
<br />
=== PIM ===<br />
<br />
KDE は[[Wikipedia:Personal_information_management|個人情報管理]] (PIM) のための独自のスタックを提供しています。メールや連絡先、カレンダーなどを管理します。{{Grp|kde-pim}} パッケージグループか {{Pkg|kde-pim-meta}} メタパッケージで全ての PIM パッケージをインストールできます。<br />
<br />
==== Akonadi ====<br />
<br />
Akonadi は PIM データのローカルキャッシュとして機能するシステムであり、その期限に関係なく、他のアプリケーションから使うことが可能です。これにはユーザのメール、連絡先、カレンダー、イベント、日誌、アラーム、メモなどが含まれます。Akonadi は自身ではデータを保存しません: ストレージのフォーマットはデータの性質に依存します (例えば、連絡先は vCard フォーマットで保存されます)。<br />
<br />
{{Pkg|akonadi}} をインストールしてください。追加のアドオンは {{Pkg|kdepim-addons}} をインストールしてください。<br />
<br />
{{Note|<br />
* {{Pkg|akonadi}} パッケージで [[MariaDB]] 以外のデータベースエンジンを使いたい場合は、インストールに次のコマンドを使って {{Pkg|mariadb}} 依存パッケージをスキップしてください: {{bc|# pacman -S akonadi --assume-installed mariadb}} {{Bug|32878}} も見てください。<br />
* Akonadi が初回起動時に {{ic|/usr/bin/mysqld}} を見つけられなかった場合、SQLite にフォールバックします。<br />
}}<br />
<br />
===== MySQL =====<br />
<br />
デフォルトでは、Akonadi は {{ic|/usr/bin/mysqld}} (デフォルトは [[MariaDB]]。代替のプロバイダは [[MySQL]] を見てください) を使って、管理された MySQL インスタンスを起動し、データベースは {{ic|~/.local/share/akonadi/db_data/}} に保存されます。<br />
<br />
====== システム全体で共用の MySQL インスタンス ======<br />
<br />
Akonadi はシステム全体で共用の [[MySQL]] をデータベースとして使用できます。[https://techbase.kde.org/KDE_PIM/Akonadi#Can_Akonadi_use_a_normal_MySQL_server_running_on_my_system.3F]<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|2=<br />
[%General]<br />
Driver=QMYSQL<br />
<br />
[QMYSQL]<br />
Host=<br />
Name=akonadi_''username''<br />
Options="UNIX_SOCKET=/run/mysqld/mysqld.sock"<br />
StartServer=false<br />
}}<br />
<br />
===== PostgreSQL =====<br />
<br />
Akonadi では、システム全体で使用される既存の [[PostgreSQL]] インスタンス (つまり、{{ic|postgresql.service}}) を使用したり、PostgreSQL インスタンスをユーザ権限で実行してデータベースを {{ic|~/.local/share/akonadi/db_data/}} に保存したりできます。<br />
<br />
====== ユーザーごとの PostgreSQL インスタンス ======<br />
<br />
{{Pkg|postgresql}} と {{Pkg|postgresql-old-upgrade}} を[[インストール]]してください。<br />
<br />
Akonadi の設定ファイルを編集して、以下の内容を追加してください:<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|2=<br />
[%General]<br />
Driver=QPSQL<br />
}}<br />
<br />
{{Note|<br />
* Akonadi は、起動時に {{ic|[QPSQL]}} セクションを作成し、そのセクション内に適切な変数を設定します。<br />
* データベースは {{ic|~/.local/share/akonadi/db_data/}} に保存されます。<br />
}}<br />
<br />
{{ic|akonadictl start}} で Akonadi を起動して、 {{ic|akonadictl status}} で状態を確認してください。<br />
<br />
{{Note|<br />
* {{Pkg|akonadi}} 19.08.0-1 から、PostgreSQL のメジャーバージョンアップデートが検出されると {{ic|~/.local/share/akonadi/db_data/}} にある PostgreSQL データベースクラスタは自動でアップグレードされます。<br />
* それ以前の {{Pkg|akonadi}} バージョンでは、PostgreSQL のメジャーバージョンをアップグレードするときに手動でデータベースのアップグレードが必要です。[https://userbase.kde.org/Akonadi/Postgres_update KDE UserBase Wiki のアップデート手順]に従ってください。{{Pkg|postgresql}} と {{Pkg|postgresql-old-upgrade}} で使われている PostgreSQL バイナリへのパスを適切に設定してください。詳細は [[PostgreSQL#PostgreSQL のアップグレード]] を見てください。<br />
}}<br />
<br />
====== システム全体で共用の PostgreSQL インスタンス ======<br />
<br />
以下では既に設定されていて起動している [[PostgreSQL]] が必要です。<br />
<br />
ログイン中のユーザーのための PostgreSQL のユーザアカウントを作成してください:<br />
<br />
[postgres]$ createuser ''username''<br />
<br />
Akonadi で使うデータベースを作成してください:<br />
<br />
[postgres]$ createdb -O ''username'' -E UTF8 --locale=C -T template0 akonadi-''username''<br />
<br />
Akonadi でシステム全体で共用の PostgreSQL を使うように設定してください:<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|2=<br />
[%General]<br />
Driver=QPSQL<br />
<br />
[QPSQL]<br />
Host=/run/postgresql<br />
Name=akonadi-''username''<br />
StartServer=false<br />
}}<br />
<br />
{{Note|カスタムのポート、ユーザ名、そしてパスワードは、{{ic|[QPSQL]}} セクション内の {{ic|1=Port=}}、{{ic|1=User=}}、そして {{ic|1=Password=}} オプションでそれぞれ設定できます。}}<br />
<br />
{{ic|akonadictl start}} で Akonadi を起動して、{{ic|akonadictl status}} で状態を確認してください。<br />
<br />
===== SQLite =====<br />
<br />
[[SQLite]] を使うには、Akonadi の設定ファイルを以下のように編集してください:<br />
<br />
{{hc|~/.config/akonadi/akonadiserverrc|2=<br />
[%General]<br />
Driver=QSQLITE<br />
}}<br />
<br />
{{Note|<br />
* Akonadi は、起動時に {{ic|[QSQLITE]}} セクションを作成して、そのセクション内に適切な変数を設定します。<br />
* データベースは {{ic|~/.local/share/akonadi/akonadi.db}} に保存されます。<br />
}}<br />
<br />
===== Akonadi を無効にする =====<br />
<br />
Akonadi を無効化したい場合、Akonadi に依存している KDE アプリケーションが起動しないようにする必要があります。詳細は [https://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem KDE userbase のセクション] を参照してください。<br />
<br />
=== KDE Connect ===<br />
<br />
[https://community.kde.org/KDEConnect KDE Connect] は、[[Android]] や [[iOS]] スマートフォンと Linux デスクトップを接続するための以下の機能を提供します:<br />
<br />
* 有線接続なしで KDE とアプリ間でファイルや URL を共有。<br />
* タッチパッドのエミュレーション: 携帯の画面をコンピュータのタッチパッドとして使用。<br />
* 通知の同期 (4.3以降): デスクトップから Android の通知を読み取り。<br />
* クリップボードの共有: 携帯電話とコンピュータでコピーアンドペースト。<br />
* マルチメディアのリモートコントロール: 携帯電話を Linux メディアプレイヤーのリモコンとして使用。<br />
* WiFi 接続: USB 接続や Bluetooth を必要としません。<br />
* RSA 暗号化: あなたの情報は暗号化されます。<br />
<br />
コンピュータと電話の両方に KDE Connect をインストールする必要があります。PC 側では、{{Pkg|kdeconnect}} パッケージを[[インストール]]してください。Android 側では、[https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp Google Play] か [https://f-droid.org/packages/org.kde.kdeconnect_tp/ F-Droid] から KDE Connect をインストールしてください。電話のファイルシステムを閲覧したい場合は、{{Pkg|sshfs}} を[[インストール]]して Android アプリからファイルシステムを閲覧できるように設定する必要があります。iOS の場合は、KDE Connect を [https://apps.apple.com/app/kde-connect/id1580245991 App Store] からインストールしてください。iOS バージョンでは、Android バージョンに存在する機能すべてを利用できるわけではありません。<br />
<br />
Plasma Wayland セッションでリモート入力の機能を使用するには、{{Pkg|xdg-desktop-portal}} パッケージが必要です。<br />
<br />
Plasma デスクトップを使用しない場合でも KDE Connect は利用できます。GNOME を使っている場合、{{Pkg|kdeconnect}} の代わりに {{AUR|gnome-shell-extension-gsconnect}} をインストールすることでよりよい連携をさせることが可能です。KDE Connect デーモンを手動で起動するには、{{ic|/usr/lib/kdeconnectd}} を実行してください。<br />
<br />
[[ファイアウォール]] を使っている場合は、UDP と TCP のポート {{ic|1714}} から {{ic|1764}} までを開く必要があります。<br />
<br />
時々、KDE Connect が携帯電話を検出しないことがあります。{{ic|killall kdeconnectd}} を実行した後で KDE システム設定内の kdeconnect を開くか、{{ic|kdeconnect-cli --refresh}} の後に {{ic|kdeconnect-cli -l}} を実行することでサービスを再起動できます。また、KDE Connect for Android から ''Pair new device > Add devices by IP'' を使用することもできます。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== 別のウィンドウマネージャを使う ===<br />
<br />
Plasma で KWin 以外のウインドウマネージャを使うことができます。そうすることにより、KDE デスクトップの機能と[[タイル型ウィンドウマネージャ]]のユーティリティを組み合わせることができます (KWin のタイリングスクリプトよりも肉付けされているかもしれません)。<br />
<br />
Plasma の component chooser settings では[https://github.com/KDE/plasma-desktop/commit/2f83a4434a888cd17b03af1f9925cbb054256ade ウィンドウマネージャを変更することはもはやできません]。しかし、他の方法を取れば KWin を他のウィンドウマネージャと取り替えることができます。<br />
<br />
{{Note|コンポジタを提供しないウィンドウマネージャ (Openbox など) に Kwin を置き換えると、透過などのデスクトップコンポジット効果が失われます。この場合、そのような効果を提供する別のコンポジットマネージャ ([[Xcompmgr]] や [[picom]] など) をインストールして実行してください。}}<br />
<br />
==== KWin サービスを置き換える ====<br />
<br />
KDE 5.25 より、[https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ Plasma の systemd ベースのスタートアップ]がデフォルトで有効になりました。<br />
<br />
このスタートアップで KWin を置き換えるには、まず現在のユーザの {{ic|plasma-kwin_x11.service}} を[[マスク]]して、そのサービスが起動しないようにしなければなりません。<br />
<br />
次に、新しい systemd [[ユーザーユニット]]を[[作成]]し、あなたが選んだウィンドウマネージャを起動するようにします [https://bugs.kde.org/show_bug.cgi?id=439481#c2]:<br />
<br />
{{hc|1=~/.config/systemd/user/plasma-custom-wm.service|2=<br />
[Install]<br />
WantedBy=plasma-workspace.target<br />
<br />
[Unit]<br />
Description=Plasma Custom Window Manager<br />
Before=plasma-workspace.target<br />
<br />
[Service]<br />
ExecStart=''/path/to/other/wm''<br />
Slice=session.slice<br />
Restart=on-failure<br />
}}<br />
<br />
これを使うには、([[ユーザーユニット]]ごとに) [[daemon-reload]] を行い、{{ic|plasma-kwin_x11.service}} を[[マスク]]していることを確認した上で、新しく作成した {{ic|plasma-custom-wm.service}} を[[有効化]]してください。<br />
<br />
{{Note|Plasma で i3 ウインドウマネージャーを利用する場合、ダイアログが正しく表示されるようにするために、ダイアログがフロートモードで開くように手動でセットする必要があるかもしれません。さらなる情報については、[[i3#フロートするダイアログを正しく扱う]] をご覧ください。}}<br />
<br />
==== スクリプトベースの起動と KDEWM を使用する ====<br />
<br />
Plasma のスクリプトベースの起動は [[#systemd による起動|systemd による起動]]を無効化することにより利用できます。systemd による起動を無効化したならば、Plasma が起動する前に {{ic|KDEWM}} [[環境変数]]を設定することによりウィンドウマネージャを変更できます。<br />
<br />
===== システム全体 =====<br />
<br />
root アクセス権を持っているならば、ログイン画面の1つのオプションとして全ユーザに利用可能な XSession を追加することもできます。<br />
<br />
まず、以下のようなスクリプトを実行権限付きで作成してください:<br />
<br />
{{hc|1=/usr/local/bin/plasma-i3.sh|2=<br />
#!/bin/sh<br />
export KDEWM=/usr/bin/i3<br />
/usr/bin/startplasma-x11<br />
}}<br />
<br />
{{ic|/usr/bin/i3}} の部分は任意のウィンドウマネージャへのパスに置き換えてください。パスが正しく設定されていることを確認してください。KDE がウィンドウマネージャを起動できない場合、セッションは開始されず、ログイン画面に戻されます。<br />
<br />
次に、XSession を追加するために、以下の内容で {{ic|/usr/share/xsessions}} 内にファイルを作成してください:<br />
<br />
{{hc|1=/usr/share/xsessions/plasma-i3.desktop|2=<br />
[Desktop Entry]<br />
Type=XSession<br />
Exec=/usr/local/bin/plasma-i3.sh<br />
DesktopNames=KDE<br />
Name=Plasma (i3)<br />
Comment=KDE Plasma with i3 as the WM}}<br />
<br />
==== KDE/Openbox セッション ====<br />
<br />
{{Pkg|openbox}} パッケージには [[Openbox]] で KDE を使用するためのセッションが含まれています。このセッションを利用するには、[[ディスプレイマネージャ]]のメニューから ''KDE/Openbox'' を選択してください。<br />
<br />
セッションを手動で起動する場合、次の行を [[xinit]] の設定に追加してください:<br />
<br />
{{hc|~/.xinitrc|<br />
exec openbox-kde-session<br />
}}<br />
<br />
=== KWin のタイル型ウィンドウのスクリプト ===<br />
<br />
以下は、KDE を[[タイル型ウィンドウマネージャ]]のように動作させる KWin 拡張のリストです。<br />
<br />
* {{App|Bismuth|i3 や Sway、dwm のように、ウィンドウを自動的にタイル化し、キーボードを使って管理できるようにするアドオンです。|https://github.com/Bismuth-Forge/bismuth|{{AUR|kwin-bismuth}}}}<br />
* {{App|Polonium|Bismuth の (非公式な) 後継アドオンです。|https://github.com/zeroxoneafour/polonium|{{AUR|kwin-polonium}}}}<br />
* {{App|Kröhnkite|dwm から着想を得た、動的タイル型拡張。|https://github.com/esjeon/krohnkite|{{AUR|kwin-scripts-krohnkite-git}}}}<br />
* {{App|KZones|Microsoft PowerToys や Windows 11 のスナップレイアウトの動作を模倣するスクリプト。|https://github.com/gerritdevriese/kzones}}<br />
<br />
=== モニタの解像度やマルチモニタの設定 ===<br />
<br />
ディスプレイの解像度やマルチモニターの管理を Plasma で有効にしたい場合は、{{Pkg|kscreen}} をインストールしてください。''KDE システム設定 > ディスプレイとモニタ'' にオプションが追加されます。<br />
<br />
=== ICC プロファイルの設定 ===<br />
<br />
Plasma で [[ICC プロファイル]] を有効化するには、{{Pkg|colord-kde}} を[[インストール]]してください。これは ''KDE システム設定 > 色管理'' に追加のオプションを提供します。<br />
<br />
''Add Profile'' で ICC プロファイルをインポートできます。<br />
<br />
=== HDR ===<br />
<br />
HDR サポートは実験的であり、Wayland セッションでしか機能しません。HDR を有効化するには、Display Configuration の項目で Enable HDR を選択してください。<br />
<br />
詳細は [https://zamundaaa.github.io/wayland/2023/12/18/update-on-hdr-and-colormanagement-in-plasma.html Xaver Hugl のブログ記事]と [[HDR モニターのサポート]] を参照してください。<br />
<br />
出来ること:<br />
<br />
==== ゲーム ====<br />
<br />
上流の API が完全化されるまで、一部のゲームを機能させるには特殊な Vulkan レイヤー {{aur|vk-hdr-layer-kwin6-git}} が必要です。<br />
<br />
* HDR を有効化した状態で Steam を起動する。全てのゲームは HDR を有効化しますが、Steam は gamescope ウィンドウ内で実行します:<br />
<br />
$ ENABLE_HDR_WSI=1 gamescope --hdr-enabled --hdr-debug-force-output --steam -- env ENABLE_GAMESCOPE_WSI=1 DXVK_HDR=1 DISABLE_HDR_WSI=1 steam<br />
<br />
* Steam のゲームに対して、HDR を有効化する起動オプションを設定する:<br />
<br />
DXVK_HDR=1 ENABLE_HDR_WSI=1 gamescope -f -r 144 --hdr-enabled --hdr-debug-force-output -- env MANGOHUD=1 gamemoderun %command%<br />
<br />
* Wayland 上で Wine 9 を使用して、HDR を有効化した状態で Windows アプリケーションを起動する:<br />
<br />
$ ENABLE_HDR_WSI=1 DXVK_HDR=1 DISPLAY= wine <executable.exe><br />
<br />
* HDR を有効化した状態でネイティブなゲーム (Quake II RTX) を実行する:<br />
<br />
$ ENABLE_HDR_WSI=1 SDL_VIDEODRIVER=wayland quake2rtx<br />
<br />
==== 動画 ====<br />
<br />
* MPV を使用して、HDR を有効化した状態で動画を再生する:<br />
<br />
$ ENABLE_HDR_WSI=1 mpv --vo=gpu-next --target-colorspace-hint --gpu-api=vulkan --gpu-context=waylandvk "path/to/video"<br />
<br />
=== Super キー (Windows キー) でアプリケーションランチャーを開く機能を無効化 ===<br />
<br />
この機能を無効化するには、以下のコマンドを実行してください:<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
=== アプリケーションメニューにブックマークを表示させない ===<br />
<br />
Plasma Browser integration をインストールすると、KDE はアプリケーションランチャーにブックマークを表示するようになります。<br />
<br />
この機能を無効化するには、以下のコマンドを実行してください:<br />
<br />
$ mkdir ~/.local/share/kservices5<br />
$ sed 's/EnabledByDefault=true$/EnabledByDefault=false/' /usr/share/kservices5/plasma-runner-bookmarks.desktop > ~/.local/share/kservices5/plasma-runner-bookmarks.desktop<br />
<br />
=== IBus 統合 ===<br />
<br />
[[IBus]] は [[インプットメソッド#インプットメソッドフレームワーク|インプットメソッドフレームワーク]] であり、KDE と統合できます。詳細は [[IBus#統合]] を見てください。<br />
<br />
[[Wayland]] 上で KDE を使用している場合、アクセント記号付きの文字やデッドキーのサポートを利用するには [[IBus]] が必要になる場合があります [https://bugs.kde.org/show_bug.cgi?id=411729]。<br />
<br />
=== plasma-nm でホットスポットを有効化する ===<br />
<br />
[[NetworkManager#wifi でインターネット接続を共有する]] を見てください。<br />
<br />
=== 前回保存したセッションを復元する ===<br />
<br />
''KDE システム設定 > 起動と終了 > デスクトップセッション > When logging in: Restore previous saved session'' を選択している (デフォルト) 場合、ksmserver (KDE のセッションマネージャ) は、すべての開かれているアプリケーションを ログアウト/ログイン時に {{ic|~/.config/ksmserverrc}} に/から 自動的に 保存/ロードします。<br />
<br />
{{Note|現在、ネイティブな Wayland ウインドウは復元できません。現在の開発状況については [https://community.kde.org/Plasma/Wayland_Showstoppers Wayland Showstoppers] を見てください。}}<br />
<br />
=== KMail でローカルメールを受信する ===<br />
<br />
[[Wikipedia:ja:Maildir|Maildir]] フォーマットを使用する[[メールサーバー]]でローカルメール配送のセットアップを済ませている場合、このメールを KMail で受信したい場合があるでしょう。そうするには、{{ic|~/.local/share/local-mail/}} にメールを格納する、KMail のデフォルトの受信アカウントの "Local Folders" を再利用できます。<br />
<br />
(Maildir フォーマットのメールが届けられる場所である) {{ic|~/Maildir}} ディレクトリを Local Folders の受信ボックスへのシンボリックリンクにしてください:<br />
<br />
$ ln -s .local/share/local-mail/inbox ~/Maildir<br />
<br />
または、''Maildir'' タイプの新しい受信アカウントを追加して、{{ic|~/Maildir}} をディレクトリに設定してください。<br />
<br />
=== すべてのユーザに対して Plasma を設定する ===<br />
<br />
{{ic|/usr/share/plasma}} にある {{ic|config/main.xml}} という名前のファイルを編集してください。例えば、アプリケーションランチャーをすべてのユーザに対して設定する場合、{{ic|/usr/share/plasma/plasmoids/org.kde.plasma.kickoff/contents/config/main.xml}} を編集してください。パッケージのアップデートでこれらのファイルが上書きされないようにするには、これらのファイルを [[pacman#アップグレードさせないファイルを設定|Pacman の NoUpgrade]] に追加してください。<br />
<br />
=== ハイバネートを無効化 ===<br />
<br />
ハイバネートの機能を適切に無効化して、Polkit のポリシールールでメニューから非表示にしてください。<br />
<br />
{{hc|/etc/polkit-1/rules.d/99-disable-hibernate.rules|<nowiki><br />
// Disable hibernate for all users<br />
polkit.addRule(function(action, subject) {<br />
if ((action.id == "org.freedesktop.login1.hibernate")) {<br />
return polkit.Result.NO;<br />
}<br />
});<br />
polkit.addRule(function(action, subject) {<br />
if ((action.id == "org.freedesktop.login1.hibernate-multiple-sessions")) {<br />
return polkit.Result.NO;<br />
}<br />
});<br />
</nowiki>}}<br />
<br />
あるいは、{{ic|/etc/systemd/sleep.conf.d/}} 内にファイルを作成して、そのファイル内に以下の行を追加してください:<br />
<br />
{{hc|/etc/systemd/sleep.conf.d/00-disable-hibernation.conf|2=<br />
[Sleep]<br />
AllowHibernation=no<br />
AllowSuspendThenHibernate=no<br />
AllowHybridSleep=no<br />
}}<br />
<br />
=== ウィンドウのルールを使う ===<br />
<br />
KWin には、特定のウィンドウ/アプリケーションに対してルールを指定する機能があります。例えば、アプリケーションの開発者がタイトルバーを表示しないようにしていたとしても、強制的にタイトルバーを表示させることができます。特定の開始位置、サイズ、最小化状態、他のウィンドウより前/後ろに表示し続けるなどのルールを設定できます。<br />
<br />
ルールを作成するには、対象のウィンドウにフォーカスした状態で {{ic|Alt+F3}} を押し、''その他のアクション > アプリケーション/ウィンドウ固有の設定'' を開くことで、目的のプロパティを設定できます。作成されたルールのリストは、''KDE システム設定 > ウィンドウの操作 > ウィンドウのルール'' で見られます。<br />
<br />
=== 仮想キーボード ===<br />
<br />
デフォルトでは、仮想キーボードはインストールされていません。[[アプリケーション一覧/ユーティリティ#スクリーンキーボード]] から適切なキーボード (例えば、Maliit キーボード) を選び、インストールしてください。そして、KDE システム設定からそのキーボードを有効化してください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== KDE 6 にアップグレードした後に KDE のアイコンが消えた ===<br />
<br />
KDE 6 の最新アップグレードで KDE のアイコンが表示されない問題が発生し、ユーザーを新規作成すると問題が解決したというユーザーが存在します。<br />
<br />
この問題は、アップグレード中にテーマが消えてしまったことが原因であり、手動でテーマを再度設定する必要があります。まず、"System Settings > Colors & Themes > Global Theme > Icons" を開き、所望のテーマを選択し直してください。これで、アイコンが再び表示されるようになります。<br />
<br />
=== アップグレード後に qt5ct と kvantum のバグ ===<br />
<br />
{{Out of date|これは 2021-02-15 に追加されました。「最新のアップデート」も数年前です。すでに修正済みか?}}<br />
<br />
最新のアップデートにより、互換性のない HiDPI スケーリングが発生するかもしれません。これにより、一部のインターフェイスが大きくなりすぎたり、一部のアイコンが消えたり表示されないようになったり、パネルやウィジェットが消えたりします。<br />
<br />
{{Pkg|qt5ct}} と {{Pkg|kvantum}} 関連のパッケージを削除してみてください。その後、デフォルトのグローバル Plasma テーマを適用してください。問題が続く場合、すべての KDE 設定を削除し、{{Grp|plasma}} を再インストールして設定を上書きしてみてください。KDE システム設定の HiDPI スケーリングも確認しておいてください。<br />
<br />
=== フォント ===<br />
<br />
==== KDE のフォント表示が汚い ====<br />
<br />
{{Pkg|ttf-dejavu}} と {{Pkg|ttf-liberation}} パッケージのインストールを試して下さい。<br />
<br />
インストール後、一旦ログアウトして、その後ログインし直してください。''KDE システム設定 > 外観 > フォント'' から設定を変更する必要は無いはずです。{{Pkg|qt5ct}} を使っている場合、Qt5 の設定ツールの設定によって KDE システム設定のフォント設定が上書きされる可能性があります。<br />
<br />
個人で[[フォント]]レンダリングの設定をしている場合、KDE システム設定は外観を変更してしまう場合があることに注意してください。''KDE システム設定 > 外観 > フォント'' を開いてしまうと、KDE システム設定はあなたのフォント設定ファイル ({{ic|fonts.conf}}) を作り替えてしまいます。<br />
<br />
これを止める方法はありませんが、値を {{ic|fonts.conf}} ファイルと同じにすれば期待したフォントレンダリングができます (アプリケーションを一度終了する必要があります、場合によってはデスクトップを再起動する必要があります)。Gnome のフォント設定も同じことをするので (両方のデスクトップ環境を使っている場合は) 注意してください。<br />
<br />
==== フォントが大きすぎる・アンバランス ====<br />
<br />
''KDE システム設定 > 外観 > フォント'' からフォントの DPI を {{ic|'''96'''}} に強制してみて下さい。<br />
<br />
これでフォントが治らないときは Xorg の設定から直接 DPI をセットしてください。[[Xorg#手動で DPI を設定する]] を参照。<br />
<br />
=== 設定関連の問題 ===<br />
<br />
KDE の問題の多くは設定に関係しています。<br />
<br />
==== Plasma デスクトップの挙動がおかしい ====<br />
<br />
通常 Plasma の問題は不安定な ''Plasma ウィジェット'' (俗に ''plasmoid'' と呼ばれています) や ''Plasma テーマ'' が原因です。まず、最後にインストールしたウィジェットやテーマを無効にしたりアンインストールしてみてください。<br />
<br />
突然デスクトップが"ロックアップ"する場合は、おそらくインストールしたウィジェットの欠陥が原因です。問題が起こる前にインストールしたウィジェットがどれか思い出せないときは、問題が解決するまで一つずつウィジェットを削除して見て下さい。ウィジェットをアンインストールしたら、'''公式ウィジェットが原因の場合'''、バグレポートを [https://bugs.kde.org/ KDE bug tracker] に送って下さい。公式ウィジェットではなかったときは、 [https://store.kde.org/ KDE Store] のエントリを探してウィジェットの作者に問題を伝えることを推奨します (問題を再現する方法などを記述してください)。<br />
<br />
問題がわからないが、KDE の設定を''全て''失うのは嫌な場合は、{{ic|~/.config/}} から次を実行してください:<br />
<br />
$ for j in plasma*; do mv -- "$j" "${j%}.bak"; done<br />
<br />
このコマンドはあなたのユーザの'''すべて'''の Plasma 関連の設定ファイル名を ''*.bak'' に変更します (例: {{ic|plasmarc.bak}})。Plasma に再ログインすると、設定はデフォルトに戻っています。元に戻すには、''.bak'' 拡張子の部分を取り除いてください。すでに ''*.bak'' ファイルが存在する場合は、それらを先に移動/削除するか名前を変更してください。いずれにせよ定期的なバックアップを取ることを強く推奨します。方法については [[同期およびバックアッププログラム]] を見てください。<br />
<br />
==== キャッシュを削除してアップグレードの問題を解決する ====<br />
<br />
古いキャッシュによって[https://bbs.archlinux.org/viewtopic.php?id=135301 問題]が発生することもあります。アップグレードをした後、古いキャッシュによってシェルが消せなくなるなどのおかしな (デバッグしづらい) 挙動が発生したり、設定を変更したときにフリーズしたり、Ark が rar や zip を解凍できなくなったり、Amarok が音楽を認識しなくなるなどの問題がおこることがあります。この問題の解決方法は、アップグレードによって KDE や Qt のプログラムの見た目がおかしくなる問題を解決することもあります。<br />
<br />
次のコマンドでキャッシュを再生成してください:<br />
<br />
$ rm ~/.config/Trolltech.conf<br />
$ kbuildsycoca5 --noincremental<br />
<br />
任意で {{ic|~/.cache/}} フォルダの中身を削除してください (他のアプリケーションのキャッシュも消去されるので注意してください):<br />
<br />
$ rm -rf ~/.cache/*<br />
<br />
==== Plasma デスクトップが ロケール/言語の設定を反映しない ====<br />
<br />
Plasma デスクトップは KDE システム設定パネルや ([[ロケール#変数]]に対して) {{ic|locale.conf}} で設定したものと異なる設定を使用する場合があります。まずすべきことは、{{ic|~/.config/plasma-localerc}} を削除した後にログアウトしてログインすることです。これで問題が解決しない場合、そのファイルを手動で編集してみてください。例えば、{{ic|LANG}} 変数を {{ic|es_ES.UTF-8}} にセットし、{{ic|LC_MESSAGES}} 変数を {{ic|en_US.UTF-8}} にセットする場合は以下のようになります。<br />
<br />
{{hc|~/.config/plasma-localerc|2=<br />
[Formats]<br />
LANG=es_ES.UTF-8<br />
<br />
[Translations]<br />
LANGUAGE=en_US<br />
}}<br />
<br />
==== systemsettings でテーマ、アイコン、フォント、色を変更できない(ほとんどのアイコンが表示されない) ====<br />
<br />
{{ic|QT_QPA_PLATFORMTHEME}} [[環境変数]]がセットされて'''いない'''ことを確認してください。つまり、コマンド {{ic|printenv QT_QPA_PLATFORMTHEME}} を実行すると何も表示されない必要があります。環境変数がセットされている場合 (おそらく qt5ct)、この変数は Qt アプリケーションに対して qt5ct の設定を使用することを強制します。{{ic|1=export QT_QPA_PLATFORMTHEME=}} を実行すると環境変数を空白にします。<br />
<br />
より簡単な (そして信頼できる) 解決策は qt5ct を完全にアンインストールすることでしょう。<br />
<br />
==== 音量、通知、マルチメディアのキーを押しても動作しない ====<br />
<br />
システムトレイの設定で特定のアイテムを非表示にすると、関連する機能も無効化されます (例: 音量、メディアプレーヤー、通知)。''音量''を非表示にすると音量のキーが無効化されます。''マルチメディア''を無効化するとマルチメディアのキー (巻き戻し、停止、一時停止) が無効化されます。''通知''を無効化すると通知が表示されなくなります。<br />
<br />
==== KCM のログイン画面の設定が SDDM のカーソルと同期しない ====<br />
<br />
KCM のログイン画面の設定は {{ic|~/.config/kcminputrc}} からカーソルの設定を読み込みます。このファイルが存在しないと設定が同期されません。このファイルを作成する最も簡単な方法は、''KDE システム設定 > 外観 > カーソル'' でカーソルのテーマを変更し、そして元に戻すことです。<br />
<br />
==== パネル/ウィジェットが消えた ====<br />
<br />
クラッシュやハードウェアの変更により、たとえシングルモニタ環境であってもスクリーン番号が変更されることがあります。そのようなことが起こるとパネル/ウィジェットが消えることがあります。これは {{ic|~/.config/plasma-org.kde.plasma.desktop-appletsrc}} ファイルの {{ic|lastScreen}} の値を変更することで修正できます。<br />
<br />
=== グラフィック関連の問題 ===<br />
<br />
使用している GPU に相応しいドライバーをインストールしてください。詳しくは [[Xorg#ドライバーのインストール]] を見てください。古いカードを使っている場合は [[#特定のアプリケーションでデスクトップ効果を手動・自動で無効化]] や [[#コンポジットの無効化]] を見てください。<br />
<br />
==== デバッグなどのために KWin の現在の状態を取得 ====<br />
<br />
次のコマンドで KWin の状態の概要を出力します。使われているオプション、使われているコンポジットバックエンド、関連する OpenGL ドライバーの情報も表示されます。詳しくは [https://blog.martin-graesslin.com/blog/2012/03/on-getting-help-for-kwin-and-helping-kwin/ Martin 氏のブログ] を見てください。<br />
<br />
$ qdbus org.kde.KWin /KWin org.kde.KWin.supportInformation<br />
<br />
==== 特定のアプリケーションでデスクトップ効果を手動・自動で無効化 ====<br />
<br />
Plasma はデスクトップ効果をデフォルトで有効にします(一部のゲームはデスクトップ効果を自動で無効化しません)。デスクトップ効果は ''KDE システム設定 > ワークスペースの挙動 > デスクトップ効果'' から無効化したり {{ic|Alt+Shift+F12}} でデスクトップ効果を切り替えることができます。<br />
<br />
さらに、KWin のカスタムルールを作成することで特定のアプリケーションやウィンドウが起動したときに自動的にコンポジットの無効化・有効化を行うことができます。''KDE システム設定 > ウインドウ操作 > ウインドウルール'' から設定してください。<br />
<br />
==== 透過を有効にする ====<br />
<br />
コンポジタを有効にせずに透過背景を使用すると、以下のメッセージが発生します:<br />
<br />
This color scheme uses a transparent background which does not appear to be supported on your desktop<br />
<br />
''KDE システム設定 > ディスプレイとモニタ > コンポジタ'' を開いて、''Compositing: Enable on startup'' にチェックを付けて、Plasma を再起動してください。<br />
<br />
==== コンポジットの無効化 ====<br />
<br />
''KDE システム設定 > ディスプレイとモニタ > コンポジタ'' から ''Compositing: Enable on startup'' のチェックを外して Plasma を再起動してください。<br />
<br />
==== コンポジットを有効にするとフルスクリーンでちらつきが発生する ====<br />
<br />
''KDE システム設定 > ディスプレイとモニタ > コンポジタ'' から ''Compositing: Allow applications to block compositing'' のチェックを外してください。そうすると、パフォーマンスに悪影響を及ぼす場合があります。<br />
<br />
==== Plasma のカーソルがときどきおかしくなる ====<br />
<br />
{{ic|~/.icons/default}} ディレクトリ (あるいは {{ic|${XDG_DATA_HOME:-$HOME/.local/share}/icons/default/}}) を作成して、その中に {{ic|index.theme}} という名前のファイルを以下の内容で作成してください:<br />
<br />
{{hc|~/.icons/default/index.theme|2=<br />
[Icon Theme]<br />
Inherits=breeze_cursors<br />
}}<br />
<br />
必要に応じて、{{ic|breeze_cursors}} の部分は実際に使用しているカーソルテーマに置き換えてください。<br />
<br />
以下のコマンドを実行してください:<br />
<br />
$ ln -s /usr/share/icons/breeze_cursors/cursors ~/.icons/default/cursors<br />
<br />
Wayland では、GTK/Gnome アプリケーションで正しくカーソルテーマを適用するために {{Pkg|xdg-desktop-portal-gtk}} をインストールしておく必要があります。<br />
<br />
===== Firefox と Thunderbird がカーソルテーマを無視する =====<br />
<br />
[[Firefox#Wayland|Firefox の Wayland]] サポートを有効化している場合、Firefox と Thunderbird は、どのカーソルを表示するかを決定するために GSettings を参照します。<br />
<br />
GTK アプリケーションに KDE の設定を適用するには、{{Pkg|kde-gtk-config}} をインストールしてください。<br />
<br />
追加のパッケージをインストールしたくない場合は、手動でカーソルテーマを設定することもできます:<br />
<br />
$ gsettings set org.gnome.desktop.interface cursor-theme ''cursor-theme-name''<br />
<br />
==== (ハイパーリンクにマウスを合わせた時などに)カーソルが変化するとカーソルが震える/跳ねる ====<br />
<br />
あなたのシステムとウインドウマネージャに合う適切な 2D アクセラレーションドライバをインストールしてみてください。<br />
<br />
==== 使用できないスクリーン解像度設定 ====<br />
<br />
kscreen のローカルの設定は {{ic|xorg.conf}} にあるスクリーン解像度の設定を上書きすることがあります。{{ic|~/.local/share/kscreen/}} から kscreen の設定ファイルを見つけて、モニタによってサポートされない解像度が設定されていないか調べてください。<br />
<br />
==== システムトレイのアイコンがぼやける ====<br />
<br />
アイコンをトレイに追加するためにアプリケーションはしばしば appindicator ライブラリを使用します。アイコンがぼやける場合、どのバージョンの libappindicator をインストールしているか調べてください。もし {{Pkg|libappindicator-gtk2}} しかインストールしていない場合、{{Pkg|libappindicator-gtk3}} をインストールしてアイコンがはっきり表示されるか試してください。<br />
<br />
==== 仮想マシンの中で実行するとスクリーンの解像度を変更できない ====<br />
<br />
Plasma を [[VMware]] や [[VirtualBox]]、[[QEMU]] 仮想マシンの中で実行すると、kscreen はゲストのスクリーン解像度を 800x600 より高く変更できない場合があります。<br />
<br />
回避策は {{man|5|xorg.conf.d}} 内の {{ic|PreferredMode}} オプションをセットすることです。あるいは、VM で異なるグラフィックアダプタを使用してみてください (例えば、VirtualBox では VMSVGA ではなく VBoxSVGA、QEMU では QXL ではなく Virtio)。詳細は [https://bugs.kde.org/show_bug.cgi?id=407058 KDE Bug 407058] を見てください。<br />
<br />
==== Dolphin や Kate などを開くのに長い時間がかかる ====<br />
<br />
ユーザディレクトリ ({{ic|Documents}} や {{ic|Downloads}} など) が読み取り専用になっていないか調べてください。<br />
<br />
==== Spectacle のスクリーンショットでスクリーンの古い状態が使われてしまう ====<br />
<br />
''KDE システム設定 > ディスプレイとモニタ > コンポジタ'' で、''ウィンドウのサムネイルを保つ'' を ''表示されているウィンドウのみ'' から ''しない'' に変更してください。Intel graphics を使用している場合は、{{Pkg|xf86-video-intel}} が[[Intel graphics#インストール|インストールされていない]]ことを確認してください。<br />
<br />
=== サウンド関連の問題 ===<br />
<br />
{{Note|始めに {{pkg|alsa-utils}} がインストールされているか確認してください。}}<br />
<br />
==== サスペンド後に音声が鳴らない ====<br />
<br />
サスペンド後に音声がならない場合や、KMix がオーディオデバイスを表示表示しない場合は、plasmashell と pulseaudio を再起動することで問題が解決するかもしれません:<br />
<br />
$ killall plasmashell<br />
$ systemctl --user restart pulseaudio.service<br />
$ plasmashell<br />
<br />
音声を再び鳴らすために一部のアプリケーションも再起動する必要がある場合があります。<br />
<br />
==== GStreamer Phonon バックエンドを使っているときに MP3 ファイルを再生できない ====<br />
<br />
GStreamer の libav プラグイン ({{Pkg|gst-libav}} パッケージ) をインストールすることで解決できます。それでも再生できないときは、{{AUR|phonon-qt4-vlc}} や {{Pkg|phonon-qt5-vlc}} など他のバックエンドをインストールして、利用する Phonon バックエンドを変更してみて下さい。<br />
<br />
バックエンドを変えるには: ''KDE システム設定 > Multimedia > Audio and Video > Backend''。<br />
<br />
設定が表示されない場合は {{ic|phononsettings}} をターミナルから実行してみてください。<br />
<br />
==== トレイに音量調節アイコンが無く、ファンクションキーで音量を調整できない ====<br />
<br />
{{Pkg|plasma-pa}} がインストールされていることを確認してください。<br />
<br />
==== しばらくすると音が出なくなる ====<br />
<br />
{{ic|journalctl -p4 -t pulseaudio}} の出力に {{ic|Failed to create sink input: sink is suspended}} というエントリが含まれている場合、{{ic|/etc/pulse/default.pa}} 内の以下の行をコメントアウトしてみてください:<br />
<br />
#load-module module-suspend-on-idle<br />
<br />
問題が続く場合、{{Pkg|plasma-meta}} か {{Grp|plasma}} が {{Pkg|wireplumber}} と一緒に {{Pkg|pulseaudio}} をインストールしたのかもしれません。この問題を解決するには、{{Pkg|pulseaudio}} を {{Pkg|pipewire-pulse}} に置き換えてください。{{Pkg|pulseaudio}} を使いたい場合は、{{Pkg|wireplumber}} を {{Pkg|pipewire-media-session}} に置き換えてください。詳細は [[PipeWire#PulseAudio クライアント]] と[https://bbs.archlinux.org/viewtopic.php?id=276308 このフォーラムのスレッド]を参照してください。<br />
<br />
=== 電源管理 ===<br />
<br />
==== サスペンドやハイバネートのオプションが使えない ====<br />
<br />
[[systemd]] を使用してサスペンドあるいはハイバネートできるのに、KDE にそれらオプションが表示されない場合、{{Pkg|powerdevil}} をインストールしていることを確認してください。<br />
<br />
==== 電源プロファイルオプションが無い ====<br />
<br />
{{Pkg|powerdevil}} と {{Pkg|power-profiles-daemon}} が[[インストール]]されていることを確認してください。<br />
<br />
''powerprofilesctl'' を実行し、ドライバをチェックしてください。{{ic|intel_pstate}} か {{ic|amd_pstate}} が使用されている場合、問題ありません。そうでない場合、これらのドライバを有効化する方法を [[CPU 周波数スケーリング#スケーリングドライバ]] で確認してください。<br />
<br />
=== KMail ===<br />
<br />
==== Akonadi の設定を削除して KMail を修復する ====<br />
<br />
詳細は [https://userbase.kde.org/KMail/FAQs_Hints_and_Tips#Clean_start_after_a_failed_migration] を見てください。<br />
<br />
バックアップを取りたい場合は以下の設定ディレクトリをコピーしてください:<br />
<br />
$ cp -a ~/.local/share/akonadi ~/.local/share/akonadi-old<br />
$ cp -a ~/.config/akonadi ~/.config/akonadi-old<br />
<br />
==== KMail の IMAP 受信ボックスが空 ====<br />
<br />
一部の IMAP アカウントで KMail はアカウントの他のすべてのフォルダーを内部に入れた状態で IMAP 受信ボックスをトップレベルのコンテナとして表示します(なのでメッセージを読むことができなくなります)[https://bugs.kde.org/show_bug.cgi?id=284172]。この問題を解決するには、単に KMail のアカウント設定でサーバー側の購読を無効化してください。<br />
<br />
==== KMail で EWS アカウントの認証エラー ====<br />
<br />
KMail で EWS アカウントをセットアップするときに、有効な認証情報であるにも関わらず、認証失敗に関するエラーが発生し続けることがあります。原因は [[KWallet]] と KMail との間で通信に失敗しているからである可能性が高いです。この問題の回避策は qdbus を通してパスワードを設定することです:<br />
<br />
$ qdbus org.freedesktop.Akonadi.Resource.akonadi_ews_resource_0 /Settings org.kde.Akonadi.Ews.Wallet.setPassword "XXX"<br />
<br />
=== Journal に QXcbConnection / kscreen.xcb.helper のログが大量に出力される ===<br />
<br />
[[Qt#Qt の journal ログの動作を無効化/変更する]] を参照してください。<br />
<br />
=== i3/fvwm/awesome で KF5/Qt5 アプリケーションのアイコンが表示されない ===<br />
<br />
[[Qt#KDE Plasma 以外の環境での Qt 5 アプリケーションの設定]] を参照してください。<br />
<br />
=== 認証情報の保存に関する問題と KWallet ダイアログが何度も開く問題 ===<br />
<br />
WiFi のパスフレーズなどの認証情報をユーザごとに暗号化して保存するのに必要なので、ユーザ設定で [[KWallet]] のパスワード保存システムをオフにすることは推奨されません。KWallet のダイアログが何度も開くのは KWallet がオフになっているからかもしれません。<br />
<br />
アプリケーションがアクセスするたびに KWallet をアンロックするダイアログが表示されるのが鬱陶しい場合、[[ディスプレイマネージャ]] の [[SDDM]] と [[LightDM]] に KWallet をログイン時に自動的にアンロックさせることができます。[[KDE Wallet#ログイン時に KDE ウォレットを自動的にアンロック]] を見てください。システムプログラムの認証情報に使用できるように、最初のウォレットは (ユーザではなく) KWallet によって生成される必要があります。<br />
<br />
すべてのアプリケーションでウォレットの認証情報をメモリ上で開かないようにしたい場合、KWallet の設定で {{Pkg|kwalletmanager}} を使ってアプリケーションのアクセスを制限することができます。<br />
<br />
認証情報の暗号化について全く気にしない場合は、ウォレット作成時に表示される KWallet のパスワード入力欄を空欄にすることができます。この場合、アプリケーションはウォレットをアンロックせずにパスワードにアクセスできます。<br />
<br />
=== Discover がアプリケーションを表示しない ===<br />
<br />
Plasma/Qt のバージョンに応じて {{Pkg|packagekit-qt6}} か {{Pkg|packagekit-qt5}} のどちらかをインストールすれば解決します。<br />
<br />
{{Warning|あるパッケージメンテナが [https://github.com/archlinux/archinstall/issues/1321#issuecomment-1151343223 GitHub のコメント]で説明している通り、packagekit によるシステムパッケージ管理は、メンテナンス頻度の高いローリングリリースのディストリビューションと基本的に互換性がありません。Arch Linux では、ユーザが pacman のログを読んだり、再起動する前に pacnew ファイルをマージしたりすることに注意を払わないと、アップデートによりシステムが起動不能か使用不能な状態になってしまうかもしれないからです。}}<br />
<br />
=== Discover が Arch のリポジトリのアップデートを表示しなくなった ===<br />
<br />
時々、Discover は PackageKit の aplm のロックを解除しません。ロックを開放するには、{{ic|/var/lib/PackageKit/alpm/db.lck}} を削除してください。Discover の "Refresh" を使えば、アップデートが表示されるはずです (もし、アップデートがあれば)。<br />
<br />
=== NVIDIA ドライバ使用時に kscreenlocker_greet の CPU 使用率が高くなる ===<br />
<br />
[https://bugs.kde.org/show_bug.cgi?id=347772 KDE Bug 347772] で述べられているように、NVIDIA OpenGL ドライバと QML は Qt 5 と相性が悪いです。これにより、セッションをアンロックした後に {{ic|kscreenlocker_greet}} の CPU 使用率が高くなります。この問題の回避策は {{ic|QSG_RENDERER_LOOP}} [[環境変数]]を {{ic|basic}} に設定することです。<br />
<br />
その後、{{ic|killall kscreenlocker_greet}} を実行して前の greeter のインスタンスを kill してください。<br />
<br />
=== ZFS 上で Akonadi を実行中に OS エラー 22 ===<br />
<br />
ホームディレクトリが [[ZFS]] プール上にある場合、{{ic|~/.config/akonadi/mysql-local.conf}} ファイルを以下の内容で作成してください:<br />
<br />
[mysqld]<br />
innodb_use_native_aio = 0<br />
<br />
[[MariaDB# ZFS での実行時に OS エラー 22]] を見てください。<br />
<br />
=== ウインドウが非アクティブのときにスクロールできないプログラムがある ===<br />
<br />
これは GTK3 のマウススクロールイベントに対する処理に問題があることにより発生します。回避策は[[環境変数]] {{ic|1=GDK_CORE_DEVICE_EVENTS=1}} を設定することです。しかし、この回避策はタッチパッドの滑らかなスクロールとタッチスクリーンのスクロールの機能を破壊します。<br />
<br />
=== TeamViewer の動作が遅い ===<br />
<br />
TeamViewer の使用時に、滑らかなアニメーション(ウインドウの最小化など)を使用している場合、動作が遅くなることがあります。回避策として [[#コンポジットの無効化]] を見てください。<br />
<br />
=== Kmail、Kontact、そして Wayland ===<br />
<br />
しばしば、最小化して復元したときに KMail が応答しなくなり、黒いメッセージビュアーや似たようなものが表示されることがあります。[[環境変数]] {{ic|1=QT_QPA_PLATFORM="xcb;wayland"}} を設定することでこの問題を回避できるかもしれません。[https://bugs.kde.org/show_bug.cgi?id=397825 KDE Bug 397825] を見てください。<br />
<br />
=== ウィジェットのアンロック (Plasma ≥ 5.18) ===<br />
<br />
一度ウィジェットをロックすると、再びアンロックできないできないことに気がつくでしょう。<br />
以下のコマンドを実行してください:<br />
<br />
$ qdbus org.kde.plasmashell /PlasmaShell evaluateScript "lockCorona(false)"<br />
<br />
新しい {{ic|Customize Layout}} ではロックする必要はありませんが、もししたい場合は:<br />
<br />
$ qdbus org.kde.plasmashell /PlasmaShell evaluateScript "lockCorona(true)"<br />
<br />
=== KIO が URL を違うプログラムで開いてしまう ===<br />
<br />
HTML や PHP などのファイル関連付けを調べてください。そして、それらをブラウザに関連付けてください。KIO のキャッシュファイルは {{ic|$HOME/.cache/kioexec}} にあります。[[xdg-utils#URL スキームハンドラー]] も参照してください。<br />
<br />
=== KDE システム設定のショートカットにカスタムショートカットのタブがない ===<br />
<br />
これは {{Pkg|khotkeys}}{{Broken package link|package not found}} パッケージが存在しないことが原因です。このパッケージをインストールして、KDE システム設定のアプリケーションを再起動すると変更が適用されます。<br />
<br />
=== サスペンドやハイバネートする前にスクリーンをロックする ===<br />
<br />
KDE システム設定には、スリープからの復帰後に自動的にスクリーンをロックする設定があります。[https://www.reddit.com/r/kde/comments/obnpeb/how_to_lock_system_before_suspend/ 一部のユーザ]は、復帰時にスクリーンがロックする前に一瞬表示されると報告しています。サスペンド前に KDE にスクリーンをロックさせるには、以下のファイルを root ユーザとして作成して、{{man|1|systemd}} にフックを作成してください:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/lock_before_suspend.sh|2=<br />
#!/bin/bash<br />
<br />
case $1/$2 in<br />
pre/*)<br />
case $2 in<br />
suspend{{!}}hibernate)<br />
loginctl lock-session<br />
sleep 1<br />
;;<br />
esac<br />
;;<br />
esac<br />
}}<br />
<br />
コード中の ''sleep'' は、デバイスがサスペンドに移行する前に lock-session を完了させるために必要です。これより低い値ではいけません。<br />
<br />
このファイルを作成した後に、[[実行可能属性|実行可能にしてください]]。<br />
<br />
最後に、''KDE システム設定 > ワークスペースの挙動 > スクリーンロック'' を開いて、''スリープからの復帰時'' というチェックボックスがチェックされていることを確認してください。<br />
<br />
=== Wayland で X11 のショートカットが衝突する ===<br />
<br />
{{Pkg|freerdp}} のような一部の X11 ソフトウェアは、KDE 5.27 からキーボード入力を捕捉できます。[[VMware]] のような他のソフトウェアは、正しく捕捉できません。[https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml]<br />
<br />
[https://gitlab.freedesktop.org/xorg/xserver/-/issues/1332 Xserver] やコンポジタで捕捉を強制的に行うのは適切ではありません。[https://gitlab.gnome.org/GNOME/mutter/-/issues/1720] 以下のようなエレガントな方法でこれを解決できます:<br />
<br />
* ウィンドウのタイトルバーを右クリックする (例: VMware や Citrix)。<br />
* ''その他のアクション > ウィンドウ固有の設定...''<br />
* ''プロパティを追加...'' をクリックし、''グローバルショートカットを無視'' を選択する。<br />
* ''強制'' と ''はい'' を選択し、適用する。<br />
<br />
=== システムの設定を変更しても適用されない ===<br />
<br />
これは、"システム設定" がホームディレクトリ内の .config フォルダをアクセス/変更できない場合に発生することがあります。<br />
<br />
この問題を解決するには、このフォルダの所有者を変更する必要があります:<br />
<br />
# chown ''user'':''user'' /home/''user''/.config<br />
<br />
{{ic|''user''}} は、現在 KDE Plasma にログインしているユーザーの名前です。ホームディレクトリの名前がユーザー名と同じでない場合は、コマンドを適宜変更してください。<br />
<br />
これでも解決できない場合は、フォルダのパーミッションも変更する必要があるのかもしれません:<br />
<br />
# chmod 755 /home/''user''/.config<br />
<br />
== 参照 ==<br />
<br />
* [https://www.kde.org/ KDE ホームページ]<br />
* [https://dot.kde.org/ KDE ニュース]<br />
* [https://planet.kde.org/ KDE ブログ]<br />
* [https://discuss.kde.org/ KDE フォーラム]<br />
* [https://wiki.kde.org/ KDE Wiki]<br />
* [https://bugs.kde.org/ KDE バグトラッカーとリポーター]<br />
* [https://blog.martin-graesslin.com/blog/kategorien/kde/ Martin Graesslin のブログ]<br />
* [https://community.kde.org/Matrix KDE Matrix Rooms]<br />
<br />
{{TranslationStatus|KDE|2024-03-14|803114}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB&diff=36538
カーネル
2024-03-13T15:54:01Z
<p>AshMyzk: /* 再起動して root シェルに入り問題を修正する */ 修正 (ヘルプ:スタイル#ハイパーテキスト)</p>
<hr />
<div>[[Category:カーネル]]<br />
[[Category:ソフトウェア一覧]]<br />
[[bs:Kernel]]<br />
[[en:Kernel]]<br />
[[fr:Kernel]]<br />
[[pt:Kernel]]<br />
[[ru:Kernel]]<br />
[[zh-hans:Kernel]]<br />
{{Related articles start}}<br />
{{Related|カーネルモジュール}}<br />
{{Related|カーネルモジュールのコンパイル}}<br />
{{Related|sysctl}}<br />
{{Related articles end}}<br />
<br />
Wikipedia によると:<br />
:[[Wikipedia:ja:Linuxカーネル|Linux カーネル]]とは、モノリシックで Unix ライクなオープンソースのコンピュータ[[Wikipedia:ja:カーネル|オペレーティングシステムカーネル]]である。<br />
<br />
[[Arch Linux]] は Linux カーネルをベースにしています。Arch Linux では最新の安定版カーネルに加え、様々な代替 Linux カーネルを利用することができます。この記事では、リポジトリで利用可能な選択肢のいくつかを、それぞれの簡単な説明とともにリストアップしています。また、システムのカーネルに適用できるパッチについての説明もあります。記事の最後には、カスタムカーネルのコンパイルについての概要と、様々な方法へのリンクがあります。<br />
<br />
カーネルのパッケージは {{ic|/usr/lib/modules/}} に[[インストール]]されます。その後、パッケージは [[Wikipedia:ja:vmlinuz|vmlinuz]] 実行可能イメージを生成するために使用され、生成されたイメージは {{ic|/boot/}} へ保存されます。[https://archlinux.org/news/new-kernel-packages-and-mkinitcpio-hooks/] 異なるカーネルをインストールしたり、複数のカーネルを切り替えたりする場合は、変更を反映させるために[[ブートローダー]]を設定しなければなりません。<br />
<br />
== 公式サポートカーネル ==<br />
<br />
公式にサポートされているカーネルについては、[https://bbs.archlinux.org/viewforum.php?id=22 フォーラム]でのコミュニティサポートと[[バグ報告ガイドライン|バグレポート]]を利用できます。<br />
<br />
* {{App|Stable|いくつかのパッチを適用したバニラな Linux カーネル。|https://www.kernel.org/|{{Pkg|linux}}}}<br />
* {{App|Hardened|カーネルおよびユーザ空間の脆弱性を緩和するための一連の堅牢化パッチを適用した、セキュリティ特化の Linux カーネルです。また、{{Pkg|linux}} よりも多くの上流のカーネル堅牢化機能を有効にします。|https://github.com/anthraxx/linux-hardened|{{Pkg|linux-hardened}}}}<br />
* {{App|Longterm|長期サポート (LTS) Linux カーネルおよびモジュール。|https://www.kernel.org/|{{Pkg|linux-lts}}}}<br />
* {{App|[[リアルタイムカーネル]]|IngoMolnar が率いるコア開発者の小グループによって維持されています。このパッチを使用すると、コードのいくつかの非常に小さな領域("raw_spinlock クリティカル領域")を除いて、ほぼすべてのカーネルをプリエンプトできます。これは、ほとんどのカーネルスピンロックを優先度継承をサポートするミューテックスに置き換え、すべての割り込みとソフトウェア割り込みをカーネルスレッドに移動することによって行われます。|https://wiki.linuxfoundation.org/realtime/start|{{Pkg|linux-rt}}, {{Pkg|linux-rt-lts}}}}<br />
* {{App|Zen Kernel|カーネルハッカーの共同作業により、日常的なシステムに最適な Linux カーネルです。より詳細な情報は [https://github.com/zen-kernel/zen-kernel/wiki/FAQ FAQ] と [https://github.com/zen-kernel/zen-kernel/wiki/Detailed-Feature-List Detailed Feature List] を参照してください。|https://github.com/zen-kernel/zen-kernel|{{Pkg|linux-zen}}}}<br />
<br />
== コンパイル ==<br />
<br />
次の方法を使って、独自のカーネルをコンパイルできます。<br />
<br />
; [[カーネル/Arch build system|Arch Build System]]: 既存の {{Pkg|linux}} [[PKGBUILD]] の高い品質と[[Wikipedia:Package management system|パッケージ管理]]の利点を生かします。<br />
; [[カーネル/伝統的なコンパイル方法|伝統的な方法]]: 手動でソースの tarball をダウンロードし、ホームディレクトリで通常のユーザーとしてコンパイルする必要があります。<br />
<br />
{{Warning|<br />
* カスタムカーネルを使用すると、データの損失など、あらゆる種類の安定性と信頼性の問題が発生する可能性があります。[[バックアップ]]をとることを強くお勧めします。<br />
* Arch Linux は [[#公式サポートカーネル]]のみを公式にサポートしています。別のカーネルを使用する場合は、サポートリクエストにその旨を記載してください。}}<br />
<br />
{{Tip|<br />
* システムの速度を上げる最良の方法は、まず、カーネルの設定をアーキテクチャやプロセッサの種類に合わせることです。<br />
* 自分が持っていないもの、使っていないもののサポートを含まないようにすることで、カーネルのサイズ (つまりビルド時間) を小さくすることができます。例えば、Bluetooth、video4linux、1000Mbit イーサネットなどのサポートです。<br />
<br />
Arch のカーネルパッケージ設定ファイルは Arch のパッケージのソースファイルに含まれています。例えば {{Pkg|linux}} の場合 [https://gitlab.archlinux.org/archlinux/packaging/packages/linux] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの {{ic|/proc/config.gz}} に存在します (カーネルオプションの {{ic|CONFIG_IKCONFIG_PROC}} が有効になっている場合。)}}<br />
<br />
リストにあるパッケージの中には、[[非公式ユーザーリポジトリ]]からバイナリパッケージを入手できるものもあります。<br />
<br />
=== kernel.org カーネル ===<br />
<br />
* {{App|Git|Linus Torvalds の git リポジトリから得たソースを使ってビルドする Linux カーネルとモジュール。|https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git|{{AUR|linux-git}}}}<br />
* {{App|Mainline|すべての新機能が導入されるカーネル、2〜3ヶ月ごとにリリースされます。|https://www.kernel.org/|{{AUR|linux-mainline}}}}<br />
*{{App|Next|次の Mainline リリースにマージされる予定の機能を持つ最先端のカーネル。|https://www.kernel.org/doc/man-pages/linux-next.html|{{AUR|linux-next-git}}}}<br />
* {{App|DRM|最先端の GPU ドライバ付き Linux カーネル。|https://cgit.freedesktop.org/drm/|{{AUR|linux-drm-tip-git}}, {{AUR|linux-drm-next-git}}}}<br />
* {{App|Longterm 4.19|長期サポート (LTS) Linux 4.19 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts419}}}}<br />
* {{App|Longterm 5.4|長期サポート (LTS) Linux 5.4 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts54}}}}<br />
* {{App|Longterm 5.10|長期サポート (LTS) Linux 5.10 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts510}}}}<br />
* {{App|Longterm 5.15|長期サポート (LTS) Linux 5.15 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts515}}}}<br />
* {{App|Longterm 6.1|長期サポート (LTS) Linux 6.1 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts61}}}}<br />
<br />
=== 非公式カーネル ===<br />
<br />
* {{App|[[Linux-ck|Ck]]|デスクトップに特に重点を置いてシステムの応答性を向上させるように設計された Con Kolivas (MuQSS scheduler を含む) によるパッチが含まれていますが、どのような使用目的でも問題なく使えます。|http://ck.kolivas.org/|{{AUR|linux-ck}}}}<br />
* {{App|Clear|Intel の Clear Linux プロジェクトからのパッチ、パフォーマンスとセキュリティの最適化を提供します。|https://github.com/clearlinux-pkgs/linux|{{AUR|linux-clear}}}}<br />
* {{App|[[Wikipedia:Linux-libre|Libre]]|[[Wikipedia:ja:難読化 (ソフトウェア)|難読化された]]デバイスドライバや[[Wikipedia:ja:バイナリ・ブロブ|プロプライエタリ]]のデバイスドライバーを使用しません。|https://www.fsfla.org/ikiwiki/selibre/linux-libre/|{{AUR|linux-libre}}}}<br />
* {{App|Liquorix|Debian をターゲットとした設定と Zen カーネルソースを使用して構築されたカーネル代替品。デスクトップ、マルチメディア、ゲームなどのワークロード向けに設計されており、Debian Linux の性能代替カーネルとしてよく利用されます。Liquorix パッチセットのメンテナである Damentz は、同様に Zen パッチセットの開発者でもあります。|https://liquorix.net|{{AUR|linux-lqx}}}}<br />
* {{App|pf-kernel|カーネルメインラインにマージされない、ほんの少しの素晴らしい機能を提供します。カーネルエンジニアによって管理されています。新しいカーネルのための含まれるパッチのポートが公式にリリースされていない場合、パッチセットは新しいカーネルへのパッチポートを提供し、サポートします。linux-pf の現在の最も代表的なパッチは、UKSM、DDCCI、v4l2loopback、そして BBRv3 です。|https://pfkernel.natalenko.name|パッケージ:}}<br />
:* [[非公式ユーザーリポジトリ#post-factum kernels|リポジトリ]]: pf-kernel の開発者 [https://aur.archlinux.org/account/post-factum post-factum] による {{AUR|linux-pf}}<br />
* {{App|Project C|Alfred Chen 氏の Project C パッチセット (BMQ スケジューラと PDS スケジューラ) を当てたカーネル。|https://gitlab.com/alfredchen/projectc|{{AUR|linux-prjc}}}}<br />
* {{App|Nitrous|Skylake 及びそれ以降に対して最適化された修正版 Linux カーネル。|https://gitlab.com/xdevs23/linux-nitrous|{{AUR|linux-nitrous}}}}<br />
* {{App|tkg|デスクトップやゲームのパフォーマンスを向上させるためのパッチや調整を提供する、高度にカスタマイズ可能なカーネルビルドシステム。Etienne Juvigny によってメンテナンスされています。他のパッチの中で、様々な CPU スケージューラを提供しています: CFS、Project C PDS、Project C BMQ、MuQSS、CacULE。|https://github.com/Frogging-Family/linux-tkg|[[非公式ユーザーリポジトリ#chaotic-aur|chaotic-aur]] リポジトリで利用可能}}<br />
* {{App|VFIO|Alex Williamson によって作成されたいくつかのパッチ(acs オーバーライドおよび i915)により、一部のマシンで KVM を使用して PCI パススルーを実行できるようになります。|https://lwn.net/Articles/499240/|{{AUR|linux-vfio}}, {{AUR|linux-vfio-lts}}}}<br />
* {{App|XanMod|高性能ワークステーション、ゲーミングデスクトップ、メディアセンターなどで最大限に活用されることを目指し、より強固で応答性の高い、スムーズなデスクトップ体験を提供するために構築されています。このカーネルでは、BFQ I/O スケジューラ、[https://github.com/google/bbr/tree/v3 TCP BBRv3] 輻輳制御、x86_64 高度命令セットのサポート、部分的な Clear Linux パッチセットが使用されており、また一部のデフォルトも変更されています。|https://xanmod.org/|{{AUR|linux-xanmod}}, {{AUR|linux-xanmod-lts}}, {{AUR|linux-xanmod-rt}}, {{AUR|linux-xanmod-bore}}}}<br />
<br />
== トラブルシューティング ==<br />
<br />
=== カーネルパニック ===<br />
<br />
Linux カーネルが回復不能な障害状態になると、''カーネルパニック''が発生します。典型的にこの状態はバグのあるハードウェアドライバーが原因で、マシンがデッドロック状態になり、応答しなくなり、再起動が必要になります。デッドロックの直前に、診断メッセージが生成されます。これは、障害が発生したときの''マシン状態''、障害を検出したカーネルの関数までの ''呼び出しトレース''、および現在ロードされているモジュールのリストです。ありがたいことに、カーネルのメインラインバージョン (公式リポジトリで提供されているものなど) を使用してカーネルパニックが発生することはあまりありませんが、発生した場合に備えて対処方法を知る必要があります。<br />
<br />
{{Note|カーネルパニックは、''oops'' または''カーネル oops'' と呼ばれることもあります。パニックと oops は両方とも障害状態の結果として発生するものですが、oops はより一般的なものであり、必ずしもマシンがデッドロックするわけではありません。問題のあるタスクを強制終了して実行を継続することで、カーネルが oops から回復できる場合があります。}}<br />
<br />
{{Tip|回復可能な oops で代わりにパニックを発生させることを強制するには、カーネルパラメータ {{ic|1=oops=panic}} を起動時に渡すか、{{ic|/proc/sys/kernel/panic_on_oops}} に {{ic|1}} を書き込んでください。oops リカバリによってシステムが不安定になり将来のエラーの診断が困難になることを懸念しているのであれば、これは推奨される方法です。}}<br />
<br />
==== パニックメッセージの検証 ====<br />
<br />
カーネルパニックがブートプロセスの非常に早い段階で発生する場合、コンソール上に "Kernel panic - not syncing:" というメッセージが表示されることがありますが、[[Systemd]] が実行し始めると、通常カーネルメッセージはキャプチャされシステムのログに書き込まれます。しかし、パニックが発生した際には、カーネルによる診断メッセージ出力は''ほとんどの場合''ディスク上のログファイルに書き込まれません。{{ic|system-journald}} がメッセージを取得・記録する前にマシンがデッドロックしてしまうからです。なので、パニックメッセージを検証する唯一の手段は、(''kdump crashkernel'' を設定することなく)パニックの発生時にメッセージをコンソール上で見ることです。以下のカーネルパラメータを渡して起動し、tty1 でパニックの再現を試みてください:<br />
<br />
systemd.journald.forward_to_console=1 console=tty1<br />
<br />
{{Tip|パニックメッセージが速くスクロールしすぎて検証できない場合、起動時にカーネルパラメータ {{ic|1=pause_on_oops=''秒数''}} を渡してみてください。}}<br />
<br />
===== 例: 不良モジュール =====<br />
<br />
診断メッセージの情報を使って、何のサブシステムやモジュールがパニックを引き起こしているかを推測できます。この例では、とある架空のマシンで起動中にパニックが発生してしまいました。'''太字'''で強調した行に注目してください。<br />
<br />
{{bc|'''kernel: BUG: unable to handle kernel NULL pointer dereference at (null)''' <sup>1</sup><br />
'''kernel: IP: fw_core_init+0x18/0x1000 [firewire_core]''' <sup>2</sup><br />
kernel: PGD 718d00067<br />
kernel: P4D 718d00067<br />
kernel: PUD 7b3611067<br />
kernel: PMD 0<br />
kernel:<br />
kernel: Oops: 0002 [#1] PREEMPT SMP<br />
'''kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ...''' <sup>3</sup><br />
kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1<br />
kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014<br />
kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000<br />
kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core]<br />
kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246<br />
kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000<br />
kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4<br />
kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95<br />
kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000<br />
kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840<br />
kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000<br />
kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br />
kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0<br />
kernel: Call Trace:<br />
'''kernel: do_one_initcall+0x50/0x190''' <sup>4</sup><br />
kernel: ? do_init_module+0x27/0x1f2<br />
kernel: do_init_module+0x5f/0x1f2<br />
kernel: load_module+0x23f3/0x2be0<br />
kernel: SYSC_init_module+0x16b/0x1a0<br />
kernel: ? SYSC_init_module+0x16b/0x1a0<br />
kernel: SyS_init_module+0xe/0x10<br />
kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5<br />
kernel: RIP: 0033:0x7f301f3a2a0a<br />
kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af<br />
kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a<br />
kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010<br />
kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085<br />
kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208<br />
kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030<br />
kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48<br />
kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68<br />
kernel: CR2: 0000000000000000<br />
kernel: ---[ end trace 71f4306ea1238f17 ]---<br />
'''kernel: Kernel panic - not syncing: Fatal exception''' <sup>5</sup><br />
kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff<br />
kernel: ---[ end Kernel panic - not syncing: Fatal exception}}<br />
<br />
# パニックを引き起こしたエラーの種類を示しています。この場合、プログラマのバグです。<br />
# モジュール ''firewire_core'' 内の ''fw_core_init'' という関数でパニックが発生したことを示しています。<br />
# ''firewire_core'' は最後にロードされたモジュールであることを示しています。<br />
# ''fw_core_init'' 関数を呼んだ関数は ''do_one_initcall'' であったことを示しています。<br />
# この ''oops'' メッセージが実際にカーネルパニックであり、システムがデッドロックしていることを示しています。<br />
<br />
以上のメッセージにより、''firewire_core'' モジュールがロードされたときの初期ルーチン中にパニックが発生したということを推測できます。(マシンのファームウェアハードウェアは、プログラマのエラーによりこのバージョンのファームウェアドライバモジュールと互換性が無いかもしれないことが推測でき、新しいリリースを待つ必要があることになります。) その間、マシンを再び走らせる最も簡単な方法は、モジュールがロードされないようにすることです。以下の方法のうち1つを取ってください:<br />
<br />
* モジュールが ''initramfs'' の実行中にロードされる場合、[[カーネルパラメータ]] {{ic|1=rd.blacklist=firewire_core}} を設定して再起動してください。<br />
* それ以外の場合、カーネルパラメータ {{ic|1=module_blacklist=firewire_core}} を設定して再起動してください。<br />
<br />
==== 再起動して root シェルに入り問題を修正する ====<br />
<br />
{{Out of date|[https://gitlab.archlinux.org/archlinux/packaging/packages/systemd/-/commit/292cdf8a2f7dd7c6c7d91d2b59617391935c837c initramfs の root アカウントはロックされているため]、{{ic|rd.rescue}} と {{ic|rd.emergency}} は動作しません。}}<br />
<br />
{{Accuracy|{{ic|rd.emergency}} ではキーボードは動作しないため、使用できません。}}<br />
<br />
システムに変更を加えてパニックが起こらないようにするには、root シェルが必要です。パニックが起動時に発生する場合、マシンがデッドロックする前に root シェルに入るための戦略が複数あります:<br />
<br />
* カーネルパラメータ {{ic|emergency}} か {{ic|rd.emergency}} か {{ic|-b}} を設定して再起動する。これで、root ファイルシステムがマウントされて {{ic|systemd}} が起動した直後にログインプロンプトが表示されます。<br />
: {{Note|この時点では、root ファイルシステムは'''読み取り専用'''でマウントされます。ファイルシステムに変更を加えるには、{{ic|mount -o remount,rw /}} を root ユーザとして実行してください。}}<br />
* カーネルパラメータ {{ic|rescue}}、{{ic|rd.rescue}}、{{ic|single}}、{{ic|s}}、{{ic|S}}、{{ic|1}} のどれか設定して再起動する。これで、ローカルのファイルシステムがマウントされた直後にログインプロンプトが表示されます。<br />
* カーネルパラメータ {{ic|1=systemd.debug_shell}} を設定して再起動する。これで、非常に初期の root シェルが tty9 で表示されます。{{ic|Ctrl+Alt+F9}} を押してそのシェルに切り替えてください。<br />
* パニックを引き起こしているカーネルの機能を無効化するために、異なるカーネルパラメータの組で再起動して実験する。"定番" の {{ic|1=acpi=off}} と {{ic|nolapic}} を試してみてください。<br />
: {{Tip|すべてのカーネルパラメータは [https://docs.kernel.org/admin-guide/kernel-parameters.html kernel-parameters.html] を参照して下さい。}}<br />
* 最後の手段として、[[インストールガイド#インストールメディアの準備|Arch Linux インストールメディア]]を起動し、ルートファイルシステムを {{ic|/mnt}} にマウントし、{{ic|arch-chroot /mnt}} を root ユーザとして実行する。<br />
* パニックを引き起こしているサービスやプログラムを無効化する。不具合のあるアップデートをロールバックする。設定の問題を修正する。<br />
<br />
{{Tip|[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]イメージが破損している場合、新しいイメージを生成する必要があるかもしれません。イメージの破損は、カーネルアップデートが中断された場合に起こる可能性があります。新しいイメージを作成する方法は、[[mkinitcpio#イメージ作成とアクティベーション]] を参照してください。}}<br />
<br />
=== リグレッションをデバッグする ===<br />
<br />
[[一般的なトラブルシューティング#リグレッションをデバッグする]] を参照してください。<br />
<br />
{{AUR|linux-mainline}} を試して、その問題が既に上流で修正されているかどうかを確認してください。ピン留めされたコメントは既にビルドされたカーネルを含むリポジトリにも言及しているので、時間がかかる手動でのビルドは必要ないかもしれません。<br />
<br />
最近発生しなかった問題をデバッグするために LTS カーネル ({{Pkg|linux-lts}}) を試してみることも検討する価値があるかもしれません。LTS カーネルの古いバージョンは [[Arch Linux Archive]] で見つけることができます。<br />
<br />
それでも問題が解決しないときは、{{AUR|linux-git}} を [[bisect]] してください。そして、[https://bugzilla.kernel.org/ kernel bugzilla] でバグを報告してください。パッチと関係ないことを確認するために、パッチなしの "バニラ"バージョンを試すことが重要です。もしパッチが問題を引き起こすなら、そのパッチの作者に報告してください。<br />
<br />
{{Note|カーネルの bisect は何度も作り直さなければならないので、かなりの時間がかかるかもしれません。}}<br />
<br />
==== より小さなカーネルを構築する ====<br />
<br />
[[modprobed-db]] か {{ic|make localmodconfig}} を使って、ローカルシステムに必要なモジュールだけをビルドしたり、によってカーネルビルド時間を短縮したりできます。もちろん、ネットワークの問題をデバッグするために、サウンドドライバなど、無関係なドライバを完全に削除することも可能です。<br />
<br />
== 参照 ==<br />
<br />
* [http://www.kroah.com/lkn/ O'Reilly - Linux Kernel in a Nutshell] (フリーの電子書籍)<br />
* [http://kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/ What stable kernel should I use?] by Greg Kroah-Hartman<br />
* [https://docs.kernel.org/index.html Linux カーネルのドキュメント]<br />
<br />
{{TranslationStatus|Kernel|2024-02-22|800238}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB&diff=36537
カーネル
2024-03-13T15:44:49Z
<p>AshMyzk: /* リグレッションしてデバッグする */ セクション名を修正</p>
<hr />
<div>[[Category:カーネル]]<br />
[[Category:ソフトウェア一覧]]<br />
[[bs:Kernel]]<br />
[[en:Kernel]]<br />
[[fr:Kernel]]<br />
[[pt:Kernel]]<br />
[[ru:Kernel]]<br />
[[zh-hans:Kernel]]<br />
{{Related articles start}}<br />
{{Related|カーネルモジュール}}<br />
{{Related|カーネルモジュールのコンパイル}}<br />
{{Related|sysctl}}<br />
{{Related articles end}}<br />
<br />
Wikipedia によると:<br />
:[[Wikipedia:ja:Linuxカーネル|Linux カーネル]]とは、モノリシックで Unix ライクなオープンソースのコンピュータ[[Wikipedia:ja:カーネル|オペレーティングシステムカーネル]]である。<br />
<br />
[[Arch Linux]] は Linux カーネルをベースにしています。Arch Linux では最新の安定版カーネルに加え、様々な代替 Linux カーネルを利用することができます。この記事では、リポジトリで利用可能な選択肢のいくつかを、それぞれの簡単な説明とともにリストアップしています。また、システムのカーネルに適用できるパッチについての説明もあります。記事の最後には、カスタムカーネルのコンパイルについての概要と、様々な方法へのリンクがあります。<br />
<br />
カーネルのパッケージは {{ic|/usr/lib/modules/}} に[[インストール]]されます。その後、パッケージは [[Wikipedia:ja:vmlinuz|vmlinuz]] 実行可能イメージを生成するために使用され、生成されたイメージは {{ic|/boot/}} へ保存されます。[https://archlinux.org/news/new-kernel-packages-and-mkinitcpio-hooks/] 異なるカーネルをインストールしたり、複数のカーネルを切り替えたりする場合は、変更を反映させるために[[ブートローダー]]を設定しなければなりません。<br />
<br />
== 公式サポートカーネル ==<br />
<br />
公式にサポートされているカーネルについては、[https://bbs.archlinux.org/viewforum.php?id=22 フォーラム]でのコミュニティサポートと[[バグ報告ガイドライン|バグレポート]]を利用できます。<br />
<br />
* {{App|Stable|いくつかのパッチを適用したバニラな Linux カーネル。|https://www.kernel.org/|{{Pkg|linux}}}}<br />
* {{App|Hardened|カーネルおよびユーザ空間の脆弱性を緩和するための一連の堅牢化パッチを適用した、セキュリティ特化の Linux カーネルです。また、{{Pkg|linux}} よりも多くの上流のカーネル堅牢化機能を有効にします。|https://github.com/anthraxx/linux-hardened|{{Pkg|linux-hardened}}}}<br />
* {{App|Longterm|長期サポート (LTS) Linux カーネルおよびモジュール。|https://www.kernel.org/|{{Pkg|linux-lts}}}}<br />
* {{App|[[リアルタイムカーネル]]|IngoMolnar が率いるコア開発者の小グループによって維持されています。このパッチを使用すると、コードのいくつかの非常に小さな領域("raw_spinlock クリティカル領域")を除いて、ほぼすべてのカーネルをプリエンプトできます。これは、ほとんどのカーネルスピンロックを優先度継承をサポートするミューテックスに置き換え、すべての割り込みとソフトウェア割り込みをカーネルスレッドに移動することによって行われます。|https://wiki.linuxfoundation.org/realtime/start|{{Pkg|linux-rt}}, {{Pkg|linux-rt-lts}}}}<br />
* {{App|Zen Kernel|カーネルハッカーの共同作業により、日常的なシステムに最適な Linux カーネルです。より詳細な情報は [https://github.com/zen-kernel/zen-kernel/wiki/FAQ FAQ] と [https://github.com/zen-kernel/zen-kernel/wiki/Detailed-Feature-List Detailed Feature List] を参照してください。|https://github.com/zen-kernel/zen-kernel|{{Pkg|linux-zen}}}}<br />
<br />
== コンパイル ==<br />
<br />
次の方法を使って、独自のカーネルをコンパイルできます。<br />
<br />
; [[カーネル/Arch build system|Arch Build System]]: 既存の {{Pkg|linux}} [[PKGBUILD]] の高い品質と[[Wikipedia:Package management system|パッケージ管理]]の利点を生かします。<br />
; [[カーネル/伝統的なコンパイル方法|伝統的な方法]]: 手動でソースの tarball をダウンロードし、ホームディレクトリで通常のユーザーとしてコンパイルする必要があります。<br />
<br />
{{Warning|<br />
* カスタムカーネルを使用すると、データの損失など、あらゆる種類の安定性と信頼性の問題が発生する可能性があります。[[バックアップ]]をとることを強くお勧めします。<br />
* Arch Linux は [[#公式サポートカーネル]]のみを公式にサポートしています。別のカーネルを使用する場合は、サポートリクエストにその旨を記載してください。}}<br />
<br />
{{Tip|<br />
* システムの速度を上げる最良の方法は、まず、カーネルの設定をアーキテクチャやプロセッサの種類に合わせることです。<br />
* 自分が持っていないもの、使っていないもののサポートを含まないようにすることで、カーネルのサイズ (つまりビルド時間) を小さくすることができます。例えば、Bluetooth、video4linux、1000Mbit イーサネットなどのサポートです。<br />
<br />
Arch のカーネルパッケージ設定ファイルは Arch のパッケージのソースファイルに含まれています。例えば {{Pkg|linux}} の場合 [https://gitlab.archlinux.org/archlinux/packaging/packages/linux] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの {{ic|/proc/config.gz}} に存在します (カーネルオプションの {{ic|CONFIG_IKCONFIG_PROC}} が有効になっている場合。)}}<br />
<br />
リストにあるパッケージの中には、[[非公式ユーザーリポジトリ]]からバイナリパッケージを入手できるものもあります。<br />
<br />
=== kernel.org カーネル ===<br />
<br />
* {{App|Git|Linus Torvalds の git リポジトリから得たソースを使ってビルドする Linux カーネルとモジュール。|https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git|{{AUR|linux-git}}}}<br />
* {{App|Mainline|すべての新機能が導入されるカーネル、2〜3ヶ月ごとにリリースされます。|https://www.kernel.org/|{{AUR|linux-mainline}}}}<br />
*{{App|Next|次の Mainline リリースにマージされる予定の機能を持つ最先端のカーネル。|https://www.kernel.org/doc/man-pages/linux-next.html|{{AUR|linux-next-git}}}}<br />
* {{App|DRM|最先端の GPU ドライバ付き Linux カーネル。|https://cgit.freedesktop.org/drm/|{{AUR|linux-drm-tip-git}}, {{AUR|linux-drm-next-git}}}}<br />
* {{App|Longterm 4.19|長期サポート (LTS) Linux 4.19 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts419}}}}<br />
* {{App|Longterm 5.4|長期サポート (LTS) Linux 5.4 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts54}}}}<br />
* {{App|Longterm 5.10|長期サポート (LTS) Linux 5.10 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts510}}}}<br />
* {{App|Longterm 5.15|長期サポート (LTS) Linux 5.15 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts515}}}}<br />
* {{App|Longterm 6.1|長期サポート (LTS) Linux 6.1 カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts61}}}}<br />
<br />
=== 非公式カーネル ===<br />
<br />
* {{App|[[Linux-ck|Ck]]|デスクトップに特に重点を置いてシステムの応答性を向上させるように設計された Con Kolivas (MuQSS scheduler を含む) によるパッチが含まれていますが、どのような使用目的でも問題なく使えます。|http://ck.kolivas.org/|{{AUR|linux-ck}}}}<br />
* {{App|Clear|Intel の Clear Linux プロジェクトからのパッチ、パフォーマンスとセキュリティの最適化を提供します。|https://github.com/clearlinux-pkgs/linux|{{AUR|linux-clear}}}}<br />
* {{App|[[Wikipedia:Linux-libre|Libre]]|[[Wikipedia:ja:難読化 (ソフトウェア)|難読化された]]デバイスドライバや[[Wikipedia:ja:バイナリ・ブロブ|プロプライエタリ]]のデバイスドライバーを使用しません。|https://www.fsfla.org/ikiwiki/selibre/linux-libre/|{{AUR|linux-libre}}}}<br />
* {{App|Liquorix|Debian をターゲットとした設定と Zen カーネルソースを使用して構築されたカーネル代替品。デスクトップ、マルチメディア、ゲームなどのワークロード向けに設計されており、Debian Linux の性能代替カーネルとしてよく利用されます。Liquorix パッチセットのメンテナである Damentz は、同様に Zen パッチセットの開発者でもあります。|https://liquorix.net|{{AUR|linux-lqx}}}}<br />
* {{App|pf-kernel|カーネルメインラインにマージされない、ほんの少しの素晴らしい機能を提供します。カーネルエンジニアによって管理されています。新しいカーネルのための含まれるパッチのポートが公式にリリースされていない場合、パッチセットは新しいカーネルへのパッチポートを提供し、サポートします。linux-pf の現在の最も代表的なパッチは、UKSM、DDCCI、v4l2loopback、そして BBRv3 です。|https://pfkernel.natalenko.name|パッケージ:}}<br />
:* [[非公式ユーザーリポジトリ#post-factum kernels|リポジトリ]]: pf-kernel の開発者 [https://aur.archlinux.org/account/post-factum post-factum] による {{AUR|linux-pf}}<br />
* {{App|Project C|Alfred Chen 氏の Project C パッチセット (BMQ スケジューラと PDS スケジューラ) を当てたカーネル。|https://gitlab.com/alfredchen/projectc|{{AUR|linux-prjc}}}}<br />
* {{App|Nitrous|Skylake 及びそれ以降に対して最適化された修正版 Linux カーネル。|https://gitlab.com/xdevs23/linux-nitrous|{{AUR|linux-nitrous}}}}<br />
* {{App|tkg|デスクトップやゲームのパフォーマンスを向上させるためのパッチや調整を提供する、高度にカスタマイズ可能なカーネルビルドシステム。Etienne Juvigny によってメンテナンスされています。他のパッチの中で、様々な CPU スケージューラを提供しています: CFS、Project C PDS、Project C BMQ、MuQSS、CacULE。|https://github.com/Frogging-Family/linux-tkg|[[非公式ユーザーリポジトリ#chaotic-aur|chaotic-aur]] リポジトリで利用可能}}<br />
* {{App|VFIO|Alex Williamson によって作成されたいくつかのパッチ(acs オーバーライドおよび i915)により、一部のマシンで KVM を使用して PCI パススルーを実行できるようになります。|https://lwn.net/Articles/499240/|{{AUR|linux-vfio}}, {{AUR|linux-vfio-lts}}}}<br />
* {{App|XanMod|高性能ワークステーション、ゲーミングデスクトップ、メディアセンターなどで最大限に活用されることを目指し、より強固で応答性の高い、スムーズなデスクトップ体験を提供するために構築されています。このカーネルでは、BFQ I/O スケジューラ、[https://github.com/google/bbr/tree/v3 TCP BBRv3] 輻輳制御、x86_64 高度命令セットのサポート、部分的な Clear Linux パッチセットが使用されており、また一部のデフォルトも変更されています。|https://xanmod.org/|{{AUR|linux-xanmod}}, {{AUR|linux-xanmod-lts}}, {{AUR|linux-xanmod-rt}}, {{AUR|linux-xanmod-bore}}}}<br />
<br />
== トラブルシューティング ==<br />
<br />
=== カーネルパニック ===<br />
<br />
Linux カーネルが回復不能な障害状態になると、''カーネルパニック''が発生します。典型的にこの状態はバグのあるハードウェアドライバーが原因で、マシンがデッドロック状態になり、応答しなくなり、再起動が必要になります。デッドロックの直前に、診断メッセージが生成されます。これは、障害が発生したときの''マシン状態''、障害を検出したカーネルの関数までの ''呼び出しトレース''、および現在ロードされているモジュールのリストです。ありがたいことに、カーネルのメインラインバージョン (公式リポジトリで提供されているものなど) を使用してカーネルパニックが発生することはあまりありませんが、発生した場合に備えて対処方法を知る必要があります。<br />
<br />
{{Note|カーネルパニックは、''oops'' または''カーネル oops'' と呼ばれることもあります。パニックと oops は両方とも障害状態の結果として発生するものですが、oops はより一般的なものであり、必ずしもマシンがデッドロックするわけではありません。問題のあるタスクを強制終了して実行を継続することで、カーネルが oops から回復できる場合があります。}}<br />
<br />
{{Tip|回復可能な oops で代わりにパニックを発生させることを強制するには、カーネルパラメータ {{ic|1=oops=panic}} を起動時に渡すか、{{ic|/proc/sys/kernel/panic_on_oops}} に {{ic|1}} を書き込んでください。oops リカバリによってシステムが不安定になり将来のエラーの診断が困難になることを懸念しているのであれば、これは推奨される方法です。}}<br />
<br />
==== パニックメッセージの検証 ====<br />
<br />
カーネルパニックがブートプロセスの非常に早い段階で発生する場合、コンソール上に "Kernel panic - not syncing:" というメッセージが表示されることがありますが、[[Systemd]] が実行し始めると、通常カーネルメッセージはキャプチャされシステムのログに書き込まれます。しかし、パニックが発生した際には、カーネルによる診断メッセージ出力は''ほとんどの場合''ディスク上のログファイルに書き込まれません。{{ic|system-journald}} がメッセージを取得・記録する前にマシンがデッドロックしてしまうからです。なので、パニックメッセージを検証する唯一の手段は、(''kdump crashkernel'' を設定することなく)パニックの発生時にメッセージをコンソール上で見ることです。以下のカーネルパラメータを渡して起動し、tty1 でパニックの再現を試みてください:<br />
<br />
systemd.journald.forward_to_console=1 console=tty1<br />
<br />
{{Tip|パニックメッセージが速くスクロールしすぎて検証できない場合、起動時にカーネルパラメータ {{ic|1=pause_on_oops=''秒数''}} を渡してみてください。}}<br />
<br />
===== 例: 不良モジュール =====<br />
<br />
診断メッセージの情報を使って、何のサブシステムやモジュールがパニックを引き起こしているかを推測できます。この例では、とある架空のマシンで起動中にパニックが発生してしまいました。'''太字'''で強調した行に注目してください。<br />
<br />
{{bc|'''kernel: BUG: unable to handle kernel NULL pointer dereference at (null)''' <sup>1</sup><br />
'''kernel: IP: fw_core_init+0x18/0x1000 [firewire_core]''' <sup>2</sup><br />
kernel: PGD 718d00067<br />
kernel: P4D 718d00067<br />
kernel: PUD 7b3611067<br />
kernel: PMD 0<br />
kernel:<br />
kernel: Oops: 0002 [#1] PREEMPT SMP<br />
'''kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ...''' <sup>3</sup><br />
kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1<br />
kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014<br />
kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000<br />
kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core]<br />
kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246<br />
kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000<br />
kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4<br />
kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95<br />
kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000<br />
kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840<br />
kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000<br />
kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br />
kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0<br />
kernel: Call Trace:<br />
'''kernel: do_one_initcall+0x50/0x190''' <sup>4</sup><br />
kernel: ? do_init_module+0x27/0x1f2<br />
kernel: do_init_module+0x5f/0x1f2<br />
kernel: load_module+0x23f3/0x2be0<br />
kernel: SYSC_init_module+0x16b/0x1a0<br />
kernel: ? SYSC_init_module+0x16b/0x1a0<br />
kernel: SyS_init_module+0xe/0x10<br />
kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5<br />
kernel: RIP: 0033:0x7f301f3a2a0a<br />
kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af<br />
kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a<br />
kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010<br />
kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085<br />
kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208<br />
kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030<br />
kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48<br />
kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68<br />
kernel: CR2: 0000000000000000<br />
kernel: ---[ end trace 71f4306ea1238f17 ]---<br />
'''kernel: Kernel panic - not syncing: Fatal exception''' <sup>5</sup><br />
kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff<br />
kernel: ---[ end Kernel panic - not syncing: Fatal exception}}<br />
<br />
# パニックを引き起こしたエラーの種類を示しています。この場合、プログラマのバグです。<br />
# モジュール ''firewire_core'' 内の ''fw_core_init'' という関数でパニックが発生したことを示しています。<br />
# ''firewire_core'' は最後にロードされたモジュールであることを示しています。<br />
# ''fw_core_init'' 関数を呼んだ関数は ''do_one_initcall'' であったことを示しています。<br />
# この ''oops'' メッセージが実際にカーネルパニックであり、システムがデッドロックしていることを示しています。<br />
<br />
以上のメッセージにより、''firewire_core'' モジュールがロードされたときの初期ルーチン中にパニックが発生したということを推測できます。(マシンのファームウェアハードウェアは、プログラマのエラーによりこのバージョンのファームウェアドライバモジュールと互換性が無いかもしれないことが推測でき、新しいリリースを待つ必要があることになります。) その間、マシンを再び走らせる最も簡単な方法は、モジュールがロードされないようにすることです。以下の方法のうち1つを取ってください:<br />
<br />
* モジュールが ''initramfs'' の実行中にロードされる場合、[[カーネルパラメータ]] {{ic|1=rd.blacklist=firewire_core}} を設定して再起動してください。<br />
* それ以外の場合、カーネルパラメータ {{ic|1=module_blacklist=firewire_core}} を設定して再起動してください。<br />
<br />
==== 再起動して root シェルに入り問題を修正する ====<br />
<br />
{{Out of date|[https://gitlab.archlinux.org/archlinux/packaging/packages/systemd/-/commit/292cdf8a2f7dd7c6c7d91d2b59617391935c837c initramfs の root アカウントはロックされているため]、{{ic|rd.rescue}} と {{ic|rd.emergency}} は動作しません。}}<br />
<br />
{{Accuracy|{{ic|rd.emergency}} ではキーボードは動作しないため、使用できません。}}<br />
<br />
システムに変更を加えてパニックが起こらないようにするには、root シェルが必要です。パニックが起動時に発生する場合、マシンがデッドロックする前に root シェルに入るための戦略が複数あります:<br />
<br />
* カーネルパラメータ {{ic|emergency}} か {{ic|rd.emergency}} か {{ic|-b}} を設定して再起動する。これで、root ファイルシステムがマウントされて {{ic|systemd}} が起動した直後にログインプロンプトが表示されます。<br />
: {{Note|この時点では、root ファイルシステムは'''読み取り専用'''でマウントされます。ファイルシステムに変更を加えるには、{{ic|mount -o remount,rw /}} を root ユーザとして実行してください。}}<br />
* カーネルパラメータ {{ic|rescue}}、{{ic|rd.rescue}}、{{ic|single}}、{{ic|s}}、{{ic|S}}、{{ic|1}} のどれか設定して再起動する。これで、ローカルのファイルシステムがマウントされた直後にログインプロンプトが表示されます。<br />
* カーネルパラメータ {{ic|1=systemd.debug_shell}} を設定して再起動する。これで、非常に初期の root シェルが tty9 で表示されます。{{ic|Ctrl+Alt+F9}} を押してそのシェルに切り替えてください。<br />
* パニックを引き起こしているカーネルの機能を無効化するために、異なるカーネルパラメータの組で再起動して実験する。"定番" の {{ic|1=acpi=off}} と {{ic|nolapic}} を試してみてください。<br />
: {{Tip|すべてのカーネルパラメータは [https://docs.kernel.org/admin-guide/kernel-parameters.html kernel-parameters.html] を参照して下さい。}}<br />
* 最後の手段として、[[インストールガイド#インストールメディアの準備|Arch Linux インストールメディア]]を起動し、ルートファイルシステムを {{ic|/mnt}} にマウントし、{{ic|arch-chroot /mnt}} を root ユーザとして実行する。<br />
* パニックを引き起こしているサービスやプログラムを無効化する。不具合のあるアップデートをロールバックする。設定の問題を修正する。<br />
<br />
{{Tip|[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]イメージが破損している場合、新しいイメージを生成する必要があるかもしれません。イメージの破損は、カーネルアップデートが中断された場合に起こる可能性があります。新しいイメージを作成する方法は、[[mkinitcpio#イメージ作成とアクティベーション|mkinitcpio]] を参照してください。}}<br />
<br />
=== リグレッションをデバッグする ===<br />
<br />
[[一般的なトラブルシューティング#リグレッションをデバッグする]] を参照してください。<br />
<br />
{{AUR|linux-mainline}} を試して、その問題が既に上流で修正されているかどうかを確認してください。ピン留めされたコメントは既にビルドされたカーネルを含むリポジトリにも言及しているので、時間がかかる手動でのビルドは必要ないかもしれません。<br />
<br />
最近発生しなかった問題をデバッグするために LTS カーネル ({{Pkg|linux-lts}}) を試してみることも検討する価値があるかもしれません。LTS カーネルの古いバージョンは [[Arch Linux Archive]] で見つけることができます。<br />
<br />
それでも問題が解決しないときは、{{AUR|linux-git}} を [[bisect]] してください。そして、[https://bugzilla.kernel.org/ kernel bugzilla] でバグを報告してください。パッチと関係ないことを確認するために、パッチなしの "バニラ"バージョンを試すことが重要です。もしパッチが問題を引き起こすなら、そのパッチの作者に報告してください。<br />
<br />
{{Note|カーネルの bisect は何度も作り直さなければならないので、かなりの時間がかかるかもしれません。}}<br />
<br />
==== より小さなカーネルを構築する ====<br />
<br />
[[modprobed-db]] か {{ic|make localmodconfig}} を使って、ローカルシステムに必要なモジュールだけをビルドしたり、によってカーネルビルド時間を短縮したりできます。もちろん、ネットワークの問題をデバッグするために、サウンドドライバなど、無関係なドライバを完全に削除することも可能です。<br />
<br />
== 参照 ==<br />
<br />
* [http://www.kroah.com/lkn/ O'Reilly - Linux Kernel in a Nutshell] (フリーの電子書籍)<br />
* [http://kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/ What stable kernel should I use?] by Greg Kroah-Hartman<br />
* [https://docs.kernel.org/index.html Linux カーネルのドキュメント]<br />
<br />
{{TranslationStatus|Kernel|2024-02-22|800238}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0&diff=36536
一般的なトラブルシューティング
2024-03-13T15:43:28Z
<p>AshMyzk: /* リグレッションしてデバッグする */ タイトルを修正。リグレッションというのは"デグレード"とほぼ同じ意味です</p>
<hr />
<div>[[Category:システム管理]]<br />
[[Category:システムリカバリ]]<br />
[[en:General troubleshooting]]<br />
[[es:General troubleshooting]]<br />
[[fr:General troubleshooting]]<br />
[[pt:General troubleshooting]]<br />
[[ru:General troubleshooting]]<br />
[[zh-hans:General troubleshooting]]<br />
{{Related articles start}}<br />
{{Related|バグ報告ガイドライン}}<br />
{{Related|ステップバイステップデバッグガイド}}<br />
{{Related|デバッグ - トレースを取得}}<br />
{{Related|IRC 共同デバッグ}}<br />
{{Related articles end}}<br />
<br />
この記事では一般的なトラブルシューティングの方法を説明しています。特定のアプリケーションの問題については、そのプログラムの wiki ページを参照してください。<br />
<br />
== 基本手順 ==<br />
<br />
=== 注意事項 ===<br />
<br />
抱えている問題を解決するには、問題のシステムがどう機能しているのかを根本的に理解することが不可欠です。どうやって動いているのか、またエラーを起こさずに動作させるには何が必要なのか?質問に答えるのが用意ではないという場合、問題が発生している機能に関する [[メインページ|Archwiki]] の記事を見ることを強く推奨します。問題のシステムを理解すれば、問題を突き止めるのが楽になるでしょう。<br />
<br />
=== チェックリスト ===<br />
<br />
システムが機能しないときは以下の質問を考えてみてください。各質問の下には、なぜ質問に答えなければならないのか、詳しいデータを入手したりログやジャーナルを確認するにはどのツールを使えばいいのかを載せています。<br />
<br />
# 何が問題ですか?<br />
#: 出来る限り正確に把握してください。特定の情報を確認するときに、混乱したり横道にそれるのを防ぐためです。<br />
# エラーメッセージは存在しますか?<br />
#: 問題に関連するエラーメッセージを含んでいる出力を全て、{{ic|$HOME/issue.log}} などのファイルにコピーアンドペーストしてください。例えば、[[mkinitcpio]] コマンドの出力を {{ic|$HOME/issue.log}} に書き出すには以下のようにします:<br />
#: {{bc|$ mkinitcpio -p linux >> $HOME/issue.log''}}<br />
# 問題を再現できますか?<br />
#: 正確に、かつ手順毎に、再現に必要な操作やコマンドを抽出してください。<br />
# 問題が発生し始めたのはいつからで、問題がなかったときから何を変えましたか?<br />
#:アップデートによって問題が発生したのであれば、アップデートしたパッケージを全て挙げてください。バージョン番号や、[[pacman]].log に出力されたテキスト ({{ic|/var/log/pacman.log}}) も重要です。また、[[systemd]] の systemctl ツールを使って問題のアプリケーションを使うのに必要なサービスの状態を確認してください。例えば、以下の [[Systemd#systemctl の基本的な使い方|systemd]] コマンドは {{ic|$HOME/issue.log}} にサービスの状態を書き込みます:<br />
#: {{bc|$ systemctl status dhcpcd@eth0.service >> $HOME/issue.log}}<br />
#: {{Note|{{ic|'''>>'''}} を使うことで {{ic|$HOME/issue.log}} 内のテキストが上書きされないようにしています。}}<br />
<br />
=== 問題の特定 ===<br />
<br />
問題を解決しようとするとき、以下のようなアプローチを取ってはいけません:<br />
<br />
''アプリケーション X が動作しない。''<br />
<br />
そうではなくて、正確に観察をしましょう:<br />
<br />
''A または B の状態のときにアプリケーション X を使って作業 Y を行うと Z というエラーが発生する。''<br />
<br />
=== 他者のサポート ===<br />
<br />
全ての情報はあなたの目の前にあります。あなたのシステムで何が起きてるのか一番良く知ってるのはあなたのはずです。適切な修正を試みて下さい。<br />
<br />
他者のサポートが必要なときは、[https://bbs.archlinux.jp フォーラム] や irc.freenode.net の IRC #archlinux で得ることができるでしょう。<br />
<br />
助けを求めるときは、あなたが大事だと考えた部分だけでなく、ログや出力などの情報を全て投稿してください。以下のような情報が対象です:<br />
<br />
* コマンドの完全な出力。<br />
* systemd の {{ic|journalctl}} からの出力。{{ic|1=systemd.log_level=debug}} ブートパラメータを使うことでさらに詳しい出力を得ることができます。<br />
* ログファイル ({{ic|/var/log}} を確認してください)。<br />
* 関連する設定ファイル。<br />
* 関連するドライバー。<br />
* 関連するパッケージのバージョン。<br />
* カーネル: {{ic|dmesg}}。起動時の問題の場合、最後に表示された10行分程度の出力。場合によってはさらに多くの出力。<br />
* ネットワーク: 関連するコマンドや設定ファイルの実際の出力。<br />
* Xorg: {{ic|/var/log/Xorg.0.log}} や、問題のあるログを上書きした場合は前のログ。<br />
* Pacman: アップグレードによって問題が発生したのであれば {{ic|/var/log/pacman.log}}。<br />
<br />
情報を投稿するときはオンラインの pastebin を使うと良いでしょう。{{AUR|pbpst}} または {{pkg|gist}} パッケージを[[インストール]]することで情報を自動的にアップロードできます。例えば、systemd のジャーナルをアップロードするには:<br />
<br />
# journalctl -xb | pbpst -S<br />
<br />
リンクが出力されるのでフォーラムや IRC に貼り付けてください。<br />
<br />
質問を投稿する前に、[http://www.ranvis.com/articles/smart-questions.ja.html 賢い質問のしかた] や[[行動規範]]も読んでください。<br />
<br />
== 起動時の問題 ==<br />
<br />
[[ブートプロセス]]の問題を調べるときは[[カーネルパラメータ]]を変更して、システムを再起動します。<br />
<br />
システムが起動できない場合、[https://www.archlinux.jp/download/ ライブイメージ] から起動して既存の環境に [[Change Root]] してください。<br />
<br />
=== コンソールメッセージ ===<br />
<br />
ブートプロセスが完了すると、画面の表示は一度消去されてログインプロンプトが表示されます。ユーザーは init の出力やエラーメッセージを読むことができません。以下のセクションに書かれている方法を使うことでエラーが読めるようになります。<br />
<br />
どのオプションを使用した場合でも、起動後に {{ic|dmesg}} を使用したり {{ic|journalctl -b}} を実行することで起動時からのカーネルメッセージを表示することは可能です。<br />
<br />
==== フロー制御 ====<br />
<br />
仮想コンソール (vc) を含む、ほとんど全てのターミナルエミュレータに適用される基本的な制御です:<br />
* {{ic|Ctrl+S}} を押して出力を停止<br />
* {{ic|Ctrl+Q}} で復帰<br />
<br />
{{ic|write()}} のコールがブロックされるため、出力が停止されるだけでなく、ターミナルに出力しようとしているプログラムも停止されます。''init'' がフリーズしているように見える場合、システムコンソールが停止していないか確認してください。<br />
<br />
既に表示されているエラーメッセージを見る方法は [[Getty#tty1 にブートメッセージを残す]]を参照。<br />
<br />
==== スクロールバック ====<br />
<br />
ビデオアダプタと表示端末の間に、スクロールバックバッファと呼ばれるバッファが作成されることで、テキストコンソールの画面から出てしまったテキストを遡って表示するスクロールバックが可能になっています。デフォルトでは、{{ic|Shift+PageUp}} と {{ic|Shift+PageDown}} のキーの組み合わせでバッファを上下にスクロールできます。<br />
<br />
上限までスクロールしても情報が十分得られない場合、スクロールバックバッファを拡張して、保存できる出力の量を増やす必要があります。{{ic|1=fbcon=scrollback:Nk}} [[カーネルパラメータ]]でカーネルのフレームバッファコンソール (fbcon) を設定することで拡張できます。{{ic|N}} を使用したいバッファサイズ (キロバイト) に置き換えてください。デフォルトのサイズは 32k です。<br />
<br />
上記の設定が反映されない場合、フレームバッファコンソールが正しく有効になっていません。[https://www.kernel.org/doc/Documentation/fb/fbcon.txt Framebuffer Console ドキュメント] をみて他のパラメータを設定したり、あるいはフレームバッファドライバーを変更してください。<br />
<br />
==== デバッグ出力 ====<br />
<br />
ほとんどのカーネルメッセージは起動時には表示されません。様々なカーネルパラメータを設定することでメッセージを表示させることができます:<br />
<br />
* {{ic|debug}} はカーネルと [[systemd]] のデバッグメッセージを有効にします。<br />
* {{ic|ignore_loglevel}} は強制的に全てのカーネルメッセージを表示します。<br />
<br />
特定のケースでは、他のパラメータを使用する場合もあります:<br />
* {{ic|1=earlyprintk=vga,keep}} はブートプロセスの初期段階でカーネルメッセージを表示します。出力が表示される前にカーネルがクラッシュしてしまう場合に使用してください。[[EFI]] 環境では {{ic|vga}} を {{ic|efi}} に変える必要があります。<br />
* {{ic|1=log_buf_len=16M}} はカーネルのメッセージバッファを大きくすることで (16MB)、デバッグ出力が上書きされないようにします。<br />
<br />
{{ic|bootmem_debug}} や {{ic|sched_debug}} など、特定のサブシステムのデバッグを有効にするデバッグパラメータも複数存在します。詳しくは [https://www.kernel.org/doc/Documentation/kernel-parameters.txt カーネルパラメータのドキュメント] を見てください。<br />
<br />
{{Note|見たいところまでブート時の出力をスクロールバックできない場合、[[#スクロールバック|スクロールバックバッファ]]のサイズを大きくしてください。}}<br />
==== netconsole ====<br />
<br />
[https://docs.kernel.org/networking/netconsole.html netconsole] は、カーネルモジュールで、すべてのカーネルログメッセージ(つまり、dmesg)をユーザースペース(例えば、syslogd)を介さずに別のコンピューターにネットワーク経由で送信します。"netconsole" という名前は誤称で、実際には "コンソール" ではなく、リモートログサービスのようなものです。<br />
<br />
これは、組み込みまたはモジュールとして使用できます。組み込みの ''netconsole'' は、NICカードの直後に初期化し、指定したインターフェースをできるだけ早く起動します。このモジュールは主に、ヘッドレスマシンからのカーネルパニック出力をキャプチャするため、またはユーザースペースが機能しなくなった他の状況で使用されます。<br />
<br />
=== リカバリシェル ===<br />
<br />
デーモンによるエラーや、fstab の記述が間違っている、またはディスプレイマネージャや Xorg に問題が発生していて、起動できない場合、シングルユーザー[[systemd#ターゲット|ランレベル]]を使うことで問題を修正できることがあります。シングルユーザーモードでは起動後に root シェルだけを表示します。リカバリシェルを起動するカーネルパラメータは複数存在しますが、どれも {{ic|exit}} で通常シェルに戻り、カーネルが元の状態に復帰します:<br />
* {{ic|rescue}} は root ファイルシステムが読み書きできる状態で再マウントされたすぐ後にシェルを起動します。<br />
* {{ic|emergency}} は更に早く、ファイルシステムがマウントされる前にシェルを起動します。<br />
* (何らかの理由で上記のパラメータが使えない場合) {{ic|1=init=/bin/sh}} は init プログラムを root シェルに変えます。{{ic|rescue}} と {{ic|emergency}} はどちらも [[systemd]] に依存しますが、{{ic|1=init=/bin/sh}} はたとえ ''systemd'' が壊れても使えます。<br />
<br />
また、[[カーネルパラメータ]]に {{ic|systemd.debug-shell}} を追加するか、あるいは {{ic|debug-shell.service}} を[[有効化]]することで {{ic|tty9}} に root シェルを追加することもできます (Ctrl+Alt+F9 でアクセス可能)。root シェルが開きっぱなしになっているとセキュリティ上危険なので、修復が終わったらサービスは無効化してください。<br />
<br />
=== Intel のビデオカードで画面が表示されない ===<br />
<br />
おそらく [[カーネルモード設定]]の問題が原因です。[[カーネルモード設定#モード設定を無効にする|モード設定を無効にする]]か[[Intel Graphics#KMS Issue: コンソールの画面が狭い|ビデオポートを変更]]してみてください。<br />
<br />
=== カーネルのロード中に止まってしまう ===<br />
<br />
{{ic|1=acpi=off}} [[カーネルパラメータ]]を追加して ACPI を無効化してみてください。<br />
<br />
=== カーネルモジュールのデバッグ ===<br />
<br />
[[カーネルモジュール#情報を取得]]を見てください。<br />
<br />
=== ハードウェアのデバッグ ===<br />
<br />
[[udev#デバッグ出力]]を見てください。<br />
<br />
== フリーズをデバッグする ==<br />
<br />
残念なことに、通常、フリーズはデバッグが難しく、場合によっては再現に多くの時間を要します。フリーズにはデバッグが比較的容易なものがあります:<br />
<br />
* 音は流れ続けていますか? もしそうであれば、ディスプレイがフリーズしているだけかもしれません。これは、ビデオドライバの問題である場合があります。<br />
* マシンはまだ応答していますか? 他の [[Tty|TTY]] に切り替えることができない場合は、[[SSH]] を試してください。<br />
* (もしあれば) ディスクのアクティビティ LED は、ディスクに大量に書き込んでいることを示していますか? 大量のスワップはシステムを一時的にフリーズさせる場合があります。大量に書き込みを行った際のフリーズに関する情報は[https://unix.stackexchange.com/a/340567 この StackExchange の回答]を参照してください。<br />
<br />
どれもうまく行かない場合、'''クリーン'''シャットダウンを試してください。電源ボタンを'''一回'''おすとシステムのフリーズが治り、停止中のユニットが出力されるいつもの "シャットダウン画面" が表示されるかもしれません。あるいは、マジック [[SysRq]] キーでもクリーンシャットダウンを行うことができるかもしれません。[[Journal]] にはマシンのフリーズした理由のヒントが含まれている可能性があるので、クリーンシャットダウンが非常に重要なのです。クリーンでないシャットダウンでは、journal がディスクに書き込まれない場合があります。マシン全体が応答しなくなるハードフリーズは、ログを時間内にディスクに書き込めないので、デバッグがより難しくなります。<br />
<br />
フリーズによってディスクに何も書き込めない場合は、リモートログインが役立つかもしれません。リモートログインの方法 (他のデバイスから行う必要があります) は、基本的なデバッグに利用できます:<br />
<br />
$ ssh ''フリーズしているホスト'' journalctl -f<br />
<br />
システム全体が応答しなくなり強制シャットダウンが必要になる深刻なフリーズの多くは、バグのあるファームウェアやドライバ、ハードウェアが関連しているかもしれません。別のカーネル ([[カーネル#リグレッション デバッグ]] を参照) や別の Linux ディストリビューションや OS を試したり、ファームウェアのアップデートやハードウェアの診断を行うと問題を見つけられるかもしれません。<br />
<br />
{{Tip|デバイスのファームウェアをアップデートしてみることをお勧めします。そのようなアップデートは奇妙な問題を解決してくれることがあるからです。}}<br />
<br />
フリーズのせいでデバッグに必要なあらゆる種類のログや情報を集められない場合、live 環境でフリーズを再現してみてください。フリーズを再現するためにグラフィカル環境が必要な場合や、archiso でフリーズを再現できる場合は、別のディストリビューションの live 環境を使ってください (フリーズがカーネルのバージョンやパッチに関係している可能性を排除するために、Arch ベースでない Linux を使うことが好ましいです)。live 環境でもフリーズが発生する場合、ハードウェア関連である''かも''しれません。フリーズが起こらなくなった場合、両システム間の違いを確認しておく必要があります。異なる構成 (設定)、バージョンやカーネルパラメータの違い、その他の似たような変更により、フリーズが修正されたのかもしれません。<br />
<br />
ただし、caps lock の LED が点灯している場合は、[[カーネルパニック]]が起こっていることを示している可能性があります。環境によっては、カーネルパニックが発生したときに TTY が表示されない場合があります。これは混乱を招き、他の種類のフリーズと勘違いしてしまうかもしれません。<br />
<br />
== リグレッションをデバッグする ==<br />
<br />
{{Warning|これは [[インストールガイド#インストールメディアの準備|部分アップグレード]] を引き起こす傾向があり、この特定のケースでは必要悪となります。このシナリオによって正常な起動ができなくなる場合に備えて、慎重に作業を進め、[[インストールガイド#インストールメディアの準備|システムを回復する方法]] を用意してください}}<br />
<br />
アップデートが問題を引き起こし、特定のパッケージを [[ダウングレード]] すると解決する場合、それはおそらく [https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%BE%8C%E6%88%BB%E3%82%8A regression] でしょう。リグレッションのデバッグで最も重要なのは、問題がすでに修正されているかどうかを確認することです。これを行うには、まずアプリケーションが完全にアップデートされていることを確認します(例えば、アプリケーションが[[公式リポジトリ]]にあるのと同じバージョンであることを確認します)。もし既にアップデートされていたり、アップデートしても問題が解決しない場合は、実際の最新版を使ってみてください、通常は [[Arch User Repository#What is the difference between foo and foo-git packages?|-git]] バージョンで、既に [[AUR]] にパッケージされていることがあります。もしこれで問題が解決し、修正されたバージョンがまだ公式リポジトリにない場合は、新しいバージョンが公式リポジトリに届くまで待ち、それに戻してください。<br />
<br />
それでも問題が解決しない場合、問題をデバッグするかアプリケーションを [https://wiki.archlinux.org/title/Bisecting_bugs_with_Git bisect] して、バグが修正されるようにアップストリームのバグトラッカーに報告してください。<br />
<br />
{{Note|カーネルはリグレッションをデバッグするときに [[カーネル#リグレッションをデバッグする|違うアプローチ]] を必要とします。}}<br />
<br />
== カーネルのアップグレード後に一部の周辺機器が使用できない ==<br />
<br />
この現象は、一般的に以下のように現れます (しかし、これだけではないでしょう):<br />
<br />
* 新たに挿入した USB デバイスが ''dmesg'' に現れるが、{{ic|/dev/}} には現れない。<br />
* カーネルアップデート前に使用したことのないファイルシステムをマウントできない。<br />
* ノート PC で、カーネルアップデート前に有線/無線接続を使用したことのない場合、有線/無線接続を使用できない。<br />
* ''modprobe'' を使って、カーネルパッケージのアップデート前に使用したことのないモジュールをロードしようとすると、{{ic|FATAL: Module ''module'' not found in directory /lib/module/''kernelversion''}}。<br />
<br />
[[システムメンテナンス#アップグレード後に再起動]] で部分的に説明されている通り、カーネルのパッケージをアップデートしたとしても、再起動しない限り、カーネル自体はアップデートされません。一方、{{ic|/usr/lib/modules/''kernelversion''/}} 内のカーネルモジュールは、新しいカーネルがインストールされた際に pacman によって削除されます。{{Bug|16702}} で説明されている通り、この方法により、パッケージマネージャによって管理されないファイルをシステム上に残留させてしまうことを防ぐことができますが、先に挙げたような症状を引き起こしてしまいます。この問題を解決するには、カーネルのアップデート後に計画的に再起動してください。将来的には (まだ、実装されていませんが)、バージョン管理されたカーネルパッケージを使用することになるでしょう: 主な障害は、もはや必要とされなくなった以前のカーネルバージョンの削除をどう処理するかにあります。<br />
<br />
もう一つの解決策は、{{Pkg|kernel-modules-hook}} を使うことです。2つの pacman フックが含まれており、rsync を使ってカーネルアップデート後にカーネルモジュールをファイルシステム上に保持し、[[有効化]]されてから4週間後に削除すべき古いモジュールをマークする {{ic|linux-modules-cleanup.service}} を使用します。<br />
<br />
== パッケージ管理 ==<br />
<br />
一般的な問題については [[Pacman#トラブルシューティング]]を、PGP 鍵に関する問題は [[pacman-key#トラブルシューティング]]を見てください。<br />
<br />
=== 壊れたシステムを修復する ===<br />
<br />
[[部分アップグレード]] が実行された場合は、システム全体をアップデートしてみてください。再起動が必要になる場合があります。<br />
<br />
# pacman -Syu<br />
<br />
GUI で起動していて、それが失敗する場合は、{{ic|Ctrl+Alt+F1}} から {{ic|Ctrl+Alt+F6}} を押して、動作中の tty にアクセスして ''pacman'' を実行できます。<br />
<br />
システムが壊れて ''pacman'' を実行できない場合は、[[インストールガイド#インストールの準備|Arch ISO を USB フラッシュドライブ、光ディスク、または PXE を使用したネットワークから起動します。]] (インストールガイドの残りの部分には従わないでください。)<br />
<br />
root ファイルシステムをマウントします:<br />
<br />
[ISO] # mount /dev/''rootFileSystemDevice'' /mnt<br />
<br />
個別に作成した他のパーティションをマウントし、すべてのパーティションにプレフィックス {{ic|/mnt}} を追加します。つまり、次のようになります:<br />
<br />
[ISO] # mount /dev/''bootDevice'' /mnt/boot<br />
<br />
システムの ''pacman'' を使用してみてください:<br />
<br />
[ISO] # arch-chroot /mnt<br />
[chroot] # pacman -Syu<br />
<br />
失敗した場合は、''chroot'' を終了して、次のことを試してください:<br />
<br />
[ISO] # pacman -Syu --sysroot /mnt<br />
<br />
失敗した場合は、次のことを試してください:<br />
<br />
[ISO] # pacman -Syu --root /mnt --cachedir /mnt/var/cache/pacman/pkg<br />
<br />
== fuser ==<br />
<br />
''fuser'' はファイルやファイルシステム、TCP/UDP ポートなどのリソースを使ってプロセスを確認するためのコマンドラインユーティリティです。<br />
<br />
''fuser'' は {{Pkg|psmisc}} パッケージに入っており、このパッケージは {{Pkg|base}} [[メタパッケージ]]の依存関係として既にインストールされているはずです。<br />
<br />
== セッションのパーミッション ==<br />
<br />
{{Note|ローカルセッションを動作させるには init システムとして [[systemd]] を使う必要があります。systemd は polkit のパーミッションや様々なデバイスの ACL を使うのに必須です ({{ic|/usr/lib/udev/rules.d/70-uaccess.rules}} や [http://enotty.pipebreaker.pl/2012/05/23/linux-automatic-user-acl-management/] を参照)。}}<br />
<br />
まず、X の中に有効なローカルセッションがあることを確認してください:<br />
<br />
$ loginctl show-session $XDG_SESSION_ID<br />
<br />
このコマンドの出力に {{ic|1=Remote=no}} と {{ic|1=Active=yes}} が含まれていなければなりません。含まれていない場合は、X がログインを行った tty と同一の tty で動作していることを確認してください。logind セッションを維持するために tty が同一である必要があります。このことはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} によって管理されています。<br />
<br />
D-Bus セッションも X と一緒に起動する必要があります。詳しくは [[D-Bus#ユーザーセッションの起動]]を見てください。<br />
<br />
基本的な [[polkit]] のアクションはそれ以上の設定を必要としませんが、ローカルセッションだけでなく他の認証を必要とする polkit アクションも存在します。認証するには polkit 認証エージェントを実行する必要があります。詳しくは [[polkit#認証エージェント]]を見て下さい。<br />
<br />
== "error while loading shared libraries" というメッセージ ==<br />
<br />
プログラムを使用しようとすると、以下のようなエラーが出力される場合:<br />
<br />
error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or directory<br />
<br />
[[pacman]] や [[pkgfile]] を使って存在しないライブラリが入っているパッケージはどれか検索してください:<br />
<br />
{{hc|$ pacman -Fs libusb-0.1.so.4|<br />
extra/libusb-compat 0.1.5-1<br />
usr/lib/libusb-0.1.so.4<br />
}}<br />
<br />
上記の場合、{{Pkg|libusb-compat}} パッケージを[[インストール]]してください。<br />
<br />
インストールしたプログラムのパッケージの [[PKGBUILD]] に依存パッケージとしてライブラリが記載されていないという可能性もあります。公式パッケージの場合、[[バグ報告ガイドライン|バグとして報告]]してください。[[AUR]] のパッケージの場合、AUR のウェブサイトからメンテナに報告してください。<br />
<br />
== 参照 ==<br />
<br />
;一般<br />
<br />
*[http://www.maximumpc.com/article/features/linux_troubleshooting_guide_fix_most_common_problems Fix the Most Common Problems]<br />
*[https://www.reddit.com/r/archlinux/comments/tjjwr/archlinux_a_howto_in_troubleshooting_for_newcomers/ A how-to in troubleshooting for newcomers]<br />
<br />
;起動の問題<br />
<br />
* [http://www.memtest.org/ Memtest86+]<br />
* [http://wiki.ultimatebootcd.com/index.php?title=Tools List of Tools for UBCD] - memtest のように menu.lst に追加できます。<br />
* Wikipedia の [[Wikipedia:BIOS Boot partition|BIOS Boot partition]] のページ<br />
* [https://fedoraproject.org/wiki/QA/Sysrq QA/Sysrq] - sysrq の使用方法<br />
* systemd のドキュメント: [https://freedesktop.org/wiki/Software/systemd/Debugging#Debug_Logging_to_a_Serial_Console Debug Logging to a Serial Console]<br />
* [https://web.archive.org/web/20120217124742/http://www.lesswatts.org/projects/acpi/debug.php How to Isolate Linux ACPI Issues]</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%BC%E3%83%89&diff=36534
マイクロコード
2024-03-13T07:39:01Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:CPU]]<br />
[[Category:セキュリティ]]<br />
[[de:Microcode]]<br />
[[en:Microcode]]<br />
[[es:Microcode]]<br />
[[ru:Microcode]]<br />
[[zh-hans:Microcode]]<br />
プロセッサの製造者はプロセッサ[[Wikipedia:ja:マイクロプログラム方式|マイクロコード]]に安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。<br />
<br />
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。<br />
<br />
== マイクロコードをロードする ==<br />
<br />
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:<br />
<br />
# '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。<br />
# '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。<br />
# '''遅延ロード''' ([https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください:<br />
* {{Pkg|amd-ucode}} : AMD プロセッサ<br />
* {{Pkg|intel-ucode}} : Intel プロセッサ<br />
<br />
=== initramfs に埋め込まれたマイクロコード ===<br />
<br />
マイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に埋め込むことができます]。Arch Linux の [[mkinitcpio]] は、({{ic|microcode}} フックが [[mkinitcpio#設定|mkinitcpio の設定]]の {{ic|HOOKS}} 配列に含まれている場合) デフォルトで initramfs にマイクロコードを埋め込みます。また、[[dracut]] も initramfs にマイクロコードを埋め込みます ({{man|5|dracut.conf|DESCRIPTION}} を参照)。この場合、[[#早期ロード]] と [[#遅延ロード]] は必要ありません。<br />
<br />
=== 早期ロード ===<br />
<br />
マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) を使って読み込まなければなりません。Unified カーネルイメージの一部として、あるいは [[ブートローダー]]を使って初期 RAM ディスクイメージとしてローダに渡すことができます。<br />
<br />
ユーザの初期ブート構成は様々なので、マイクロコードのアップデートは Arch のデフォルトの設定では自動的にトリガーされないことに注意してください。<br />
<br />
==== Unified カーネルイメージ ====<br />
<br />
[[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。<br />
<br />
==== 初期 RAM ディスクイメージ ====<br />
<br />
あるいは、マイクロコードのアップデートを有効にするには、{{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルの 一番目の初期 RAM ディスクイメージ''' として追加しなければなりません。これは、通常の初期 RAM ディスクイメージファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。<br />
<br />
以下のセクションでは {{ic|''cpu_manufacturer''}} の部分をあなたの CPU の製造業者名に置き換えてください、例: {{ic|amd}} か {{ic|intel}}。<br />
<br />
{{Tip|[[リムーバブルメディアに Arch Linux をインストール|リムーバブルドライブ上の Arch Linux]] をこれらのプロセッサの両方で動かす可能性がある場合、両方のパッケージをインストールし両方のマイクロコードファイルを {{ic|initrd}} としてブートローダの設定に追加してください。initramfs イメージよりも前に指定していればファイルの順番は関係ありません。}}<br />
<br />
===== カスタムカーネルでマイクロコードの早期ロードを有効化 =====<br />
<br />
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。<br />
<br />
CONFIG_BLK_DEV_INITRD=Y<br />
CONFIG_MICROCODE=y<br />
CONFIG_MICROCODE_INTEL=Y<br />
CONFIG_MICROCODE_AMD=y<br />
<br />
===== GRUB =====<br />
<br />
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように {{ic|/boot/''cpu_manufacturer''-ucode.img}} を追加できます(別のパーティションに {{ic|/boot}} がある場合は {{ic|/''cpu_manufacturer''-ucode.img}}):<br />
<br />
{{hc|/boot/grub/grub.cfg|<br />
...<br />
echo 'Loading initial ramdisk'<br />
initrd '''/boot/''cpu_manufacturer''-ucode.img''' /boot/initramfs-linux.img<br />
...<br />
}}<br />
<br />
それぞれのメニュエントリに対してこれを行ってください。<br />
<br />
===== systemd-boot =====<br />
<br />
以下のように、マイクロコードを読み込むオプションを初期 RAM ディスクより前に使用してください:<br />
<br />
{{hc|/boot/loader/entries/''entry''.conf|<br />
title Arch Linux<br />
linux /vmlinuz-linux<br />
'''initrd /''cpu_manufacturer''-ucode.img'''<br />
initrd /initramfs-linux.img<br />
...<br />
}}<br />
<br />
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。<br />
<br />
===== EFISTUB =====<br />
<br />
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:<br />
<br />
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img<br />
<br />
===== rEFInd =====<br />
<br />
{{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡せるようにするために [[rEFInd#設定]] で説明されている手順に従う必要があります。}}<br />
<br />
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、マイクロコードイメージをロードするための {{ic|1=initrd=}} オプションを最初の {{ic|initrd}} 引数として追加してください。{{ic|/boot}} 内のファイルが別のパーティションの直下にあるかどうかに応じて、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} か {{ic|1=initrd=''cpu_manufacturer''-ucode.img}} のどちらかを使ってください。<br />
<br />
マイクロコードは、ブートオプションのリストの中で最初に宣言された initramfs でなければなりません。例えば:<br />
<br />
"Boot using default options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap initrd=boot\''cpu_manufacturer''-ucode.img initrd=boot\initramfs-%v.img"<br />
<br />
====== 手動でブートオプションを記述する ======<br />
<br />
[[rEFInd#手動でブートエントリを記述する|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合は、{{ic|1=initrd=}} パラメータを追加して、ブートパーティション内の適切なパスに設定する必要があります。このパラメータは options 行の一部である必要があり、設定のメインの部分ではありません。例:<br />
<br />
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"<br />
<br />
===== Syslinux =====<br />
<br />
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}<br />
<br />
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます:<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
INITRD '''../''cpu_manufacturer''-ucode.img''',../initramfs-linux.img<br />
...<br />
<br />
===== LILO =====<br />
<br />
[[LILO]] などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux.img}} をひとつのイメージにまとめる必要があります。<br />
<br />
{{Warning|カーネルをアップデートするたびに毎回イメージをマージして再生成する必要があります。}}<br />
<br />
{{Note|イメージの順番は重要です。オリジナルのイメージである {{ic|initramfs-linux}} は {{ic|''cpu_manufacturer''-ucode.img}} イメージよりも先に来るように結合する必要があります。}}<br />
<br />
ふたつのイメージを {{ic|initramfs-merged.img}} という名前のイメージにマージするには、以下のコマンドを使用:<br />
<br />
# cat /boot/''cpu_manufacturer''-ucode.img /boot/initramfs-linux.img > /boot/initramfs-merged.img<br />
<br />
マージできたら {{ic|/etc/lilo.conf}} を編集して新しいイメージをロードします:<br />
<br />
...<br />
initrd=/boot/initramfs-merged.img<br />
...<br />
<br />
root で {{ic|lilo}} を実行してください:<br />
<br />
# lilo<br />
<br />
===== Limine =====<br />
<br />
[[Limine]] においては、[[Limine#設定|limine.cfg]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です:<br />
<br />
{{hc|limine.cfg|2=<br />
DEFAULT_ENTRY=1<br />
TIMEOUT=3<br />
<br />
:Arch<br />
COMMENT=Arch Linux<br />
<br />
PROTOCOL=linux<br />
KERNEL_PATH=boot:///vmlinuz-linux<br />
CMDLINE=root=UUID=c0748521-eca9-4f38-989c-43811b6e39a1 rw loglevel=3<br />
'''MODULE_PATH=boot:///''cpu_manufacturer-ucode''.img'''<br />
MODULE_PATH=boot:///initramfs-linux.img<br />
}}<br />
<br />
=== 遅延ロード ===<br />
<br />
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 以降で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}<br />
<br />
マイクロコードアップデートの遅延ロードは、システムが起動し終わった後に行われます。その時、{{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるファイルが使用されます。<br />
<br />
遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462]<br />
<br />
AMD プロセッサの場合、マイクロコードのアップデートファイルは {{Pkg|amd-ucode}} により提供されます。<br />
<br />
Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません ({{Bug|59841}})。遅延ロードするには [https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases Intel が提供しているアーカイブ]から手動で {{ic|intel-ucode/}} を抽出する必要があります。<br />
<br />
==== マイクロコードのアップデートの遅延ロード ====<br />
<br />
実行中のシステムで手動でマイクロコードをアップデートするには (例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後に):<br />
<br />
# echo 1 > /sys/devices/system/cpu/microcode/reload<br />
<br />
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。<br />
<br />
== 起動時にマイクロコードのアップデートがされたか確認する ==<br />
<br />
マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください:<br />
<br />
# journalctl -k --grep=microcode<br />
<br />
Intel が載っているシステムでは、起動時に以下のような表示がされます (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています):<br />
<br />
kernel: microcode: Current revision: 0x00000012<br />
kernel: microcode: Updated early from: 0x0000000e<br />
<br />
場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。<br />
<br />
AMD 環境でマイクロコードを早期ロードしている場合、以下のように出力されます:<br />
<br />
kernel: microcode: CPU3: patch_level=0x0a20102b<br />
kernel: microcode: CPU10: patch_level=0x0a20102b<br />
...<br />
kernel: microcode: Microcode Update Driver: v2.2.<br />
<br />
AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。<br />
<br />
== マイクロコードのアップデートができる CPU ==<br />
<br />
特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます:<br />
<br />
* [[Gentoo:AMD microcode#Specific firmware only]]。<br />
* [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。<br />
<br />
=== マイクロコードのアップデートが必要かどうか確認する ===<br />
<br />
{{Pkg|iucode-tool}} を使って、使用している CPU のマイクロコードイメージが {{ic|intel-ucode.img}} に含まれているかどうか確認できます。<br />
<br />
# {{Pkg|intel-ucode}} を[[インストール]] (アップデートがあるかどうか確認するのに initrd の変更は必要ありません)<br />
# {{Pkg|iucode-tool}} を[[インストール]]<br />
# {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}}<br />
# マイクロコードイメージを展開して cpuid で検索:<br/>{{bc|# bsdtar -Oxf /boot/intel-ucode.img {{!}} iucode_tool -tb -lS -}}<br />
# アップデートが存在する場合は、''selected microcodes'' の下に表示されます。<br />
# メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes – Experiences in the community]<br />
* [http://inertiawar.com/microcode/ Intel マイクロコードアップデートのノート – Ben Hawkes]<br />
* [https://docs.kernel.org/arch/x86/microcode.html カーネルマイクロコードローダ – カーネルドキュメント]<br />
* [https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ – AnandTech]<br />
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]<br />
<br />
{{TranslationStatus|Microcode|2024-03-13|802818}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36512
ゲーム
2024-03-11T11:30:58Z
<p>AshMyzk: TranslationStatus</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
一部の SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。もう一つの X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [https://www.xonotic.org/ Xonotic] を使っています):<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
<br />
さらに、別の X 設定ファイルを使うことでカスタマイズすることもできます:<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
<br />
別の ''xorg.conf'' を使う理由としては、メインの設定で NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしている場合などがあります。これが望ましくない場合は、セカンドスクリーンを無効にした設定を使って二番目の X を起動するのが良いでしょう。注意点として、この X 設定ファイルの場所は {{ic|/etc/X11}} ディレクトリからの相対パスとなります。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
ファイルを[[実行可能属性|実行可能]]にしたら、次のようにしてスクリプトを使うことが可能です:<br />
<br />
$ ~/game.sh xonotic-glx<br />
<br />
{{Note|{{ic|/etc/X11/xorg.conf.d}} 内の設定ファイルをロードさせたくない場合は、{{ic|-configdir}} オプションを使って、空のディレクトリを指すようにすると良いでしょう。}}<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、以下のファイルを[[作成]]してください:<br />
<br />
{{hc|~/.alsoftrc|2=<br />
hrtf = true<br />
}}<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== PulseAudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== Realtime 優先度と負の nice レベルを有効にする ====<br />
<br />
PulseAudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
<br />
{{hc|1=/etc/pulse/daemon.conf|2=<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
}}<br />
<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の PulseAudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
== リモートプレイ ==<br />
<br />
[[Wikipedia:ja:クラウドゲーム|クラウドゲーム]]は、クライアント側のハードウェア要件が低いため、近年大きな人気を集めています。クラウドゲームにおいて唯一重要なことは、最低速度が 5 から 10 Mbit/s (ビデオ品質やフレームレートに依ります) の安定したインターネット接続です (イーサネットケーブル接続か 5 GHz WiFi を推奨)。<br />
<br />
ネットワーク経由でのゲームパッドの使用を通常サポートしていないサービスで、ネットワーク経由でゲームパッドを使用する方法については、[[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
<br />
{{Note|ブラウザで動作するサービスのほとんどは、たいてい {{AUR|google-chrome}} との互換性しか保証していません。}}<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! サービス<br />
! class="unsortable" | インストーラ<br />
! ブラウザクライアントでの利用<br />
! 自身のホストを使う<br />
! ホストの貸出<br />
! フルデスクトップサポート<br />
! コントローラサポート<br />
! class="unsortable" | 備考<br />
|-<br />
| [https://dixper.gg/ Dixper] || {{-}} || {{Yes}} || {{Y|Windows のみ}} || ? || ? || ? || {{-}}<br />
|-<br />
| [https://reemo.io/ Reemo] || {{AUR|reemod-bin}} || {{Y|Chromium ベースブラウザのみ}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Y|Windows のみ}} || ウェブサイトのダウンロードセクションにある公式インストールスクリプトでソフトウェアをインストールすることもできます。<br />
|-<br />
| [https://xbox.com/play Xbox Cloud] || {{AUR|xbox-cloud-gaming}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || XCloud を使用するには Game Pass Ultimate が必要です。<br />
|-<br />
| [[GeForce Now]] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するには、Steam、Epic Client、あるいは GOG 上のゲームが必要です。<br />
|-<br />
| [https://moonlight-stream.org/ Moonlight] || {{AUR|moonlight-qt}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || これは単なるクライアントです。ホストマシンは GeForce Experience (Windows のみ) か [https://github.com/SunshineStream/Sunshine Sunshine] (マルチプラットフォーム) を使用しなければなりません。<br />
|-<br />
| [https://parsec.app/ Parsec] || {{AUR|parsec-bin}} || {{Yes}} (実験的) || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{Yes}} || クラウドホスティングは[https://support.parsecgaming.com/hc/en-us/articles/360031038112-Cloud-Computer-Update もはや利用できなくなっています]{{Dead link|2023|05|06|status=404}}。<br />
|-<br />
| [https://github.com/mbroemme/vdi-stream-client VDI Stream Client] || {{AUR|vdi-stream-client}} || {{No}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{No}} || 3D GPU アクセラレーションと組み込みの USB リダイレクトをサポートしている VDI クライアント。<br />
|-<br />
| [https://playkey.net/ Playkey] || {{AUR|playkey-linux}} || ? || ? || ? || ? || ? || {{-}}<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-gb/ps-now/ps-now-on-pc/ PlayStation Now] || [[Wine]] か [[Steam]] の Proton で動作します。 || {{No}} || {{No}} || {{-}} || {{No}} || {{Yes}} || PC 上で PS4、PS3、PS2 のゲームをプレイできます。あるいは、[[ビデオゲームプラットフォームエミュレーター|エミュレータ]]を使うという手もあります。<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-us/remote-play/ PlayStation Remote Play] || {{AUR|chiaki}} || {{No}} || {{Yes}} || {{-}} || {{Yes}} || {{Yes}} || PS4 や PS5 のゲームを PC でプレイできます。<br />
|-<br />
| [https://rainway.com/ Rainway] || 2019 Q3 に登場予定。 || {{Yes}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || ? || {{-}}<br />
|-<br />
| [https://shadow.tech/ Shadow] || '''安定版:''' {{AUR|shadow-tech}} <br> '''ベータ版''': {{AUR|shadow-beta}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || コントローラサポートは USB over IP に依存しています。現在、AVC のみのサポートとなっており、HEVC はサポートされていません。<br />
|-<br />
| [[Steam#Steam Remote Play|Steam Remote Play]] || {{pkg|steam}} に含まれています || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{-}}<br />
|-<br />
|-<br />
| [https://stadia.google.com Stadia] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || サービスは2023年1月18日に終了します。<br />
|-<br />
| [https://vortex.gg/ Vortex]{{Dead link|2024|01|29|status=404}} || {{-}} || {{Yes}} || {{No}} || {{-}} || {{No}} || ? || {{-}}<br />
|-<br />
| [[VNC]] || {{pkg|tigervnc}} or {{pkg|x11vnc}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || 汎用のリモートデスクトッププロトコル。LAN 経由でゲームする場合には、レイテンシは十分に低いはずです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[xrdp]] || {{AUR|xrdp}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || もう一つの汎用リモートデスクトッププロトコル。[[xrdp#グラフィックアクセラレーション|グラフィカルアクセラレーション]]を設定すれば、OpenGL 及び Vulkan の両方がサポートされます。LAN 経由でゲームをする場合におすすめです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[X11 フォワーディング]] || {{pkg|openssh}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || [[VirtualGL]] による SSH 経由での X フォワーディングは OpenGL をサポートしており、全てではありませんが一部のゲームで動作します。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [https://boosteroid.com/ Boosteroid] || {{AUR|boosteroid}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはデジタル配信プラットフォーム (Steam、EGS、Origin など) 上のゲームが必要です。全てのゲームが利用できるわけではありません。ゲームの完全なリストを見るにはサインアップ (無料) する必要があります。デジタル配信プラットフォーム上であなたが所有しているゲームを起動するには、サブスクリプションを購入する必要があります。<br />
|-<br />
| [https://www.blacknut.com/ Blacknut] || {{AUR|blacknut-appimage}} または [https://www.blacknut.com/en/download/linux Blacknut AppImage] || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはサブスクリプションが必要です。全てのゲームが利用できるわけではありません。<br />
|}<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事 ([[パフォーマンスの向上]]) も参照してください。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、(変動のない) 安定した応答時間、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。TSC を利用可能にし有効化するには、以下の[[カーネルパラメータ]]を追加してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
{{Warning|{{ic|tsc}} タイマーの信頼性が乏しい場合にこのタイマーを強制すると、{{ic|clock_gettime(CLOCK_MONOTONIC)}}[https://mastodon.yuuta.moe/@coelacanthus/110996261222325004] の単調増加性 (Firefox はこれに依存しています) が破壊され、Firefox がランダムにクラッシュする原因になります。このタイマーは自己責任で使用してください!}}<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
リアルタイムカーネルにはデフォルトでいくつかのメリット ([[リアルタイムカーネル]]の記事を参照) がありますが、CPU のスループットが犠牲になり、また割り込み処理が遅延する可能性もあります。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
(Transparent) Hugepage の割り当てに対する proactive compaction は、割り当ての平均時間を減少させますが、最大時の時間を減らすとは限りません。Proactive compaction は、[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルのドキュメント]によると応答時間の揺れを生じさせるので ([https://nitingupta.dev/post/proactive-compaction/ 内部での動作])、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
メモリの断片化が発生した場合にページブロック1つ (x86_64 では 2MB) だけをデフラグするようにするために、watermark boost factor を減らしてください。こうすることで、メモリの断片化の発生後、アプリケーションのデータがプロセッサキャッシュの最終レベルに残りやすくなります。<br />
<br />
# echo 1 > /proc/sys/vm/watermark_boost_factor<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]。この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
RAM の空き領域が十分にある場合、アロケーション時に応答時間が増加する可能性をさらに減らすために、watermark scale factor を増やしてください (説明: [https://blogs.oracle.com/linux/post/anticipating-your-memory-needs][https://blogs.oracle.com/linux/post/anticipating-your-memory-needs-2])。Watermark の位置を RAM の 5% に設定するには:<br />
<br />
# echo 500 > /proc/sys/vm/watermark_scale_factor<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します)、swappiness を減らしてください:<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
Multi-Gen Least Recently Used (MGLRU) を有効化してください (小さなパフォーマンスコストでロック競合の可能性を減らします [https://docs.kernel.org/admin-guide/mm/multigen_lru.html]):<br />
<br />
# echo 5 > /sys/kernel/mm/lru_gen/enabled<br />
<br />
Zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
パフォーマンスコストの観点から Transparent HugePages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/] madvise と advise を使用することで、アプリケーションが明示的に要求した場合に限り有効化します:<br />
<br />
{{bc|<br />
# echo madvise > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo advise > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html][https://www.amd.com/system/files/documents/58016-epyc-9004-tg-java.pdf#page=29]:<br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 3000 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 3000000 > /sys/kernel/debug/sched/base_slice_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument # default value as of linux 6.6<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0 # 20<br />
w /proc/sys/vm/watermark_boost_factor - - - - 1 # 15000<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576 # 67584<br />
w /proc/sys/vm/watermark_scale_factor - - - - 500 # 10<br />
w /proc/sys/vm/swappiness - - - - 10 # 60<br />
w /sys/kernel/mm/lru_gen/enabled - - - - 5 # 7<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0 # 0 <br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - madvise # always<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - advise # never<br />
w /sys/kernel/mm/transparent_hugepage/defrag - - - - never # madvise<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1 # 5<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0 # 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1 # 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 3000 # 5000<br />
w /sys/kernel/debug/sched/base_slice_ns - - - - 3000000 # 3000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000 # 500000<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8 # 32<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' などのプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
==== Gamescope ====<br />
<br />
[[Gamescope]] は、Valve によって開発されているマイクロコンポジタです。Steam Deck で使用されています。このプロジェクトの目的は、ゲーミング向けに調整され、多くのゲーム中心の機能をサポートする独立したコンポジタを提供することです。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集<br />
<br />
{{TranslationStatus|Gaming|2024-03-11|802585}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36511
ゲーム
2024-03-11T11:30:27Z
<p>AshMyzk: /* パフォーマンスを向上させる */ 同期</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
一部の SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。もう一つの X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [https://www.xonotic.org/ Xonotic] を使っています):<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
<br />
さらに、別の X 設定ファイルを使うことでカスタマイズすることもできます:<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
<br />
別の ''xorg.conf'' を使う理由としては、メインの設定で NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしている場合などがあります。これが望ましくない場合は、セカンドスクリーンを無効にした設定を使って二番目の X を起動するのが良いでしょう。注意点として、この X 設定ファイルの場所は {{ic|/etc/X11}} ディレクトリからの相対パスとなります。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
ファイルを[[実行可能属性|実行可能]]にしたら、次のようにしてスクリプトを使うことが可能です:<br />
<br />
$ ~/game.sh xonotic-glx<br />
<br />
{{Note|{{ic|/etc/X11/xorg.conf.d}} 内の設定ファイルをロードさせたくない場合は、{{ic|-configdir}} オプションを使って、空のディレクトリを指すようにすると良いでしょう。}}<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、以下のファイルを[[作成]]してください:<br />
<br />
{{hc|~/.alsoftrc|2=<br />
hrtf = true<br />
}}<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== PulseAudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== Realtime 優先度と負の nice レベルを有効にする ====<br />
<br />
PulseAudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
<br />
{{hc|1=/etc/pulse/daemon.conf|2=<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
}}<br />
<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の PulseAudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
== リモートプレイ ==<br />
<br />
[[Wikipedia:ja:クラウドゲーム|クラウドゲーム]]は、クライアント側のハードウェア要件が低いため、近年大きな人気を集めています。クラウドゲームにおいて唯一重要なことは、最低速度が 5 から 10 Mbit/s (ビデオ品質やフレームレートに依ります) の安定したインターネット接続です (イーサネットケーブル接続か 5 GHz WiFi を推奨)。<br />
<br />
ネットワーク経由でのゲームパッドの使用を通常サポートしていないサービスで、ネットワーク経由でゲームパッドを使用する方法については、[[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
<br />
{{Note|ブラウザで動作するサービスのほとんどは、たいてい {{AUR|google-chrome}} との互換性しか保証していません。}}<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! サービス<br />
! class="unsortable" | インストーラ<br />
! ブラウザクライアントでの利用<br />
! 自身のホストを使う<br />
! ホストの貸出<br />
! フルデスクトップサポート<br />
! コントローラサポート<br />
! class="unsortable" | 備考<br />
|-<br />
| [https://dixper.gg/ Dixper] || {{-}} || {{Yes}} || {{Y|Windows のみ}} || ? || ? || ? || {{-}}<br />
|-<br />
| [https://reemo.io/ Reemo] || {{AUR|reemod-bin}} || {{Y|Chromium ベースブラウザのみ}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Y|Windows のみ}} || ウェブサイトのダウンロードセクションにある公式インストールスクリプトでソフトウェアをインストールすることもできます。<br />
|-<br />
| [https://xbox.com/play Xbox Cloud] || {{AUR|xbox-cloud-gaming}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || XCloud を使用するには Game Pass Ultimate が必要です。<br />
|-<br />
| [[GeForce Now]] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するには、Steam、Epic Client、あるいは GOG 上のゲームが必要です。<br />
|-<br />
| [https://moonlight-stream.org/ Moonlight] || {{AUR|moonlight-qt}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || これは単なるクライアントです。ホストマシンは GeForce Experience (Windows のみ) か [https://github.com/SunshineStream/Sunshine Sunshine] (マルチプラットフォーム) を使用しなければなりません。<br />
|-<br />
| [https://parsec.app/ Parsec] || {{AUR|parsec-bin}} || {{Yes}} (実験的) || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{Yes}} || クラウドホスティングは[https://support.parsecgaming.com/hc/en-us/articles/360031038112-Cloud-Computer-Update もはや利用できなくなっています]{{Dead link|2023|05|06|status=404}}。<br />
|-<br />
| [https://github.com/mbroemme/vdi-stream-client VDI Stream Client] || {{AUR|vdi-stream-client}} || {{No}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{No}} || 3D GPU アクセラレーションと組み込みの USB リダイレクトをサポートしている VDI クライアント。<br />
|-<br />
| [https://playkey.net/ Playkey] || {{AUR|playkey-linux}} || ? || ? || ? || ? || ? || {{-}}<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-gb/ps-now/ps-now-on-pc/ PlayStation Now] || [[Wine]] か [[Steam]] の Proton で動作します。 || {{No}} || {{No}} || {{-}} || {{No}} || {{Yes}} || PC 上で PS4、PS3、PS2 のゲームをプレイできます。あるいは、[[ビデオゲームプラットフォームエミュレーター|エミュレータ]]を使うという手もあります。<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-us/remote-play/ PlayStation Remote Play] || {{AUR|chiaki}} || {{No}} || {{Yes}} || {{-}} || {{Yes}} || {{Yes}} || PS4 や PS5 のゲームを PC でプレイできます。<br />
|-<br />
| [https://rainway.com/ Rainway] || 2019 Q3 に登場予定。 || {{Yes}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || ? || {{-}}<br />
|-<br />
| [https://shadow.tech/ Shadow] || '''安定版:''' {{AUR|shadow-tech}} <br> '''ベータ版''': {{AUR|shadow-beta}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || コントローラサポートは USB over IP に依存しています。現在、AVC のみのサポートとなっており、HEVC はサポートされていません。<br />
|-<br />
| [[Steam#Steam Remote Play|Steam Remote Play]] || {{pkg|steam}} に含まれています || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{-}}<br />
|-<br />
|-<br />
| [https://stadia.google.com Stadia] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || サービスは2023年1月18日に終了します。<br />
|-<br />
| [https://vortex.gg/ Vortex]{{Dead link|2024|01|29|status=404}} || {{-}} || {{Yes}} || {{No}} || {{-}} || {{No}} || ? || {{-}}<br />
|-<br />
| [[VNC]] || {{pkg|tigervnc}} or {{pkg|x11vnc}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || 汎用のリモートデスクトッププロトコル。LAN 経由でゲームする場合には、レイテンシは十分に低いはずです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[xrdp]] || {{AUR|xrdp}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || もう一つの汎用リモートデスクトッププロトコル。[[xrdp#グラフィックアクセラレーション|グラフィカルアクセラレーション]]を設定すれば、OpenGL 及び Vulkan の両方がサポートされます。LAN 経由でゲームをする場合におすすめです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[X11 フォワーディング]] || {{pkg|openssh}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || [[VirtualGL]] による SSH 経由での X フォワーディングは OpenGL をサポートしており、全てではありませんが一部のゲームで動作します。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [https://boosteroid.com/ Boosteroid] || {{AUR|boosteroid}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはデジタル配信プラットフォーム (Steam、EGS、Origin など) 上のゲームが必要です。全てのゲームが利用できるわけではありません。ゲームの完全なリストを見るにはサインアップ (無料) する必要があります。デジタル配信プラットフォーム上であなたが所有しているゲームを起動するには、サブスクリプションを購入する必要があります。<br />
|-<br />
| [https://www.blacknut.com/ Blacknut] || {{AUR|blacknut-appimage}} または [https://www.blacknut.com/en/download/linux Blacknut AppImage] || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはサブスクリプションが必要です。全てのゲームが利用できるわけではありません。<br />
|}<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事 ([[パフォーマンスの向上]]) も参照してください。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、(変動のない) 安定した応答時間、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。TSC を利用可能にし有効化するには、以下の[[カーネルパラメータ]]を追加してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
{{Warning|{{ic|tsc}} タイマーの信頼性が乏しい場合にこのタイマーを強制すると、{{ic|clock_gettime(CLOCK_MONOTONIC)}}[https://mastodon.yuuta.moe/@coelacanthus/110996261222325004] の単調増加性 (Firefox はこれに依存しています) が破壊され、Firefox がランダムにクラッシュする原因になります。このタイマーは自己責任で使用してください!}}<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
リアルタイムカーネルにはデフォルトでいくつかのメリット ([[リアルタイムカーネル]]の記事を参照) がありますが、CPU のスループットが犠牲になり、また割り込み処理が遅延する可能性もあります。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
(Transparent) Hugepage の割り当てに対する proactive compaction は、割り当ての平均時間を減少させますが、最大時の時間を減らすとは限りません。Proactive compaction は、[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルのドキュメント]によると応答時間の揺れを生じさせるので ([https://nitingupta.dev/post/proactive-compaction/ 内部での動作])、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
メモリの断片化が発生した場合にページブロック1つ (x86_64 では 2MB) だけをデフラグするようにするために、watermark boost factor を減らしてください。こうすることで、メモリの断片化の発生後、アプリケーションのデータがプロセッサキャッシュの最終レベルに残りやすくなります。<br />
<br />
# echo 1 > /proc/sys/vm/watermark_boost_factor<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]。この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
RAM の空き領域が十分にある場合、アロケーション時に応答時間が増加する可能性をさらに減らすために、watermark scale factor を増やしてください (説明: [https://blogs.oracle.com/linux/post/anticipating-your-memory-needs][https://blogs.oracle.com/linux/post/anticipating-your-memory-needs-2])。Watermark の位置を RAM の 5% に設定するには:<br />
<br />
# echo 500 > /proc/sys/vm/watermark_scale_factor<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します)、swappiness を減らしてください:<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
Multi-Gen Least Recently Used (MGLRU) を有効化してください (小さなパフォーマンスコストでロック競合の可能性を減らします [https://docs.kernel.org/admin-guide/mm/multigen_lru.html]):<br />
<br />
# echo 5 > /sys/kernel/mm/lru_gen/enabled<br />
<br />
Zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
パフォーマンスコストの観点から Transparent HugePages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/] madvise と advise を使用することで、アプリケーションが明示的に要求した場合に限り有効化します:<br />
<br />
{{bc|<br />
# echo madvise > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo advise > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html][https://www.amd.com/system/files/documents/58016-epyc-9004-tg-java.pdf#page=29]:<br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 3000 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 3000000 > /sys/kernel/debug/sched/base_slice_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument # default value as of linux 6.6<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0 # 20<br />
w /proc/sys/vm/watermark_boost_factor - - - - 1 # 15000<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576 # 67584<br />
w /proc/sys/vm/watermark_scale_factor - - - - 500 # 10<br />
w /proc/sys/vm/swappiness - - - - 10 # 60<br />
w /sys/kernel/mm/lru_gen/enabled - - - - 5 # 7<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0 # 0 <br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - madvise # always<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - advise # never<br />
w /sys/kernel/mm/transparent_hugepage/defrag - - - - never # madvise<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1 # 5<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0 # 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1 # 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 3000 # 5000<br />
w /sys/kernel/debug/sched/base_slice_ns - - - - 3000000 # 3000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000 # 500000<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8 # 32<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' などのプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
==== Gamescope ====<br />
<br />
[[Gamescope]] は、Valve によって開発されているマイクロコンポジタです。Steam Deck で使用されています。このプロジェクトの目的は、ゲーミング向けに調整され、多くのゲーム中心の機能をサポートする独立したコンポジタを提供することです。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36510
ゲーム
2024-03-11T10:43:12Z
<p>AshMyzk: /* ゲームの設定 */ 同期</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
一部の SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。もう一つの X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [https://www.xonotic.org/ Xonotic] を使っています):<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
<br />
さらに、別の X 設定ファイルを使うことでカスタマイズすることもできます:<br />
<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
<br />
別の ''xorg.conf'' を使う理由としては、メインの設定で NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしている場合などがあります。これが望ましくない場合は、セカンドスクリーンを無効にした設定を使って二番目の X を起動するのが良いでしょう。注意点として、この X 設定ファイルの場所は {{ic|/etc/X11}} ディレクトリからの相対パスとなります。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
ファイルを[[実行可能属性|実行可能]]にしたら、次のようにしてスクリプトを使うことが可能です:<br />
<br />
$ ~/game.sh xonotic-glx<br />
<br />
{{Note|{{ic|/etc/X11/xorg.conf.d}} 内の設定ファイルをロードさせたくない場合は、{{ic|-configdir}} オプションを使って、空のディレクトリを指すようにすると良いでしょう。}}<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、以下のファイルを[[作成]]してください:<br />
<br />
{{hc|~/.alsoftrc|2=<br />
hrtf = true<br />
}}<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it does not interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== PulseAudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== Realtime 優先度と負の nice レベルを有効にする ====<br />
<br />
PulseAudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
<br />
{{hc|1=/etc/pulse/daemon.conf|2=<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
}}<br />
<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の PulseAudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
== リモートプレイ ==<br />
<br />
[[Wikipedia:ja:クラウドゲーム|クラウドゲーム]]は、クライアント側のハードウェア要件が低いため、近年大きな人気を集めています。クラウドゲームにおいて唯一重要なことは、最低速度が 5 から 10 Mbit/s (ビデオ品質やフレームレートに依ります) の安定したインターネット接続です (イーサネットケーブル接続か 5 GHz WiFi を推奨)。<br />
<br />
ネットワーク経由でのゲームパッドの使用を通常サポートしていないサービスで、ネットワーク経由でゲームパッドを使用する方法については、[[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
<br />
{{Note|ブラウザで動作するサービスのほとんどは、たいてい {{AUR|google-chrome}} との互換性しか保証していません。}}<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! サービス<br />
! class="unsortable" | インストーラ<br />
! ブラウザクライアントでの利用<br />
! 自身のホストを使う<br />
! ホストの貸出<br />
! フルデスクトップサポート<br />
! コントローラサポート<br />
! class="unsortable" | 備考<br />
|-<br />
| [https://dixper.gg/ Dixper] || {{-}} || {{Yes}} || {{Y|Windows のみ}} || ? || ? || ? || {{-}}<br />
|-<br />
| [https://reemo.io/ Reemo] || {{AUR|reemod-bin}} || {{Y|Chromium ベースブラウザのみ}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Y|Windows のみ}} || ウェブサイトのダウンロードセクションにある公式インストールスクリプトでソフトウェアをインストールすることもできます。<br />
|-<br />
| [https://xbox.com/play Xbox Cloud] || {{AUR|xbox-cloud-gaming}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || XCloud を使用するには Game Pass Ultimate が必要です。<br />
|-<br />
| [[GeForce Now]] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するには、Steam、Epic Client、あるいは GOG 上のゲームが必要です。<br />
|-<br />
| [https://moonlight-stream.org/ Moonlight] || {{AUR|moonlight-qt}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || これは単なるクライアントです。ホストマシンは GeForce Experience (Windows のみ) か [https://github.com/SunshineStream/Sunshine Sunshine] (マルチプラットフォーム) を使用しなければなりません。<br />
|-<br />
| [https://parsec.app/ Parsec] || {{AUR|parsec-bin}} || {{Yes}} (実験的) || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{Yes}} || クラウドホスティングは[https://support.parsecgaming.com/hc/en-us/articles/360031038112-Cloud-Computer-Update もはや利用できなくなっています]{{Dead link|2023|05|06|status=404}}。<br />
|-<br />
| [https://github.com/mbroemme/vdi-stream-client VDI Stream Client] || {{AUR|vdi-stream-client}} || {{No}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{No}} || 3D GPU アクセラレーションと組み込みの USB リダイレクトをサポートしている VDI クライアント。<br />
|-<br />
| [https://playkey.net/ Playkey] || {{AUR|playkey-linux}} || ? || ? || ? || ? || ? || {{-}}<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-gb/ps-now/ps-now-on-pc/ PlayStation Now] || [[Wine]] か [[Steam]] の Proton で動作します。 || {{No}} || {{No}} || {{-}} || {{No}} || {{Yes}} || PC 上で PS4、PS3、PS2 のゲームをプレイできます。あるいは、[[ビデオゲームプラットフォームエミュレーター|エミュレータ]]を使うという手もあります。<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-us/remote-play/ PlayStation Remote Play] || {{AUR|chiaki}} || {{No}} || {{Yes}} || {{-}} || {{Yes}} || {{Yes}} || PS4 や PS5 のゲームを PC でプレイできます。<br />
|-<br />
| [https://rainway.com/ Rainway] || 2019 Q3 に登場予定。 || {{Yes}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || ? || {{-}}<br />
|-<br />
| [https://shadow.tech/ Shadow] || '''安定版:''' {{AUR|shadow-tech}} <br> '''ベータ版''': {{AUR|shadow-beta}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || コントローラサポートは USB over IP に依存しています。現在、AVC のみのサポートとなっており、HEVC はサポートされていません。<br />
|-<br />
| [[Steam#Steam Remote Play|Steam Remote Play]] || {{pkg|steam}} に含まれています || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{-}}<br />
|-<br />
|-<br />
| [https://stadia.google.com Stadia] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || サービスは2023年1月18日に終了します。<br />
|-<br />
| [https://vortex.gg/ Vortex]{{Dead link|2024|01|29|status=404}} || {{-}} || {{Yes}} || {{No}} || {{-}} || {{No}} || ? || {{-}}<br />
|-<br />
| [[VNC]] || {{pkg|tigervnc}} or {{pkg|x11vnc}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || 汎用のリモートデスクトッププロトコル。LAN 経由でゲームする場合には、レイテンシは十分に低いはずです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[xrdp]] || {{AUR|xrdp}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || もう一つの汎用リモートデスクトッププロトコル。[[xrdp#グラフィックアクセラレーション|グラフィカルアクセラレーション]]を設定すれば、OpenGL 及び Vulkan の両方がサポートされます。LAN 経由でゲームをする場合におすすめです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[X11 フォワーディング]] || {{pkg|openssh}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || [[VirtualGL]] による SSH 経由での X フォワーディングは OpenGL をサポートしており、全てではありませんが一部のゲームで動作します。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [https://boosteroid.com/ Boosteroid] || {{AUR|boosteroid}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはデジタル配信プラットフォーム (Steam、EGS、Origin など) 上のゲームが必要です。全てのゲームが利用できるわけではありません。ゲームの完全なリストを見るにはサインアップ (無料) する必要があります。デジタル配信プラットフォーム上であなたが所有しているゲームを起動するには、サブスクリプションを購入する必要があります。<br />
|-<br />
| [https://www.blacknut.com/ Blacknut] || {{AUR|blacknut-appimage}} または [https://www.blacknut.com/en/download/linux Blacknut AppImage] || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはサブスクリプションが必要です。全てのゲームが利用できるわけではありません。<br />
|}<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事も参照してください: [[パフォーマンスの向上]]。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、安定した応答時間 (変動がない)、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。以下の[[カーネルパラメータ]]を追加することで、TSC を利用可能にし有効化してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
[[リアルタイムカーネル]]をインストールすることで、CPU のスループットが大幅に低下しますが、何も設定せずに応答時間を飛躍的に安定化させることができます。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルドキュメント]によると Proactive Compaction は応答時間の揺れを発生させるので、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]. この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します):<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
Transparent Huge Pages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/]<br />
<br />
{{bc|<br />
# echo never > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html]: <br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 500 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 1000000 > /sys/kernel/debug/sched/latency_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 500000 > /sys/kernel/debug/sched/min_granularity_ns<br />
# echo 0 > /sys/kernel/debug/sched/wakeup_granularity_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576<br />
w /proc/sys/vm/swappiness - - - - 10<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0<br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 500<br />
w /sys/kernel/debug/sched/latency_ns - - - - 1000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000<br />
w /sys/kernel/debug/sched/min_granularity_ns - - - - 500000<br />
w /sys/kernel/debug/sched/wakeup_granularity_ns - - - - 0<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' やその他のプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== fsync パッチ ===<br />
<br />
[[Steam#Fsync パッチ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。<br />
<br />
最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E9%9B%BB%E6%BA%90%E7%AE%A1%E7%90%86/%E3%82%B5%E3%82%B9%E3%83%9A%E3%83%B3%E3%83%89%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%90%E3%83%8D%E3%83%BC%E3%83%88&diff=36508
電源管理/サスペンドとハイバネート
2024-03-11T07:24:48Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:電源管理]]<br />
[[de:Bereitschaft und Ruhezustand]]<br />
[[en:Power management/Suspend and hibernate]]<br />
[[es:Power management (Español)/Suspend and hibernate]]<br />
[[pt:Power management (Português)/Suspend and hibernate]]<br />
[[ru:Power management (Русский)/Suspend and hibernate]]<br />
[[zh-hans:Power management/Suspend and hibernate]]<br />
{{Related articles start}}<br />
{{Related|systemd}}<br />
{{Related|電源管理}}<br />
{{Related|電源管理/復帰トリガー}}<br />
{{Related|スワップ}}<br />
{{Related articles end}}<br />
<br />
サスペンドの[https://docs.kernel.org/admin-guide/pm/sleep-states.html 複数の方法]を利用できます。とりわけ:<br />
<br />
; Suspend to idle: Intel は [https://www.intel.com/content/www/us/en/docs/vtune-profiler/user-guide/2023-0/s0ix-states.html S0ix] と呼んでおり、Microsoft は [https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby Modern Standby] (以前は "Connected Standby") と呼んでいます。Linux カーネルでは [https://docs.kernel.org/admin-guide/pm/sleep-states.html#suspend-to-idle S2Idle] と呼ばれています。サポートされているシステムにおいて '''S3''' [[Wikipedia:ACPI#Global states|スリープ状態]]の代わりに使用されるように設計されており、同等の節電機能を提供しますが、復帰に掛かる時間が大幅に短縮されます。{{Tip|[https://www.dell.com/support/kbdoc/en-us/000143524/the-battery-drains-quicker-than-expected-on-a-dell-notebook-with-modern-standby-mode-enabled Windows] や [https://support.apple.com/guide/mac-help/mh40773/mac macOS] はネットワーク活動のためにこの状態のデバイスの復帰をサポートしているので、これらの OS においてこの状態はバッテリーの消耗問題の影響を受けます。一方、Linux のソフトウェアエコシステムは現在この機能を使用しないため、影響を受けないはずです。}}<br />
; Suspend to RAM (サスペンド、スリープとも呼ばれます): ACPI で '''S3''' スリープ状態として定義されています。RAM を除くマシンのほとんど全てのパーツの電源を切ります。RAM への電源はマシンの状態を保存するために必要です。電力を多く節約できるので、ラップトップでは、バッテリーでコンピュータが稼働していてフタが閉じられた時 (もしくはユーザーが長い間操作しなかった時) は自動的にこのモードに移行するのが得策でしょう。<br />
; Suspend to disk (ハイバネートとも呼ばれます): ACPI で '''S4''' スリープ状態として定義されています。マシンの状態を[[スワップ|スワップ領域]]に保存してマシンの電源を完全にオフにします。マシンに電源を入れた時、状態が復元されます。それまでは、電力消費量は[[Wikipedia:ja:待機電力|ゼロ]]です。<br />
; Hybrid suspend (ハイブリットスリープとも呼ばれます): サスペンドとハイバネートのハイブリッドです。'''Suspend to both''' と呼ばれることもあります。マシンの状態をスワップ領域に保存しますが、マシンの電源を切りません。代わりに、デフォルトのサスペンドを呼び出します。これによって、バッテリーを使いきっても、システムは即座に復帰できます。バッテリーが枯渇した時は、システムはディスクから復帰し、RAM からの復帰に比べて時間がかかりますが、システムの状態が失われることはありません。<br />
<br />
カーネルは、基本的な機能を提供しており、問題のあるハードウェアドライバ/カーネルモジュール (例: ビデオカードの再初期化) に対処する機能を提供する高レベルなインターフェイスもいくつかあります。<br />
<br />
== カーネルのインターフェイス (swsusp) ==<br />
<br />
{{Note|カーネルのインターフェイスを直接使用することは可能です (ユーザー空間で追加の処理が無いので高速です) が、[[#高レベルインターフェイス (systemd)|高レベルインターフェイス]]を使用することが推奨されます。このインターフェイスは、追加の安全性チェックを行い、さらに、ハードウェアクロックの修正や無線ネットワークの回復などをするためのサスペンド前後のフック機構を提供しているので、より優れています。}}<br />
<br />
カーネル内のソフトウェアサスペンドコード (swsusp) にサスペンド状態に入るよう直接伝えることは可能です。実際の方法と状態はハードウェアサポートのレベルによります。最近のカーネルでは、サスペンドにするために {{ic|/sys/power/state}} に適切な文字列を書くことが主な方法になっています。<br />
<br />
詳しくは [https://docs.kernel.org/admin-guide/pm/sleep-states.html#basic-sysfs-interfaces-for-system-suspend-and-hibernation カーネルドキュメント] を参照してください。<br />
<br />
== 高レベルインターフェイス (systemd) ==<br />
<br />
{{Note|高レベルなインターフェイスの目的は、サスペンド/ハイバネートを行う際に利用できるバイナリ/スクリプトと、追加の準備/クリーンアップの作業を行うためのフックを実行する手段を提供することです。電源ボタンの押下、メニューのクリック、ノート PC の蓋イベントのときにスリープ状態に自動的に移行する方法については、[[電源管理#電源管理]] を見てください。}}<br />
<br />
[[systemd]] は、サスペンド、ハイバネート、ハイブリッドサスペンドを行うためのネイティブなコマンドを提供しています。これは、Arch Linux で使用されるデフォルトのインターフェイスです。<br />
<br />
{{ic|systemctl suspend}} は、特に設定せずとも動くはずです。{{ic|systemctl hibernate}} に関しては、[[#ハイバネーション]] の手順に従わないと動作しないかもしれません。<br />
<br />
また、サスペンドとハイバネートを組み合わせたようなモードが2つあります:<br />
<br />
* {{ic|systemctl hybrid-sleep}} は、システムを RAM とディスクの両方にサスペンドします。なので、電源が完全に失われても、データ損失が発生しません。このモードは ''suspend to both'' とも呼ばれています。<br />
* {{ic|systemctl suspend-then-hibernate}} は、最初は可能な限り長くシステムを RAM にサスペンドし、RTC アラームで復帰し、そしてハイバネートします。RTC アラームは {{man|5|systemd-sleep.conf}} 内の {{ic|HibernateDelaySec}} で設定します。デフォルトの値は、システムのバッテリーレベルが 5% に下がるまでの推定された時間に設定されます。システムにバッテリーが存在しない場合は、デフォルトで2時間に設定されます。推定時間は、{{man|5|systemd-sleep.conf}} 内の {{ic|SuspendEstimationSec}} によって指定された時間後のバッテリーレベルの変化から計算されます。{{ic|SuspendEstimationSec}} の時間後、システムは短い間サスペンドから復帰し、計測を行います (システムが手動でサスペンドから復帰された場合も、計測が行われます)。<br />
<br />
サスペンド/ハイバネートのフックの設定に関するその他の情報は、[[#スリープフック]] を見てください。また、{{man|1|systemctl}}、{{man|8|systemd-sleep}}、{{man|7|systemd.special}} も参照してください。<br />
<br />
== サスペンドの方法を変更する ==<br />
<br />
S0ix サスペンドが通常の S3 スリープと同じ節電機能を提供しないシステム、あるいは、電力を節約することが復帰を高速化することよりも優先される場合においては、デフォルトのサスペンド方法を変更することが可能です。<br />
<br />
{{Tip|S0ix は S3 スリープと同等かより高い節電性能を提供するはずです。意図通りに S0ix を機能させることができるかどうかは、次の Intel のブログ投稿を参照してください: [https://web.archive.org/web/20230614200816/https://01.org/blogs/qwang59/2018/how-achieve-s0ix-states-linux How to achieve S0ix states in Linux]、[https://web.archive.org/web/20230614200306/https://01.org/blogs/qwang59/2020/linux-s0ix-troubleshooting Linux S0ix Troubleshooting]、[https://01.org/blogs/thac0/2019/idling-efficiently-linux-case-study Idling Efficiently on Linux: A Case Study]。Intel システムでは [https://github.com/intel/S0ixSelftestTool S0ixSelftestTool] を使うことができます。}}<br />
<br />
以下のコマンドは、ハードウェアによってサポートされていると広告されている全てのサスペンド方法を出力します (現在のサスペンド方法は角括弧に囲まれます[https://docs.kernel.org/admin-guide/pm/sleep-states.html#basic-sysfs-interfaces-for-system-suspend-and-hibernation]):<br />
<br />
{{hc|$ cat /sys/power/mem_sleep|<br />
[s2idle] shallow deep<br />
}}<br />
<br />
ハードウェアが {{ic|deep}} スリープ状態を広告していない場合、UEFI にそのような設定がないか確認してください。通常、''Power'' や ''Sleep state'' などのような項目にあります。S0ix のオプションは ''Windows 10'' や ''Windows and Linux'' や ''S3/Modern standby support'' という名前です。S3 スリープのオプションは ''Legacy''、''Linux''、''Linux S3''、''S3 enabled'' という名前です。設定できない場合、{{ic|s2idle}} を使い続けることもできます、[[ハイバネート]] を使うことを検討するか、[[DSDT]] テーブルにパッチを当ててみてください (あるいは、パッチ適用済みのバージョンを見つけてください)。<br />
<br />
{{Note|最後の解決策は将来的に問題が発生する可能性があります。Windows を同梱しているシステムではデフォルトで "Modern standby" を使うよう推奨されているため、メーカーは ACPI S3 状態のバグの修正を停止しています。メーカーが自発的にそれを広告していない場合、おそらく、S3 状態は何らかの形で壊れています。}}<br />
<br />
スリープの方法を変更したあと、スリープサイクルを何回かテストして、ハードウェアが S3 スリープで問題を起こさないかテストしてください:<br />
<br />
# echo "deep" > /sys/power/mem_sleep<br />
<br />
問題が無ければ、{{ic|1=mem_sleep_default=deep}} [[カーネルパラメータ]] を使って変更を永続化できます。<br />
<br />
いくつかの逆の状況では、問題のあるファームウェアが {{ic|s2idle}} しかサポートしていないにも関わらず、{{ic|deep}} をサポートしていると広告することがあります。この場合、{{man|5|sleep.conf.d}} 内で {{ic|SuspendState}} を使うことにより、{{ic|s2idle}} を使うことができます:<br />
<br />
{{hc|/etc/systemd/sleep.conf.d/freeze.conf|2=<br />
[Sleep]<br />
SuspendState=freeze<br />
}}<br />
<br />
== ハイバネーション ==<br />
<br />
ハイバネートを行うには、次のことを行う必要があります: [[スワップ]]パーティションかスワップファイルの作成する。初期ユーザー空間で復帰プロセスを初期化できるようにするために [[#initramfs の設定|initramfs を設定する]]。Initramfs から利用できる方法でスワップ領域の場所を指定する (例えば、{{ic|HibernateLocation}} EFI 変数を [[systemd]] で定義したり、{{ic|1=resume=}} [[カーネルパラメータ]]を設定したり)。これらの3つの手順は以下で詳細に説明されています。<br />
<br />
{{Note|<br />
* [[ディスク暗号化]]を利用する場合は[[dm-crypt/スワップの暗号化#suspend-to-disk を使用する]]を見てください。<br />
* {{Pkg|linux-hardened}}はハイバネーションをサポートしていません。詳しくは{{Bug|63648}}を見てください。<br />
* zram 上のスワップへのハイバネートはサポートされていません。たとえ zram が永久記憶装置上のバッキングデバイスを使うように設定されていたとしてもです。''logind'' は、zram 上のスワップ領域へハイバネートしようとする試みから保護します。<br />
}}<br />
<br />
=== スワップパーティション(ファイル)のサイズについて ===<br />
<br />
スワップパーティションが RAM より小さかったとしても、ハイバネートが成功する可能性は高いと思われます。{{ic|image_size}} {{man|5|sysfs}} 疑似ファイルに関する情報は [https://docs.kernel.org/admin-guide/pm/sleep-states.html?highlight=image_size#basic-sysfs-interfaces-for-system-suspend-and-hibernation カーネルドキュメント]の "image_size" を見てください。<br />
<br />
(スワップパーティションを小さくして) {{ic|/sys/power/image_size}} の値を減らしてサスペンドのイメージを出来る限り小さくすることも、値を増やしてハイバネーションを高速化することも可能です。大きな容量の RAM を搭載しているシステムでは、より小さい値にするとハイバネートからの復帰が劇的に速くなることがあります。{{ic|image_size}} の値を再起動後も保持するために [[systemd#systemd-tmpfiles - 一時ファイル]] を使うことができます:<br />
<br />
{{hc|/etc/tmpfiles.d/hibernation_image_size.conf|<br />
# Path Mode UID GID Age Argument<br />
w /sys/power/image_size - - - - 0<br />
}}<br />
<br />
サスペンドイメージは複数のスワップパーティション/スワップファイルにまたがって保存することができません。イメージのすべての部分が1つのスワップパーティション/スワップファイルに収まらなければなりません。[https://docs.kernel.org/power/swsusp.html]<br />
<br />
=== initramfs の設定 ===<br />
<br />
* Busybox ベースの [[initramfs]] を使用している場合 (Arch ではデフォルトです)、{{ic|/etc/mkinitcpio.conf}} に {{ic|resume}} フックを追加する必要があります。ラベルあるいは UUID どちらを使用している場合でもスワップパーティションは udev デバイスノードによって参照されるので、{{ic|resume}} フックは {{ic|udev}} フックの''後''に追加する必要があります。デフォルトのフック設定に {{ic|resume}} フックを追加すると以下のようになります:<br />
<br />
:{{bc|1=HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems '''resume''' fsck)}}<br />
<br />
:変更を適用するために [[mkinitcpio#イメージ作成とアクティベーション|initramfs の再生成]]を忘れずに行ってください。<br />
<br />
:{{Note|スワップ領域にスタックされたストレージ (例えば、[[dm-crypt]]、[[RAID]]、[[LVM]]) を使用している場合は、最後のマッピングされるデバイスが、初期ユーザー空間内及び復帰プロセスの初期化前に利用できるようにする必要があります。つまり、どうすればよいかというと、{{ic|resume}} フックを {{ic|encrypt}} や {{ic|lvm2}} などのフックより後に置く必要があります (そのような環境である場合)。}}<br />
<br />
* initramfs で {{ic|systemd}} フックを使っている場合は、復帰機構が既に提供されているので、フックを追加する必要はありません。<br />
<br />
=== ハイバネート先指定を initramfs に渡す ===<br />
<br />
システムがハイバネートする際、メモリイメージがスワップ領域に保存されます (メモリイメージには、マウント済みファイルシステムの状態も含まれます)。そのため、ハイバネートから復帰できるようにするには、ハイバネート先がどこであるかという情報が、initramfs で (つまり、ルートファイルシステムがマウントされる前の時点で) 利用できるようにする必要があります。<br />
<br />
{{Pkg|systemd}} v255 及び {{Pkg|mkinitcpio}} v38 からは、システムが [[UEFI]] 上で実行されている場合、{{man|8|systemd-sleep}} はハイバネート先として適切なスワップ領域を自動的に選択し、使用されたスワップ領域の情報は {{ic|HibernateLocation}} EFI 変数に格納されます。次回のブート時には、{{man|8|systemd-hibernate-resume}} がこの EFI 変数からスワップ領域の場所を読み込み、システムが復帰します。よって、システムがレガシー [[Arch ブートプロセス#BIOS|BIOS]] を使用している場合や、あなたが自動的に選択されるスワップ領域とは別のスワップ領域を使用したい場合を除いて、以下の手順は必須ではありません。<br />
<br />
==== ハイバネート先を手動で指定する ====<br />
<br />
[[カーネルパラメータ]] {{ic|1=resume=''swap_device''}} を使用することで可能です。''swap_device'' は[[永続的なブロックデバイスの命名]]に従います。例えば:<br />
<br />
* {{ic|1=resume=/dev/sda1}}<br />
* {{ic|1=resume=UUID=4209c845-f495-4c43-8a03-5363dd433153}}<br />
* {{ic|1=resume=/dev/mapper/archVolumeGroup-archLogicVolume}} – スワップが [[LVM]] 論理ボリューム上にある場合 (UUID や Label も使えるはずです)<br />
<br />
[[カーネルパラメータ]]は再起動後に有効となります。すぐにハイバネートできるようにするには、[[lsblk]] を使ってボリュームのメジャーデバイスナンバーとマイナーデバイスナンバーを手に入れて、{{ic|/sys/power/resume}} に {{ic|''major'':''minor''}} という形式で書き込んでください。<br />
<br />
例えば、スワップデバイスが {{ic|8:3}} の場合:<br />
<br />
# echo 8:3 > /sys/power/resume<br />
<br />
スワップファイルを使用する場合、これに加えて [[#スワップファイルのオフセットを手に入れる]] の手順も行ってください。<br />
<br />
===== スワップファイルのオフセットを手に入れる =====<br />
<br />
[[スワップファイル]]をハイバネート用に使用する場合は、(スワップファイルが存在している) ファイルシステムを含んでいるブロックデバイスを {{ic|1=resume=}} で指定する必要があり、さらに、スワップファイルの物理オフセットも {{ic|1=resume_offset=}} [[カーネルパラメータ]]で指定する必要があります。[https://docs.kernel.org/power/swsusp-and-swap-files.html]<br />
<br />
[[Btrfs]] 以外のファイルシステムでは、{{ic|1=resume_offset=}} の値は {{ic|filefrag -v ''swap_file''}} を実行することで得られます。このコマンドは表を出力します。必要な値は {{ic|physical_offset}} 列の最初の行にあります。<br />
<br />
例えば:<br />
<br />
{{hc|# filefrag -v /swapfile|<br />
Filesystem type is: ef53<br />
File size of /swapfile is 4294967296 (1048576 blocks of 4096 bytes)<br />
ext: logical_offset: physical_offset: length: expected: flags:<br />
0: 0.. 0: '''38912'''.. 38912: 1:<br />
1: 1.. 22527: 38913.. 61439: 22527: unwritten<br />
2: 22528.. 53247: 899072.. 929791: 30720: 61440: unwritten<br />
...<br />
}}<br />
<br />
この例では、{{ic|1=resume_offset=}} の値は最初の {{ic|38912}} になります。<br />
<br />
あるいは、オフセットの値を直接手に入れるには:<br />
<br />
# filefrag -v ''swap_file'' | awk '$1=="0:" {print substr($4, 1, length($4)-2)}'<br />
<br />
[[Btrfs]] の場合、''filefrag'' ツールは使わないでください。''filefrag'' から得られる "physical" オフセットの値は、ディスク上の実際の物理オフセットとは異なるからです。複数のデバイスをサポートするために、仮想的なディスクアドレス空間が存在するのです。[https://bugzilla.kernel.org/show_bug.cgi?id=202803] 代わりに、{{man|8|btrfs-inspect-internal}} コマンドを使ってください。例えば:<br />
<br />
{{hc|# btrfs inspect-internal map-swapfile -r ''swap_file''|<br />
198122980<br />
}}<br />
<br />
この例では、カーネルパラメータは {{ic|1=resume_offset=198122980}} となります。<br />
<br />
再起動せずにこの変更を即座に適用するには、resume offset を {{ic|/sys/power/resume_offset}} に書き込んでください。例えば、オフセットが {{ic|38912}} である場合は:<br />
<br />
# echo 38912 > /sys/power/resume_offset<br />
<br />
{{Tip|次のコマンドは、スワップファイルのバッキングデバイスを特定する際に使用できます: {{ic|1=findmnt -no UUID -T ''swap_file''}}}}<br />
<br />
{{Note|暗号化コンテナ (LUKS)、 RAID、 LVM のようなスタックブロックデバイスでは、{{ic|resume}} パラメータはスワップファイルのあるファイルシステムを含んでいる、アンロックまたはマップされたデバイスを指していなければなりません。}}<br />
<br />
==== ハイバネート用のスワップファイルを zram で保持する ====<br />
<br />
{{Tip|以下の方法は複数のスワップ領域を使用しますが、[[zswap]] を使えば似たようなことをすることができます。}}<br />
<br />
RAM 圧縮 (zram) でのハイバーネートの問題は、複数のスワップ領域を同時に保持することで解決できます。[[Systemd]] は、ハイバネートをトリガーする前に zram ブロックデバイスを常に無視するので、特に設定せずに両方の領域 (スワップファイルと zram) を保持できるはずです。<br />
<br />
[[#スワップファイルのオフセットを手に入れる|スワップファイルの設定]]が済んだら、[[zram]] のページの手順に従ってください。このとき、zram に'''高いスワップ優先度''' (例えば {{ic|1=pri=100}}) を割り当ててください。<br />
<br />
{{Note|<br />
* ハイバネート用のオンデマンドのスワップユニットは作成'''しないでください'''。これは公式にはサポートされていません。Systemd の issue [https://github.com/systemd/systemd/issues/16708 #16708] と [https://github.com/systemd/systemd/issues/30083 #30083] を参照してください。<br />
* カーネルは無名 (anonymous) ページの回収とスワップを行います。スワップ領域を利用しないと、メモリ使用効率の悪化につながる可能性があります。ユーザーは、{{ic|memory.low}} によって特定のアプリケーションにおけるメモリ回収の優先度を管理することができます (これは[[コントロールグループ]]で調整可能です)。全体として、この方が [[swappiness]] パラメータを設定するよりも効率的です。<br />
* 詳細は[https://www.kernel.org/doc/gorman/html/understand/understand014.html カーネルドキュメントの Swap Management 章]と [https://chrisdown.name/2018/01/02/in-defence-of-swap.html Chris Down の - In defence of swap: common misconceptions] (Hiroaki Nakamura による日本語訳: [https://chrisdown.name/ja/2018/01/02/in-defence-of-swap.html スワップの弁護:よくある誤解を解く]) を参照してください。<br />
}}<br />
<br />
==== thinly-provisioned LVM ボリュームへのハイバネーション ====<br />
<br />
thinly-provisioned [[LVM]] されたボリュームへの休止状態は可能ですが、ボリュームが完全に割り当てられていることを確認する必要があります。そうしないと、再開に失敗します。{{Bug|50703}} を見てください。<br />
<br />
LVM ボリュームをゼロで埋めるだけで、 LVM ボリュームを完全に割り当てることができます。 例えば:<br />
<br />
# dd if=/dev/zero of=/dev/vg0/swap bs=1M status=progress<br />
<br />
ボリュームが完全に割り当てられていることを確認するには、次を使用できます:<br />
<br />
{{hc|# lvs|<br />
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert<br />
swap vg0 Vwi-aot--- 10.00g pool 100<br />
}}<br />
<br />
完全に割り当てられたボリュームは、100%のデータ使用量であると表示されます。<br />
<br />
{{Warning|休止状態に使用される thinly-provisioned されたスワップボリュームで [[TRIM]] を使用しないでください。つまり、 {{ic|/etc/fstab}} で {{ic|discard}} を使用しないでください。 ''swapon'' の {{ic|-d}}/{{ic|--discard}} オプション。 そうしないと、使用済みスペースの割り当てが解除されます。}}<br />
<br />
== スリープフック ==<br />
<br />
=== カスタムの systemd ユニット ===<br />
<br />
[[systemd]] は、スリープ状態に応じて {{ic|suspend.target}}、{{ic|hibernate.target}}、{{ic|hybrid-sleep.target}}、{{ic|suspend-then-hibernate.target}} のどれかを開始します。これらの target は全て、{{ic|sleep.target}} も開始します。これらの target はどれも、サスペンド/ハイバネートの前や後に[[systemd#ユニットファイル|カスタムのユニット]]を実行するために使用することができます。ユーザーのアクション用と root ユーザー/システムのアクション用とで、別々のファイルを作成する必要があります。例えば:<br />
<br />
{{hc|/etc/systemd/system/user-suspend@.service|2=<br />
[Unit]<br />
Description=User suspend actions<br />
Before=sleep.target<br />
<br />
[Service]<br />
User=%I<br />
Type=forking<br />
Environment=DISPLAY=:0<br />
ExecStartPre= -/usr/bin/pkill -u %u unison ; /usr/local/bin/music.sh stop<br />
ExecStart=/usr/bin/sflock<br />
ExecStartPost=/usr/bin/sleep 1<br />
<br />
[Install]<br />
WantedBy=sleep.target<br />
}}<br />
<br />
{{hc|/etc/systemd/system/user-resume@.service|2=<br />
[Unit]<br />
Description=User resume actions<br />
After=suspend.target<br />
<br />
[Service]<br />
User=%I<br />
Type=simple<br />
ExecStart=/usr/local/bin/ssh-connect.sh<br />
<br />
[Install]<br />
WantedBy=suspend.target<br />
}}<br />
<br />
変更を適用するには、{{ic|user-suspend@''user''.service}} や {{ic|user-resume@''user''.service}} を有効化してください。<br />
<br />
{{Note|スクリーンが"ロックされる"前にスクリーンロックが返ってきてしまい、サスペンドから復帰するときに画面が点滅することがあります。{{ic|1=ExecStartPost=/usr/bin/sleep 1}} で小さな遅延を追加することでこれを防止できます。}}<br />
<br />
root ユーザー/システムのアクション用:<br />
<br />
{{hc|/etc/systemd/system/root-suspend.service|2=<br />
[Unit]<br />
Description=Local system suspend actions<br />
Before=sleep.target<br />
<br />
[Service]<br />
Type=simple<br />
ExecStart=-/usr/bin/pkill sshfs<br />
<br />
[Install]<br />
WantedBy=sleep.target<br />
}}<br />
<br />
{{hc|/etc/systemd/system/root-resume.service|2=<br />
[Unit]<br />
Description=Local system resume actions<br />
After=suspend.target<br />
<br />
[Service]<br />
Type=simple<br />
ExecStart=/usr/bin/systemctl restart mnt-media.automount<br />
<br />
[Install]<br />
WantedBy=suspend.target<br />
}}<br />
<br />
==== スリープ/復帰のユニットの統合 ====<br />
<br />
サスペンド/レジュームのサービスファイルを統合すれば、様々なフェイズ (スリープ/レジューム) やターゲット (サスペンド/ハイバネート/ハイブリッドスリープ) でやることをひとつのフックで行うことができます。<br />
<br />
例と説明:<br />
<br />
{{hc|/etc/systemd/system/wicd-sleep.service|2=<br />
[Unit]<br />
Description=Wicd sleep hook<br />
Before=sleep.target<br />
StopWhenUnneeded=yes<br />
<br />
[Service]<br />
Type=oneshot<br />
RemainAfterExit=yes<br />
ExecStart=-/usr/share/wicd/daemon/suspend.py<br />
ExecStop=-/usr/share/wicd/daemon/autoconnect.py<br />
<br />
[Install]<br />
WantedBy=sleep.target<br />
}}<br />
<br />
* {{ic|1=RemainAfterExit=yes}}: 起動後、明示的に止められるまでサービスは常時 active とみなされます。<br />
* {{ic|1=StopWhenUnneeded=yes}}: active 時、他のサービスから必要とされなくなった場合、サービスは停止されます。この例では、{{ic|sleep.target}} が停止されるとこのサービスは停止されます。<br />
* {{ic|sleep.target}} では {{ic|1=StopWhenUnneeded=yes}} が設定されているため、このフックは別のタスクにおいても適切に開始/停止することが保証されます。<br />
<br />
=== /usr/lib/systemd/system-sleep のフック ===<br />
<br />
{{Note|{{man|8|systemd-sleep}} によれば、この方法は systemd ではハックなやり方だとされています。''systemd-sleep'' は、これらのフックを1つずつではなく並列に実行します。順序実行がサポートされている、より明確に定義されたインターフェイスについては、[[#カスタムの systemd ユニット]] をみてください。}}<br />
<br />
''systemd-sleep'' は、{{ic|/usr/lib/systemd/system-sleep/}} 内の全ての実行可能ファイルを実行します。このとき、2つの引数が渡されます:<br />
<br />
# {{ic|pre}} または {{ic|post}}: マシンがスリープしようとしているのか、復帰しようとしているのか。<br />
# {{ic|suspend}}、{{ic|hibernate}}、{{ic|hybrid-sleep}} のどれか: どのスリープ状態が実行される/されたのか。<br />
<br />
カスタムスクリプトの出力は、''systemd-suspend.service'' や ''systemd-hibernate.service''、''systemd-hybrid-sleep.service'' によって記録されます。''systemd'' の [[journalctl]] でこのログを見ることができます:<br />
<br />
# journalctl -b -u systemd-suspend.service<br />
<br />
カスタムのスリープスクリプト例:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/example.sh|<br />
#!/bin/sh<br />
case $1/$2 in<br />
pre/*)<br />
echo "Going to $2..."<br />
;;<br />
post/*)<br />
echo "Waking up from $2..."<br />
;;<br />
esac<br />
}}<br />
<br />
スクリプトを[[実行可能属性|実行可能]]にするのを忘れないで下さい。<br />
<br />
== ヒントとテクニック ==<br />
<br />
=== スリープを完全に無効化する ===<br />
<br />
デバイスをサーバなどとして使用している場合、サスペンドは必要ないかもしれませんし、かえって望ましくない可能性もあります。{{man|5|systemd-sleep.conf}} を使えば任意のスリープ状態を無効化することができます:<br />
<br />
{{hc|/etc/systemd/sleep.conf.d/disable-suspend.conf|2=<br />
[Sleep]<br />
AllowSuspend=no<br />
AllowHibernation=no<br />
AllowHybridSleep=no<br />
AllowSuspendThenHibernate=no<br />
}}<br />
<br />
=== Intel Rapid Start Technology (IRST) ===<br />
<br />
Intel Rapid Start Technology とは、ハイバネートするためのハードウェア上の方法で、あらかじめ設定された時間の後やバッテリー状態に基づいてスリープからハイバネートに移行できるようにします。IRSTは、オペレーティングシステムのレベルではなくファームウェアによって行われるので、通常のハイバネートよりも速く信頼性が高いはずです。一般的に、IRST はファームウェアで有効化する必要があり、またファームウェアで、サスペンド/バッテリイベント後にハイバネートをトリガーするまでの時間を設定できます。しかし、一部のデバイスは IRST をファームウェアでサポートしていますが、Intel の Windows ドライバからでしか設定できません。そのような場合には、以下で説明している intel-rst カーネルモジュールで Linux でもイベントを設定できるはずです。<br />
<br />
Intel Rapid Start Technology (IRST) が有効の場合、deep sleep からの再開には "[https://mjg59.dreamwidth.org/26022.html S3から再開するよりも数秒長くなりますが、ハイバネートから再開するよりもはるかに高速です]"。<br />
<br />
Intel ベースのシステムの多くは、 IRST のファームウェアをサポートしていますが、(HDD ではなく) SSD 上に特別なパーティションを必要とします。 Windows の OEM 展開では、Arch Linux インストールプロセス中に (SSD 全体を消去して再パーティションするのではなく) 保持できる IRST パーティションがすでに存在している場合があります。システムの RAM と同じサイズの未フォーマットパーティションとして表示されます。<br />
<br />
{{Warning|Intel Rapid Start パーティションは暗号化されていません。「Intel は、あなたがソフトウェアベースのディスク暗号化を使用している場合、Intel Rapid Start Technology を無効化することを推奨します。」[https://www.intel.com/content/www/us/en/support/articles/000024080/technologies.html]}}<br />
<br />
ドライブ全体を消去してパーティションを切り直すつもりなら (あるいはすでにそうしてしまっているなら) IRST パーティションも再作成しなければなりません。これを行うには、システムの RAM と同じサイズの空のパーティションを作成し、そのパーティションの種類が GPT パーティションの場合は [[Wikipedia:GUID Partition Table#Partition type GUIDs|GUID]] {{ic|D3BFE2DE-3DAF-11DF-BA40-E3A556D89593}} に、 MBR パーティションの場合は [https://en.wikipedia.org/wiki/Partition_type ID] {{ic|0x84}} に設定します。また、システムのファームウェア設定で IRST のサポートを有効にする必要がある場合もあります。<br />
<br />
{{Tip|(サスペンド後に)IRST が開始されるまでの時間は、システムのファームウェア設定で調整できます。}}<br />
<br />
IRST ハイバネートにかかる時間 (つまり、"RAMの内容全体を特殊なパーティションに" コピーする時間) は、システムの RAM サイズと SSD 速度によって異なり、20~60秒かかります。システムによっては、プロセスの完了を(点滅を止めるなどして) LED インジケータで示す場合があります。<br />
<br />
Linux カーネルで IRST ハイバネートイベントを設定するには、{{ic|CONFIG_INTEL_RST}} オプションでカーネルに組み込むか、カーネルモジュールとして利用可能である必要があります。{{ic|modprobe intel_rst}} を実行してモジュールをロードすれば、{{ic|/sys/bus/acpi/drivers/intel_rapid_start/*/}} にファイル {{ic|wakeup_events}} と {{ic|wakeup_time}} が生成されるはずです。これらを用いて、さらなる設定を行うことができます。このモジュールは簡潔にドキュメント化されています。詳細は [https://github.com/torvalds/linux/blob/143a6252e1b8ab424b4b293512a97cca7295c182/drivers/platform/x86/intel/rst.c drivers/platform/x86/intel/rst.c] を見てください。<br />
<br />
Intel Rapid Start Technology に関する情報は、[https://www.intel.com/content/www/us/en/support/articles/000024078/technologies.html general Q&A] と [https://www.intel.com/content/www/us/en/support/articles/000024273/technologies/intel-vpro-platform.html?wapkw=user%20guide%20Intel%20rapid%20start%20 user guides] も見てください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== ACPI_OS_NAME ===<br />
<br />
'''DSDT table''' を動作するように設定することができます。[[DSDT]] の記事を参照してください。<br />
<br />
=== サスペンド/ハイバネートが動作しない、あるいはたまに動作しなくなる ===<br />
<br />
ハイバネートやサスペンドから復帰した時に画面が真っ暗になって、明確なエラーは表示されず、何もできなくなるという報告が多数存在します。これらの問題は、ノートパソコンとデスクトップの両方で確認されています。公式の解決方法ではありませんが、古いカーネル、特に LTS カーネルに切り替えることで問題が解決することがあります。<br />
<br />
ハードウェアの watchdog タイマーを使用している場合に問題が起こることもあります (デフォルトで無効化されています、{{man|5|systemd-system.conf|OPTIONS}} の {{ic|1=RuntimeWatchdogSec=}} を見てください)。バグのある watchdog タイマーにより、システムがハイバネートイメージの作成を終える前に、コンピュータがリセットされることがあります。<br />
<br />
時々、initramfs 内からのデバイスの初期化によって黒画面が発生することがあります。[[Mkinitcpio#MODULES]] 内にあるモジュールを削除し、{{ic|kms}} フックを削除し、initramfs を再ビルドすると、この問題を解決できる可能性があります (特に、[[カーネルモード設定#KMS の早期開始|KMS の早期開始]]が設定されたグラフィックスドライバの場合)。復帰前にそのようなデバイスを初期化すると、整合性がなくなり、システムのハイバネートからの復帰を妨げてしまう可能性があります。これは RAM からの復帰には影響しません。また、ブログ記事 [https://web.archive.org/web/20230502010825/https://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issues best practices to debug suspend issues] も確認してください。<br />
<br />
[[ATI]] ビデオドライバから新しい [[AMDGPU]] ドライバに移行すると、ハイバネートと復帰のプロセスを成功させることができる可能性があります。<br />
<br />
[[NVIDIA]] ユーザは、{{ic|nvidiafb}} モジュールを[[ブラックリスト|ブラックリスト化]]すると、問題が解決するかもしれません。[https://bbs.archlinux.org/viewtopic.php?id=234646]<br />
<br />
Intel CPU を搭載していて、タッチパッドのために {{ic|intel_lpss_pci}} をロードするノート PC では、復帰時にカーネルパニックを引き起こすことがあります(この時、caps lock が点滅する) [https://bbs.archlinux.org/viewtopic.php?id=231881]。このモジュールは、以下のように [[initramfs]] に追加する必要があります:<br />
<br />
{{hc|/etc/mkinitcpio.conf|2=<br />
MODULES=(... intel_lpss_pci ...)<br />
}}<br />
<br />
そして、[[initramfs を再生成する|initramfs を再生成]]してください。<br />
<br />
=== Wake-on-LAN ===<br />
<br />
[[Wake-on-LAN]] が有効になっている場合、コンピュータがハイバネート状態になっていてもネットワークインターフェイスカードによって電力が消費されます。<br />
<br />
=== サスペンドからすぐに復帰する ===<br />
<br />
[[電源管理/復帰トリガー#サスペンドからすぐに復帰する]] を見てください。<br />
<br />
AMD CPU 上で Linux カーネル 6.1 以上を使用している場合、これは[https://gitlab.freedesktop.org/drm/amd/-/issues/2357 カーネル内の S3 関連の制御ポリシーの問題]が原因である可能性もあります。一時的な解決策は、関連する i2c デバイスの復帰をオフにすることです。関連する i2c デバイスは以下のコマンドで見つけられます:<br />
<br />
$ ls /sys/bus/i2c/devices/*/power/wakeup<br />
<br />
デバイス名の形式は {{ic|i2c-ELAN0679:00}} や {{ic|i2c-MSFT0001:00}} であるはずです。次に、以下のコマンドでサスペンドに移行できるかテストします:<br />
<br />
# echo disabled > /sys/bus/i2c/devices/''device_name''/power/wakeup<br />
# systemctl suspend<br />
<br />
これでうまく行くならば、udev ルールを追加することで、この設定を永続化できます:<br />
<br />
{{hc|/etc/udev/rules.d/99-avoid-i2c-wakeup.rules|2=KERNEL=="''device_name''", SUBSYSTEM=="i2c", ATTR{power/wakeup}="disabled"}}<br />
<br />
=== ハイバネートした時にシステムの電源が落ちない ===<br />
<br />
システムをハイバネートした時には、(状態をディスク上に保存したあとに)システムの電源が落ちるはずです。時々、ハイバネートした後も電源 LED が光り続けることがあります。これが起こる場合、{{man|5|sleep.conf.d}} で {{ic|HibernateMode}} を {{ic|shutdown}} に設定すると問題が解決するかもしれません。<br />
<br />
{{hc|/etc/systemd/sleep.conf.d/hibernatemode.conf|2=<br />
[Sleep]<br />
HibernateMode=shutdown<br />
}}<br />
<br />
上記の設定により、その他の設定が正しく行われていれば、{{ic|systemctl hibernate}} を実行するとマシンがシャットダウンし、状態をディスクに保存します。<br />
<br />
=== ハイバネート後に起動するとオペレーティングシステムが見つからない (または、間違った OS が起動する) ===<br />
<br />
これは、ブートディスクが外部ディスクである場合に起こる可能性があります。BIOS/ファームウェアの制限が原因であるようです。ハイバネーションは外部 (あるいは別の) ディスク上の OS から行われたが、BIOS/ファームウェアは内部ディスクから起動を試みてしまっているのです。<br />
<br />
[[#ハイバネートした時にシステムの電源が落ちない]] で説明したように {{ic|1=HibernateMode=shutdown}} を設定することで、この問題を永久に解決できます。すでにシステムから締め出されてしまっている場合、システムを4回再起動 (毎回、エラーが表示されるまで待ってください) してみることで、一部の BIOS 上では通常のブート手順を強制することができます。<br />
<br />
=== /home にスワップファイルを置く ===<br />
<br />
スワップファイルが {{ic|/home/}} にある場合、''systemd-logind'' はスワップファイルにアクセスできず、{{ic|Call to Hibernate failed: No such file or directory}} という警告メッセージを出力して、{{ic|systemctl hibernate}} の実行時に認証を求められます。このようなセットアップは、[https://github.com/systemd/systemd/issues/31100 上流でサポートされていない]とされているので、避けるべきです。2つの回避策については [https://github.com/systemd/systemd/issues/15354#issuecomment-611077881 systemd issue 15354] を参照してください。<br />
<br />
=== A520I および B550I マザーボードで PC がスリープから復帰しない ===<br />
<br />
A520i および B550i チップセットを搭載した一部のマザーボードでは、システムが完全にスリープ状態に入らない、またはスリープ状態から復帰しないことがあります。症状は、システムがスリープ状態に入り、マザーボード上の内部 LED または電源 LED が点灯したまま、モニターの電源が切れるというものです。その後、システムはこの状態から復帰することができず、ハードパワーオフが必要となります。AMD で同様の問題が発生した場合、まずシステムが完全にアップデートされていることを確認し、AMD [[マイクロコード]] パッケージがインストールされているかどうかをチェックしてください。<br />
<br />
{{ic|GPP0}} で始まる行のステータスが有効になっていることを確認します:<br />
<br />
{{hc|$ cat /proc/acpi/wakeup|<br />
Device S-state Status Sysfs node<br />
GP12 S4 *enabled pci:0000:00:07.1<br />
GP13 S4 *enabled pci:0000:00:08.1<br />
XHC0 S4 *enabled pci:0000:0b:00.3<br />
GP30 S4 *disabled<br />
GP31 S4 *disabled<br />
PS2K S3 *disabled<br />
'''GPP0''' S4 '''*enabled''' pci:0000:00:01.1<br />
GPP8 S4 *enabled pci:0000:00:03.1<br />
PTXH S4 *enabled pci:0000:05:00.0<br />
PT20 S4 *disabled<br />
PT24 S4 *disabled<br />
PT26 S4 *disabled<br />
PT27 S4 *disabled<br />
PT28 S4 *enabled pci:0000:06:08.0<br />
PT29 S4 *enabled pci:0000:06:09.0<br />
}}<br />
<br />
これが有効になっている場合は、次のコマンドを実行できます:<br />
<br />
# echo GPP0 > /proc/acpi/wakeup<br />
<br />
{{ic|systemctl suspend}} を実行してテストし、システムをスリープ状態にします。次に、数秒後にシステムを起動してみてください。うまくいく場合は、回避策を永続的にすることができます。systemd [[systemd#ユニットファイル|ユニットファイル]]を[[作成]]します。:<br />
<br />
{{hc|/etc/systemd/system/toggle-gpp0-to-fix-wakeup.service|2=<br />
[Unit]<br />
Description="Disable GPP0 to fix suspend issue"<br />
<br />
[Service]<br />
ExecStart=/bin/sh -c "/bin/echo GPP0 > /proc/acpi/wakeup"<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
}}<br />
<br />
[[daemon-reload]] するか、新しく作成したユニットを[[起動/有効化]]してください。<br />
<br />
あるいは、[[udev]] ルールを作成することもできます。先の例のように {{ic|GPP0}} の sysfs ノードが {{ic|pci:0000:00:01.1}} である場合、関連する情報は {{ic|udevadm info -a -p /sys/bus/pci/devices/0000\:00\:01.1}} を実行することで得られ、以下のような udev ルールを作成すれば良いことになります:<br />
<br />
{{hc|/etc/udev/rules.d/10-gpp0-acpi-fix.rules|2=<br />
KERNEL=="0000:00:01.1", SUBSYSTEM=="pci", DRIVERS=="pcieport", ATTR{vendor}=="0x1022", ATTR{device}=="0x1483", ATTR{power/wakeup}="disabled"<br />
}}<br />
<br />
デフォルトで、udev デーモンはシステム内の (ルールの) 変更を監視する用に設定されています。必要であれば、[[udev#新しいルールをロードする|手動でルールを再読み込み]]することもできます。<br />
<br />
=== ノートパソコンをサスペンドする Fn キーが動作しない ===<br />
<br />
{{ic|logind.conf}} をどう設定してもスリープボタンが動作しない場合 (ボタンを押しても syslog にメッセージすら表示されない)、おそらく logind がキーボードデバイスを監視していません。[https://lists.freedesktop.org/archives/systemd-devel/2015-February/028325.html] 次のコマンドを実行してください:<br />
<br />
# journalctl --grep="Watching system buttons"<br />
<br />
すると以下のような表示がされます:<br />
<br />
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event2 (Power Button)<br />
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event3 (Sleep Button)<br />
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event4 (Video Bus)<br />
<br />
キーボードデバイスが出力に無いことに注意してください。以下のようにして、キーボードデバイスを一覧表示してみてください:<br />
<br />
{{hc|$ stat -c%N /dev/input/by-id/*-kbd|2=<br />
...<br />
/dev/input/by-id/usb-SIGMACHIP_USB_Keyboard-event-kbd -> '''../event6'''<br />
...<br />
}}<br />
<br />
次に、親キーボードデバイスの {{ic|ATTRS{name}<nowiki/>}} の値を調べます [https://systemd-devel.freedesktop.narkive.com/Rbi3rjNN/patch-1-2-logind-add-support-for-tps65217-power-button]。例えば、上記のコマンドの出力から、このキーボードデバイスのデバイス入力イベントは {{ic|'''event6'''}} であることがわかるので、このイベント名を使って {{ic|ATTRS{name}<nowiki/>}} 属性の値を検索することができます:<br />
<br />
{{hc|# udevadm info -a /dev/input/'''event6'''|2=<br />
...<br />
KERNEL=="event6"<br />
...<br />
ATTRS{name}=="SIGMACHIP USB Keyboard"<br />
}}<br />
<br />
カスタムの udev ルールを作成して、"power-switch" タグを追加してください:<br />
<br />
{{hc|/etc/udev/rules.d/70-power-switch-my.rules|2=<br />
ACTION=="remove", GOTO="power_switch_my_end"<br />
SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="SIGMACHIP USB Keyboard", TAG+="power-switch"<br />
LABEL="power_switch_my_end"<br />
}}<br />
<br />
[[udev#新しいルールをロードする|上記の udev ルールを再読み込み]]して {{ic|systemd-logind.service}} を[[再起動]]したら、''logind'' の journal に {{ic|Watching system buttons on /dev/input/event6}} という出力が現れるはずです。<br />
<br />
{{TranslationStatus|Power management/Suspend and hibernate|2024-03-11|802809}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E9%9B%BB%E6%BA%90%E7%AE%A1%E7%90%86&diff=36507
電源管理
2024-03-11T07:09:53Z
<p>AshMyzk: 同期</p>
<hr />
<div>[[Category:電源管理]]<br />
[[en:Power management]]<br />
[[es:Power management]]<br />
[[pt:Power management]]<br />
[[ru:Power management]]<br />
[[zh-hans:Power management]]<br />
{{Related articles start}}<br />
{{Related|電源管理/サスペンドとハイバネート}}<br />
{{Related|電源管理/復帰トリガー}}<br />
{{Related|Display Power Management Signaling}}<br />
{{Related|CPU 周波数スケーリング}}<br />
{{Related|ハイブリッドグラフィック}}<br />
{{Related|カーネルモジュール}}<br />
{{Related|sysctl}}<br />
{{Related|udev}}<br />
{{Related articles end}}<br />
[[Wikipedia:Power management|電源管理]]とは、アクティブでない時に電源を切ったりシステムのコンポーネントを低電力状態に切り替えたりする機能です。<br />
<br />
Arch Linux では、電源管理は主に2つの部分からなります:<br />
<br />
# Linux カーネルの設定。ハードウェアと対話します。<br />
#* [[カーネルパラメータ]]<br />
#* [[カーネルモジュール]]<br />
#* [[udev]] ルール<br />
# ユーザスペースのツールの設定。カーネルと対話し、カーネルのイベントに応答します。ユーザスペースのツールの多くは、"ユーザフレンドリー"な方法でカーネルの設定を変更することもできます。利用可能なツールは [[#ユーザースペースツール]] を参照してください。<br />
<br />
== ユーザースペースツール ==<br />
<br />
以下のツールを使うことで、大量の設定を手動で設定しなくて済みます。どのツールも多かれ少なかれ同じような動作をするので、衝突を避けるためにツールはどれか'''一つだけ'''を実行してください。[[:Category:電源管理|電源管理カテゴリ]]を見れば、Arch Linux にどんな電源管理の選択肢が存在するかわかります。<br />
<br />
以下は省電力設定をするために作られた人気のあるスクリプトやツールです:<br />
<br />
=== コンソール ===<br />
<br />
* {{App|[[acpid]]|ACPI の電源管理イベントを届けるデーモン。netlink をサポート。|https://sourceforge.net/projects/acpid2/|{{Pkg|acpid}}}}<br />
* {{App|[[Laptop Mode Tools]]|ノートパソコンの省電力設定をするユーティリティ。多少設定が要りますが省電力設定ユーティリティのデファクトスタンダードとされています。|https://github.com/rickysarraf/laptop-mode-tools|{{AUR|laptop-mode-tools}}}}<br />
* {{App|libsmbios|Dell SMBIOS テーブルと対話するためのライブラリおよびツール。|https://github.com/dell/libsmbios|{{Pkg|libsmbios}}}}<br />
* {{App|[[powertop]]|消費電力や電源管理の問題を診断して省電力設定を補助するツール。|https://github.com/fenrus75/powertop|{{Pkg|powertop}}}}<br />
* {{App|powerstat|ACPI や Intel RAPL インターフェイスを使用して電力消費量を測定するツール。|https://github.com/ColinIanKing/powerstat|{{AUR|powerstat}}}}<br />
* {{App|[[systemd]]|システムおよびサービスマネージャ。|https://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}}<br />
* {{App|[[TLP]]|Linux 向けの先進的な電源管理。|https://linrunner.de/tlp|{{Pkg|tlp}}}}<br />
<br />
=== グラフィカル ===<br />
<br />
* {{App|batsignal|libnotify を使用してバッテリレベルの低下を警告する軽量バッテリモニタ。|https://github.com/electrickite/batsignal|{{AUR|batsignal}}}}<br />
* {{App|cbatticon|軽量で高速なバッテリアイコンをシステムトレイに表示。|https://github.com/valr/cbatticon|{{Pkg|cbatticon}}}}<br />
* {{App|GNOME Power Statistics|GNOME のシステム電力情報および統計。|https://gitlab.gnome.org/GNOME/gnome-power-manager|{{Pkg|gnome-power-manager}}}}<br />
* {{App|KDE Power Devil|Plasma 用の電源管理モジュール。|https://invent.kde.org/plasma/powerdevil|{{Pkg|powerdevil}}}}<br />
* {{App|LXQt Power Management|LXQt 用の電源管理モジュール。|https://github.com/lxqt/lxqt-powermanagement|{{Pkg|lxqt-powermanagement}}}}<br />
* {{App|MATE Power Management|MATE 用電源管理ツール。|https://github.com/mate-desktop/mate-power-manager|{{Pkg|mate-power-manager}}}}<br />
* {{App|MATE Power Statistics|MATE のシステム電力情報と統計。|https://github.com/mate-desktop/mate-power-manager|{{Pkg|mate-power-manager}}}}<br />
* {{App|poweralertd|UPower 通知を伝播するデーモン。|https://git.sr.ht/~kennylevinsen/poweralertd|{{AUR|poweralertd}}}}<br />
* {{App|powerkit|デスクトップに依存しない電源マネージャー。|https://github.com/rodlie/powerkit|{{AUR|powerkit}}}}<br />
* {{App|Xfce Power Manager|Xfce 用の電源マネージャ。|https://docs.xfce.org/xfce/xfce4-power-manager/start|{{Pkg|xfce4-power-manager}}}}<br />
* {{App|vattery|システムトレイ内のラップトップバッテリのステータスを表示する、 Vala で書かれたバッテリ監視アプリケーション。|https://www.jezra.net/projects/vattery.html|{{AUR|vattery}}}}<br />
<br />
== ACPI イベント ==<br />
<br />
''systemd'' は一部の電源関連の [[Wikipedia:ja:Advanced Configuration and Power Interface|ACPI]] イベントを処理します。これらのイベントの動作は {{ic|/etc/systemd/logind.conf}} や {{ic|/etc/systemd/logind.conf.d/*.conf}} で設定できます ({{man|5|logind.conf}} を参照)。専用の電源マネージャを持たないシステムでは、この方法は [[acpid]] デーモンの代わりになりえます。ちなみに、[[acpid]] は通常、ACPI イベントに対応するために使われるデーモンです。<br />
<br />
イベントの動作には、{{ic|ignore}}、{{ic|poweroff}}、{{ic|reboot}}、{{ic|halt}}、{{ic|suspend}}、{{ic|hibernate}}、{{ic|hybrid-sleep}}、{{ic|suspend-then-hibernate}}、{{ic|lock}}、{{ic|kexec}} のいずれかを指定することができます。ハイバーネートとサスペンドの場合は、適切に[[電源管理/サスペンドとハイバネート|セットアップ]]しなければなりません。イベントが設定されていない場合、''systemd'' はデフォルトの動作を使用します。<br />
<br />
{| class="wikitable sortable"<br />
!イベントハンドラ<br />
!説明<br />
!デフォルトの動作<br />
|-<br />
|{{ic|HandlePowerKey}}<br />
|電源キー/ボタンが押された時にトリガされます。<br />
|{{ic|poweroff}}<br />
|-<br />
|{{ic|HandleSuspendKey}}<br />
|サスペンドキー/ボタンが押された時にトリガされます。<br />
|{{ic|suspend}}<br />
|-<br />
|{{ic|HandleHibernateKey}}<br />
|ハイバネートキー/ボタンが押された時にトリガされます。<br />
|{{ic|hibernate}}<br />
|-<br />
|{{ic|HandleLidSwitch}}<br />
|ラップトップPCなどの蓋が閉じられた時に (以下のケースを除いて) トリガされます。<br />
|{{ic|suspend}}<br />
|-<br />
|{{ic|HandleLidSwitchDocked}}<br />
|システムがドッキングステーションに繋がれている場合や、複数のディスプレイに繋がれている場合に蓋が閉じられるとトリガされます。<br />
|{{ic|ignore}}<br />
|-<br />
|{{ic|HandleLidSwitchExternalPower}}<br />
|システムが外部電源に接続されている状況で蓋が閉じられた時にトリガされます。<br />
|{{ic|HandleLidSwitch}} に対して設定されている動作<br />
|}<br />
<br />
変更を適用するには、{{ic|systemd-logind.service}} を[[リロード|再読み込み]]してください。<br />
<br />
{{Note|<br />
* ''systemd'' は AC とバッテリの ACPI イベントを処理することができません。なので、[[Laptop Mode Tools]] や他の似たようなツールを使用している場合、[[acpid]] が依然として必要です。<br />
* 蓋のスイッチを短い間隔で動作させると、''logind'' は、ドックが存在するかどうかを検出するために 90 秒までサスペンドアクションを遅らせます。[https://lists.freedesktop.org/archives/systemd-devel/2015-January/027131.html] この遅延は systemd v220 で設定可能になりました。[https://github.com/systemd/systemd/commit/9d10cbee89ca7f82d29b9cb27bef11e23e3803ba] {{ic|logind.conf}} か、このファイルのドロップインファイルで {{ic|1=HoldoffTimeoutSec=30s}} のように設定できます。<br />
}}<br />
<br />
=== 電源マネージャ ===<br />
<br />
一部の[[デスクトップ環境]]には、''systemd'' の ACPI 設定の一部あるいは全てを [https://www.freedesktop.org/wiki/Software/systemd/inhibit/ inhibit] する (一時的にオフにする) 電源マネージャが含まれています。そのような電源マネージャが実行されている場合、電源マネージャだけで ACPI イベントに対する動作を設定することができます。{{ic|/etc/systemd/logind.conf}} や {{ic|/etc/systemd/logind.conf.d/*.conf}} を変更する必要があるのは、電源マネージャによって inhibit されていないイベントに対する挙動を設定したい場合のみです。<br />
<br />
注意点として、電源マネージャが適切なイベントに対して ''systemd'' を inhibit しないと、''systemd'' がシステムをサスペンドし、その後サスペンドから復帰すると今度は電源マネージャがシステムを再びサスペンドしてしまうという状況に陥る可能性があります。[[KDE]]、[[GNOME]]、[[Xfce]]、そして [[MATE]] の電源マネージャは、必要な ''inhibited'' コマンドを発行します。''inhibited'' コマンドが発行されない場合 ([[acpid]] などを使って ACPI イベントを処理している場合)、{{ic|Handle}} オプションを {{ic|ignore}} に設定してください。{{man|1|systemd-inhibit}} も参照してください。<br />
<br />
=== xss-lock ===<br />
<br />
{{pkg|xss-lock}} は systemd の {{ic|suspend}}、{{ic|hibernate}}、{{ic|lock-session}}、{{ic|unlock-session}} イベントで適切なアクションを実行します (ロッカーを実行し、ユーザがロッカーをアンロックまたは kill するまで待機する)。''xss-lock'' は [[DPMS]] イベントにも反応し、それに応じてロッカーを実行したり kill したりします。<br />
<br />
例えば、以下のコマンドを[[自動起動]]します:<br />
<br />
$ xss-lock -- i3lock -n -i ''background_image.png'' &<br />
<br />
== 省電力 ==<br />
<br />
{{Note|ノート PC 固有の電源管理 (バッテリーモニタリングなど) については [[ノートパソコン#電源管理]] を参照してください。また、使用している CPU と GPU に関するページも参照してください (例: [[Ryzen]]、[[AMDGPU]])。}}<br />
<br />
このセクションは、カスタムスクリプトや udev ルールなどの省電力設定をの作成するためのリファレンスです。競合を避けるために、設定が[[#ユーザースペースツール|他のユーティリティ]]によって管理されていないことを確認してください。<br />
<br />
コンピュータが AC 電源またはバッテリーで動作しているかに関わらず、ここに記載されているほとんど全ての機能には使用する価値があります。ここで挙げている機能のほとんどは、パフォーマンスへの影響は無視できるレベルであり、大抵、壊れているハードウェアやドライバのせいでデフォルトで有効化されていないだけです。電力の使用量を減らすことは発熱を減らすことでもあり、[[Wikipedia:ja:インテル ターボ・ブースト・テクノロジー|動的なオーバークロック]]によって、最近の Intel や AMD の CPU ではパフォーマンスの向上につながることもあります。<br />
<br />
=== Intel HWP (Intel Hardware P-state) をサポートする CPU ===<br />
<br />
HWP 対応プロセッサで利用可能なエネルギー設定は、{{ic|default}}、{{ic|performance}}、{{ic|balance_performance}}、{{ic|balance_power}}、{{ic|power}} です。<br />
<br />
以下を実行することで、利用可能な設定を確認できます:<br />
<br />
$ cat /sys/devices/system/cpu/cpufreq/policy*/energy_performance_available_preferences<br />
<br />
以下のファイルを作成することで、より多くのエネルギーを節約するように設定できます:<br />
<br />
{{hc|/etc/tmpfiles.d/energy_performance_preference.conf|<br />
w /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference - - - - balance_power<br />
}}<br />
<br />
Intel プロセッサの電力とパフォーマンスのポリシーに関する詳細は {{man|8|x86_energy_perf_policy}} man ページを参照してください。一時ファイル/ディレクトリに関する詳細は man ページ {{man|8|systemd-tmpfiles}} や {{man|5|tmpfiles.d}} も参照してください。<br />
<br />
=== オーディオ ===<br />
<br />
==== カーネル ====<br />
<br />
デフォルトでは、オーディオの省電力機能はほとんどのドライバーで無効になっています。{{ic|power_save}} パラメータを設定することで有効にすることができます。アイドルモードに移行するまでの時間を秒数で指定します。1秒後にオーディオカードをアイドル状態にするには、Intel のサウンドカードの場合、以下のファイルを作成してください:<br />
<br />
{{hc|/etc/modprobe.d/audio_powersave.conf|2=<br />
options snd_hda_intel power_save=1<br />
}}<br />
<br />
ac97 の場合は以下を使って下さい:<br />
<br />
options snd_ac97_codec power_save=1<br />
<br />
{{Note|<br />
* サウンドカードの製造者や使われているカーネルドライバーの情報を取得するには、{{ic|lspci -k}} を実行してください。<br />
* サウンドカードの電源状態を変更すると、壊れたハードウェアではポップノイズがまじったり著しい遅延が発生することがあります。<br />
}}<br />
<br />
HDMI の音声出力を無効化することで、オーディの電力要件を下げることもできます。適切なカーネルモジュール (例: Intel のハードウェアの場合は {{ic|snd_hda_codec_hdmi}}) を[[ブラックリスト|ブラックリスト化]]することで可能です。<br />
<br />
==== PulseAudio ====<br />
<br />
PulseAudio はデフォルトで、長時間アイドル状態になったオーディオソースを一時停止します。外部 USB マイクを使用する場合、録音がポップ音で開始されることがあります。回避策として、{{ic|/etc/pulse/default.pa}} の次の行をコメントアウトしてください:<br />
<br />
load-module module-suspend-on-idle<br />
<br />
その後、{{ic|systemctl restart --user pulseaudio}} で PulseAudio を再起動させてください。<br />
<br />
=== バックライト ===<br />
<br />
[[バックライト]]を見て下さい。<br />
<br />
=== Bluetooth ===<br />
<br />
[[Bluetooth]] を完全に無効化するには、{{ic|btusb}} と {{ic|bluetooth}} モジュールを[[ブラックリスト]]に入れてください。<br />
<br />
一時的にだけ bluetooth をオフにするには、''rfkill'' を使用します:<br />
<br />
# rfkill block bluetooth<br />
<br />
もしくは udev ルールを使って:<br />
<br />
{{hc|/etc/udev/rules.d/50-bluetooth.rules|2=<br />
# disable bluetooth<br />
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"<br />
}}<br />
<br />
=== ウェブカメラ ===<br />
<br />
内蔵のウェブカメラを使わない場合、{{ic|uvcvideo}} モジュールを[[ブラックリスト]]に入れてください。<br />
<br />
=== カーネルパラメータ ===<br />
<br />
このセクションでは {{ic|/etc/sysctl.d/}} 内の設定を使います。このディレクトリは、''"カーネルの sysctl パラメータ用のドロップインディレクトリです"''。詳細は、[http://0pointer.de/blog/projects/the-new-configuration-files The New Configuration Files] や、より詳しい {{man|5|sysctl.d}} を見てください。<br />
<br />
==== NMI watchdog の無効化 ====<br />
<br />
[[Wikipedia:Non-maskable interrupt|NMI]] watchdog は、カーネルパニックを引き起こすハードウェアのハングアップをキャッチするデバッグ機能です。システムによっては大量の割り込みが発生するため、消費電力の増加につながっていることがあります:<br />
<br />
{{hc|/etc/sysctl.d/disable_watchdog.conf|2=<br />
kernel.nmi_watchdog = 0<br />
}}<br />
<br />
もしくは起動の初期で完全に無効化するには[[カーネルパラメータ|カーネルライン]]に {{ic|1=nmi_watchdog=0}} を追加してください。<br />
<br />
==== ライトバック時間 ====<br />
<br />
仮想メモリのダーティライトバック時間を増やすことでディスク I/O がまとめられて、断続的なディスクの書き込みが減って、消費電力が抑えられます。この値を60秒に設定するには (デフォルトは5秒です):<br />
<br />
{{hc|/etc/sysctl.d/dirty.conf|2=<br />
vm.dirty_writeback_centisecs = 6000<br />
}}<br />
<br />
ジャーナルをサポートしているファイルシステム (ext4 や btrfs など) でジャーナルコミットでも同じことをするには、[[fstab]] でオプションとして {{ic|1=commit=60}} を使用します。<br />
<br />
この値は、以下の Laptop Mode 設定の副作用として変更されてしまうことに注意してください。また、I/O パフォーマンスと省電力に影響を与える他のパラメータは [[sysctl#仮想メモリ]] を参照してください。<br />
<br />
==== Laptop Mode ====<br />
<br />
ラップトップモードの"ノブ"については[https://docs.kernel.org/admin-guide/laptops/laptop-mode.html カーネルドキュメント]を見て下さい。''"このノブの妥当な値は5秒です。"''<br />
<br />
{{hc|/etc/sysctl.d/laptop.conf|2=<br />
vm.laptop_mode = 5<br />
}}<br />
<br />
{{Note|この設定は主に回転ディスクドライブに関連しています。}}<br />
<br />
=== ネットワークインターフェイス ===<br />
<br />
[[Wake-on-LAN]] は便利な機能ですが、利用しない場合はサスペンド中にマジックパケットが来るのを待つのに無駄な電力を消耗するだけです。[[Wake-on-LAN#udev]] ルールを調整することで、全てのイーサネットインターフェイスに対してこの機能を無効化することができます。{{Pkg|iw}} を使って全てのワイヤレスインターフェイスで省電力を有効化するには:<br />
<br />
{{hc|/etc/udev/rules.d/'''81'''-wifi-powersave.rules|2=<br />
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save on"<br />
}}<br />
<br />
この設定ファイルの名前は重要です。Systemd の[[ネットワーク設定#インターフェイス名の変更|永続的なデバイス名]]を使用することで、上記のネットワークルールは、辞書順で {{ic|80-net-setup-link.rules}} の'''後'''に来るので、ネットワークデバイスの名前が永続的な名前に変更 (例: {{ic|wlan0}} から {{ic|wlp3s0}}) された後で適用されます。{{ic|RUN}} のコマンドは、全てのルールが処理された後で実行され、永続的な名前 (マッチするデバイスは {{ic|$name}} で利用できます) を使用する必要があることに注意してください。<br />
<br />
==== Intel ワイヤレスカード (iwlwifi) ====<br />
<br />
{{ic|iwlwifi}} ドライバによる Intel ワイヤレスカードの追加の省電力機能は、適切なパラメータをカーネルモジュールに渡すことで有効化できます。{{ic|/etc/modprobe.d/iwlwifi.conf}} ファイルに以下の記述を追加することで、パラメータを永続化させることができます:<br />
<br />
options iwlwifi power_save=1<br />
<br />
以下のオプションは、レイテンシの中央値を増加させる可能性があります:<br />
<br />
options iwlwifi uapsd_disable=0<br />
<br />
5.4 より前のカーネルでは、以下のオプションを使用できますが、スループットの最大値を減少させる可能性があります:<br />
<br />
options iwlwifi d0i3_disable=0<br />
<br />
ワイヤレスカードによっては、以下の2つのオプションのうちいずれかが適用されます:<br />
<br />
options iwlmvm power_scheme=3<br />
<br />
options iwldvm force_cam=0<br />
<br />
以下のコマンドで、どちらのモジュールが動作しているかを確認することで、どちらが関連しているかを確認できます:<br />
<br />
# lsmod | grep '^iwl.vm'<br />
<br />
これらの省電力オプションは実験的であり、システムを不安定にする可能性があることに注意してください。<br />
<br />
=== バスパワーの管理 ===<br />
<br />
==== Active State Power Management ====<br />
<br />
[[Wikipedia:Active State Power Management|Wikipedia]] から:<br />
<br />
: '''Active-state power management''' ('''ASPM''') とは、PCI Express デバイスが完全にアクティブな状態にある時に電力を節約するための電源管理メカニズムです。主に、active-state link power management を介して行われます。つまり、PCI Express シリアルリンクは、トラフィックが存在しない時にパワーダウンされます。これは通常、ノート PC や他のモバイルインターネットデバイスでバッテリーの寿命を伸ばすために使用されます。<br />
<br />
ブート時に BIOS は、ハードウェアのサポートが存在するかどうかに応じて ASPM を有効化または無効化します。サポートの有無を確認するには以下を実行してください:<br />
<br />
# lspci -vv | grep 'ASPM.*abled;'<br />
<br />
利用可能な ASPM ポリシーと、現在のデフォルトのポリシーを調べるには、以下を実行してください:<br />
<br />
{{hc|$ cat /sys/module/pcie_aspm/parameters/policy|<br />
[default] performance powersave powersupersave<br />
}}<br />
<br />
ASPM は、しばしば以下の理由によって無効化されることがあります [https://wireless.wiki.kernel.org/en/users/documentation/ASPM]:<br />
<br />
# BIOS が何らかの理由で ASPM を無効化した (コンフリクトが起こるから?)。<br />
# PCIE が ASPM を必要とするが、L0s は任意である (なので、L0s は無効化され、L1 だけが有効化されるかもしれません)。<br />
# ASPM 用に BIOS がプログラムされていないか、BIOS にバグが存在する。<br />
<br />
上記で ASPM がサポートされていないと報告されたが、ハードウェアが ASPM をサポートしていると思われる場合は、カーネルが ASPM を管理できるようにするために {{ic|1=pcie_aspm=force}} [[カーネルパラメータ]]で ASPM を強制的に有効化できます。<br />
<br />
{{Warning|<br />
* ASPM を、サポートされていないシステム上で強制的に有効化すると、電力消費量が増加する場合があります。さらに、システムのフリーズやカーネルパニックの危険性もあります。なので、そのような場合に備えてこのオプションをもとに戻す手段を確保しておくべきです。<br />
* ASPM の強制はカーネル内で行われます。なので、ハードウェアで無効化されている場合には、有効化できません。ハードウェアで ASPM が無効化されているかどうか確認するには、root として {{ic|dmesg {{!}} grep ASPM}} と実行してください。あなたのハードウェア固有の情報については、対応する Wiki の記事を参照してください (もし存在すれば)。<br />
}}<br />
<br />
ASPM がサポートされており、かつ、有効化されていれば、現在のセッションに対して任意のポリシーを選択することができます。例えば、現在のセッションに対して {{ic|powersupersave}} を設定するには、以下を実行してください:<br />
<br />
# echo powersupersave > /sys/module/pcie_aspm/parameters/policy<br />
<br />
システムのブート時に特定の ASPM 状態 (例として {{ic|powersupersave}}) を有効化させるには、{{ic|1=pcie_aspm.policy=powersupersave}} を[[カーネルパラメータ]]に追加してください。<br />
<br />
==== PCI Runtime Power Management ====<br />
<br />
{{hc|/etc/udev/rules.d/pci_pm.rules|2=<br />
SUBSYSTEM=="pci", ATTR{power/control}="auto"<br />
}}<br />
<br />
上記のルールは未使用のデバイスを全てパワーダウンしますが、一部のデバイスが復帰しなくなってしまいます。サポートしていることが分かっているデバイスのみに対して Runtime Power Management を有効化するには、ベンダ ID とデバイス ID を使って、特定のデバイスにだけマッチするようにしてください (ID を入手するには {{ic|lspci -nn}} を使ってください):<br />
<br />
{{hc|/etc/udev/rules.d/pci_pm.rules|2=<br />
# whitelist for pci autosuspend<br />
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="auto"<br />
}}<br />
<br />
または、PCI Runtime Power Management が機能しないデバイスを除外して、その他の全てのデバイスに対して有効化するには:<br />
<br />
{{hc|/etc/udev/rules.d/pci_pm.rules|2=<br />
# blacklist for pci runtime power management<br />
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="on", GOTO="pci_pm_end"<br />
<br />
SUBSYSTEM=="pci", ATTR{power/control}="auto"<br />
LABEL="pci_pm_end"<br />
}}<br />
<br />
==== USB の自動サスペンド ====<br />
<br />
Linux カーネルは USB デバイスが使用されていないときに USB デバイスを自動的にサスペンドさせることができます。これによって電力を相当カットできるときもありますが、USB の省電力機能に対応していない USB デバイスではおかしな挙動が起こる可能性もあります (特に USB マウスやキーボード)。ホワイトリストとブラックリストでフィルタリングする [[udev]] ルールを使うことで問題は軽減されます。<br />
<br />
最も単純でおそらく役に立たない、全ての USB デバイスで自動サスペンドを有効にする例:<br />
<br />
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2=<br />
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"<br />
}}<br />
<br />
自動サスペンドが動作するデバイスにだけ自動サスペンドを有効にするには、ベンダー ID とプロダクト ID でマッチングを行います (これらの ID を入手するには ''lsusb'' を使ってください):<br />
<br />
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2=<br />
# whitelist for usb autosuspend<br />
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/control}="auto"<br />
}}<br />
<br />
もしくは、USB 自動サスペンドが使えないデバイスをブラックリストに入れて、他の全てのデバイスで自動サスペンドを有効にするには:<br />
<br />
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2=<br />
# blacklist for usb autosuspend<br />
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end"<br />
<br />
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"<br />
LABEL="power_usb_rules_end"<br />
}}<br />
<br />
自動サスペンドに入るデフォルトのアイドル遅延時間は {{ic|usbcore}} 組み込み[[カーネルモジュール]]の {{ic|autosuspend}} パラメータによって制御されています。遅延時間をデフォルトの2秒から5秒に設定するには、以下の[[カーネルパラメータ]]を追加してください:<br />
<br />
{{bc|1=usbcore.autosuspend=5}}<br />
<br />
{{ic|power/control}} と同じように、{{ic|power/autosuspend}} 属性を設定することで遅延時間はデバイスごとに細かく設定することができます。また、{{ic|power/autosuspend}} を -1 (つまり、自動サスペンドしない) に設定することで、自動サスペンドを無効化することができます:<br />
<br />
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2=<br />
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/autosuspend}="-1"<br />
}}<br />
<br />
USB の電源管理に関する詳細は [https://docs.kernel.org/driver-api/usb/power-management.html Linux カーネルドキュメント]を見て下さい。<br />
<br />
==== SATA Active Link Power Management ====<br />
<br />
{{Warning|一部のデバイスでは、SATA Active Link Power Management によってデータの損失が発生する可能性があります。頻繁にバックアップを取っていない限り、この設定を有効化しないでください。}}<br />
<br />
{{Out of date|ここに書かれてある "新しい設定" や "デフォルトの設定になる予定です" といった文言は古くなっています。}}<br />
<br />
Linux 4.15 から、{{ic|med_power_with_dipm}} と呼ばれる[https://hansdegoede.livejournal.com/18412.html 新しい設定]が存在しています。これは、Windows IRST ドライバ設定の動作と一致するものであり、最近の SSD や HDD ではデータの損失は発生しないはずです。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ebb82e3c79d2a956366d0848304a53648bd6350b (アイドル状態で) 1.0 から 1.5 ワット]の節約になることもあります。これは、Linux 4.16 から Intel ベースのノート PC でデフォルトの設定になる予定です [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ebb82e3c79d2a956366d0848304a53648bd6350b]。<br />
<br />
現在の設定は {{ic|/sys/class/scsi_host/host*/link_power_management_policy}} で確認できます:<br />
<br />
$ cat /sys/class/scsi_host/host*/link_power_management_policy<br />
<br />
{| class="wikitable"<br />
|+ 利用可能な ALPM 設定<br />
! 設定<br />
! 説明<br />
! 省電力効果<br />
|-<br />
| max_performance<br />
| 現在のデフォルト<br />
| 無し<br />
|-<br />
| medium_power<br />
| -<br />
| 約 1.0 ワット<br />
|-<br />
| med_power_with_dipm<br />
| 推奨される設定<br />
| 約 1.5 ワット<br />
|-<br />
| min_power<br />
| '''警告: データ損失の可能性あり'''<br />
| 約 1.5 ワット<br />
|}<br />
<br />
{{hc|/etc/udev/rules.d/hd_power_save.rules|2=<br />
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="med_power_with_dipm"<br />
}}<br />
<br />
{{Note|この設定を行うとアイドル状態になっているドライブにアクセスするときに遅延が発生するようになります。AC 電源を使用するかどうかによって変えるべき設定です。}}<br />
<br />
=== ハードディスクドライブ ===<br />
<br />
設定できるドライブのパラメータについては [[hdparm#電源管理の設定]] を見て下さい。<br />
<br />
多数のプログラムがディスクに頻繁に書き込みをおこなう場合は省電力は効率的ではありません。全てのプログラムを調査して、いつどのようにプログラムがディスクに書き込むを行うのか調べるのがディスクの使用量を減らす道です。{{Pkg|iotop}} を使えばどのプログラムがディスクに頻繁に書き込みしているかわかります。他のヒントは [[パフォーマンスの向上#ストレージデバイス]] を見て下さい。<br />
<br />
[[Fstab#atime オプション|noatime]] オプションを設定するなどの小さなことも馬鹿にできません。十分な RAM がある場合、[[スワップ#Swappiness|swappiness]] を無効化したり制限することでディスクへの書き込みが減る可能性があります。<br />
<br />
[https://www.seagate.com/files/docs/pdf/en-GB/whitepaper/tp608-powerchoice-tech-provides-gb.pdf PowerChoice] テクノロジーを搭載した Seagate ドライブの場合、''EPC'' (Extended Power Conditions) 機能により [[hdparm]] から APM を設定するテクニックはうまく行きません。APM を設定する代わりに、{{AUR|openseachest}} パッケージを[[インストール]]し、ドライブの EPC を完全に無効化することができます (''X'' は実際のドライブレターに置き換えてください):<br />
<br />
# openSeaChest_PowerControl --scan<br />
# openSeaChest_PowerControl -d /dev/sd''X'' -i<br />
# openSeaChest_PowerControl -d /dev/sd''X'' --showEPCSettings<br />
# openSeaChest_PowerControl -d /dev/sd''X'' --EPCfeature disable<br />
# openSeaChest_PowerControl -d /dev/sd''X'' --showEPCSettings<br />
<br />
最後のコマンドでは、以下が出力されます:<br />
<br />
==========================================================================================<br />
openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled<br />
Copyright (c) 2014-2023 Seagate Technology LLC and/or its Affiliates, All Rights Reserved<br />
openSeaChest_PowerControl Version: 3.3.1-4_1_1 X86_64<br />
Build Date: Jul 4 2023<br />
Today: Tue Jul 4 17:49:36 2023 User: root<br />
==========================================================================================<br />
<br />
/dev/sd''X'' - ST1000NM0008-2F2100 - ZFA19JG2 - SN02 - ATA<br />
<br />
<br />
===EPC Settings===<br />
* = timer is enabled<br />
C column = Changeable<br />
S column = Savable<br />
All times are in 100 milliseconds<br />
<br />
Name Current Timer Default Timer Saved Timer Recovery Time C S<br />
Idle A 0 *10 *10 1 Y Y<br />
Idle B 0 *1200 *1200 3 Y Y<br />
Idle C 0 6000 6000 16 Y Y<br />
Standby Z 0 9000 9000 46 Y Y<br />
<br />
最初の列の 0 は、パーキングとスピンダウンが正常に無効化されたことを意味します。<br />
<br />
== ツールとスクリプト ==<br />
<br />
=== スクリプトと udev ルールを使う ===<br />
<br />
systemd ユーザーは {{ic|systemctl suspend}} や {{ic|systemctl hibernate}} でサスペンドとハイバネートを行うことができ、{{ic|/etc/systemd/logind.conf}} で acpi イベントを処理することができるので、[[pm-utils]] と [[acpid]] を削除するということに興味を引かれるかもしれません。systemd が行えないことがたったひとつだけ存在します (systemd-204 現在): システムが AC 電源で動作しているのか、バッテリーで動作しているのかで条件分岐を行う電源管理です。このギャップをなくすには、AC アダプタが抜き差しされたときにスクリプトを実行する [[udev]] ルールを作成します:<br />
<br />
{{hc|/etc/udev/rules.d/powersave.rules|2=<br />
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true"<br />
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false"<br />
}}<br />
<br />
{{Note|''pm-powersave'' が使用しているのと同じスクリプトを使うことができます。[[実行可能属性]]を付与して別の所に保存する必要があります (例えば {{ic|/usr/local/bin/}})。}}<br />
<br />
powersave スクリプトのサンプル:<br />
<br />
* [https://github.com/supplantr/ftw ftw] (パッケージ: {{AUR|ftw-git}})<br />
* [https://github.com/Unia/powersave powersave]<br />
* [https://bbs.archlinux.org/viewtopic.php?id=180762 throttlectl] ({{AUR|throttlectl}})<br />
<br />
上記の udev ルールはちゃんと動作するはずですが、電源設定がサスペンドやハイバネートをした後に更新されない場合、以下の内容で {{ic|/usr/lib/systemd/system-sleep/}} にスクリプトを追加してください:<br />
<br />
{{hc|/usr/lib/systemd/system-sleep/00powersave|<br />
#!/bin/sh<br />
<br />
case $1 in<br />
pre) /path/to/your/script false ;;<br />
post) <br />
if cat /sys/class/power_supply/AC0/online {{!}} grep 0 > /dev/null 2>&1<br />
then<br />
/path/to/your/script true <br />
else<br />
/path/to/your/script false<br />
fi<br />
;;<br />
esac<br />
exit 0<br />
}}<br />
<br />
忘れずに実行可能属性を付与してください。<br />
<br />
{{Note|ノートパソコンによっては AC0 が異なっている可能性があります。その場合は変更してください。}}<br />
<br />
=== 電源設定の表示 ===<br />
<br />
以下のスクリプトは USB や PCI デバイスの電源設定などのプロパティを表示します。全ての設定を見るには root 権限が必要なので注意して下さい。<br />
<br />
{{bc|1=<br />
#!/bin/bash<br />
<br />
for i in $(find /sys/devices -name "bMaxPower")<br />
do<br />
busdir=${i%/*}<br />
busnum=$(<$busdir/busnum)<br />
devnum=$(<$busdir/devnum)<br />
title=$(lsusb -s $busnum:$devnum)<br />
<br />
printf "\n\n+++ %s\n -%s\n" "$title" "$busdir"<br />
<br />
for ff in $(find $busdir/power -type f ! -empty 2>/dev/null)<br />
do<br />
v=$(cat $ff 2>/dev/null{{!}}tr -d "\n")<br />
[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v";<br />
v=;<br />
done {{!}} sort -g;<br />
done;<br />
<br />
printf "\n\n\n+++ %s\n" "Kernel Modules"<br />
for mod in $(lspci -k {{!}} sed -n '/in use:/s,^.*: ,,p' {{!}} sort -u)<br />
do<br />
echo "+ $mod";<br />
systool -v -m $mod 2> /dev/null {{!}} sed -n "/Parameters:/,/^$/p";<br />
done<br />
}}<br />
<br />
== ユーザにシャットダウンを許可する ==<br />
<br />
=== ボタンと蓋スイッチのイベント ===<br />
<br />
サスペンド、電源オフ、そしてハイバネートのボタンのイベントと、蓋を閉じた時のイベントは、[[#ACPI イベント]] で説明されているように ''logind'' によって処理されます。<br />
<br />
=== systemd-logind を使う ===<br />
<br />
{{Pkg|polkit}} を使用している場合、非リモートセッションのユーザは、[[一般的なトラブルシューティング#セッションのパーミッション|セッションが壊れていない]]限り、電源関連のコマンドを発行することができます。<br />
<br />
セッションがアクティブであることを確認するには:<br />
$ loginctl show-session $XDG_SESSION_ID --property=Active<br />
<br />
アクティブであるならば、ユーザはコマンドラインで ''systemctl'' のコマンドを使用したり、メニューに追加したりできます:<br />
$ systemctl poweroff<br />
$ systemctl reboot<br />
<br />
{{ic|systemctl suspend}} や {{ic|systemctl hibernate}} といった他のコマンドも使用できます。{{man|1|systemctl}} の ''System Commands'' セクションを参照してください。<br />
<br />
=== sudo を使う ===<br />
<br />
{{Pkg|sudo}} を[[インストール]]し、[[sudo|sudo 権限]]をユーザに与えてください。sudo 権限が与えられたユーザは、{{ic|sudo systemctl}} コマンド (例: {{ic|sudo systemctl poweroff}}、{{ic|sudo systemctl reboot}}、{{ic|sudo systemctl suspend}}、{{ic|sudo systemctl hibernate}}) を使用できるようになります。{{man|1|systemctl}} の ''System Commands'' セクションを参照してください。<br />
<br />
==== sudo 権限の無いユーザ ====<br />
<br />
ユーザにシャットダウンコマンドのみを使用できるようにし、sudo 権限を与えないようにする必要がある場合、{{ic|visudo}} コマンドを root として使って {{ic|/etc/sudoers}} の末尾に以下を追加してください。''user'' の部分は適切なユーザ名に、''hostname'' の部分はマシンのホスト名に置き換えてください。<br />
<br />
''user'' ''hostname'' =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot<br />
<br />
ここで設定したユーザは、{{ic|sudo systemctl poweroff}} でシャットダウンを、{{ic|sudo systemctl reboot}} で再起動を行うことができるようになります。システムをシャットダウンしたいユーザは、{{ic|sudo systemctl halt}} も使用できます。パスワードのプロンプトを表示させたくない場合は、{{ic|NOPASSWD:}} タグを使用してください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.thinkwiki.org/wiki/How_to_reduce_power_consumption ThinkWiki:How to reduce power consumption]<br />
* [https://ivanvojtko.blogspot.sk/2016/04/how-to-get-longer-battery-life-on-linux.html How to get longer battery life on Linux]<br />
<br />
{{TranslationStatus|Power management|2024-03-11|802770}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=Mkinitcpio&diff=36506
Mkinitcpio
2024-03-11T06:54:45Z
<p>AshMyzk: 同期</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:initramfs]]<br />
[[Category:カーネル]]<br />
[[Category:Arch プロジェクト]]<br />
[[Category:コマンド]]<br />
[[de:Mkinitcpio]]<br />
[[en:Mkinitcpio]]<br />
[[fr:Mkinitcpio]]<br />
[[pt:Mkinitcpio]]<br />
[[ru:Mkinitcpio]]<br />
[[zh-hans:Mkinitcpio]]<br />
{{Related articles start}}<br />
{{Related|Booster}}<br />
{{Related|ブートデバッグ}}<br />
{{Related|dracut}}<br />
{{Related|カーネルモジュール}}<br />
{{Related|mkinitcpio/Initramfs の最小化}}<br />
{{Related|systemd}}<br />
{{Related|Unified カーネルイメージ}}<br />
{{Related articles end}}<br />
[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio mkinitcpio] は[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio}} man ページより:<br />
<br />
:''initial ramdisk は非常に小さい環境(初期ユーザー空間)であり、様々なカーネルモジュールをロードして {{ic|init}} にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せたりすることが可能になります。''mkinitcpio'' はカスタムフックによって簡単に拡張することができ、実行時の自動検知など様々な機能を持っています。''<br />
<br />
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。<br />
<br />
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのメーカーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペース (初期RAMディスク) へ管理を譲渡することです。参照: [https://web.archive.org/web/20150430223035/http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ /dev/brain0 » Blog Archive » Early Userspace in Arch Linux]。<br />
<br />
''mkinitcpio'' は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio public Git リポジトリ]を見て下さい。<br />
<br />
初期 ramdisk フェーズ中に行われる様々なタスクがどのように実行されるかには、2つの異なるアプローチがあることに注意が必要です。<br />
<br />
; Busybox ベースの初期 ramdisk: 初期 ramdisk のファイルシステムをスキャンし、実行されるスクリプト(この文脈ではランタイムフックと呼ばれる)を開始する init スクリプトが起動されます。<br />
; systemd ベースの初期 ramdisk: 初期 ramdisk フェーズの開始時にすでに systemd が起動されています。実行されるタスクは、通常の systemd ユニットファイルによって決定されます。参照:[https://www.freedesktop.org/software/systemd/man/latest/bootup.html systemd bootup process]。<br />
<br />
具体的なバリアントは、{{ic|/etc/mkinitcpio.conf}} 内の {{ic|HOOKS}} 配列に {{ic|systemd}} フックが存在するかどうかによって決まります。より詳細については、[[#通常のフック]] を参照してください。<br />
<br />
== インストール ==<br />
<br />
{{Pkg|mkinitcpio}} パッケージを[[インストール]]してください。このパッケージは {{Pkg|linux}} の依存パッケージとなっているので、大抵すでにインストールされているでしょう。<br />
<br />
上級者は {{AUR|mkinitcpio-git}} パッケージで ''mkinitcpio'' の最新開発バージョンをインストールできます。<br />
<br />
== イメージ作成とアクティベーション ==<br />
<br />
=== 自動生成 ===<br />
<br />
カーネルがインストールまたはアップグレードされるたびに、[[pacman フック]]は {{ic|/etc/mkinitcpio.d/}} 内に保存される ''.preset'' ファイルを自動的に生成します。例えば、公式の安定版 {{Pkg|linux}} カーネルパッケージの場合は {{ic|linux.preset}} です。プリセットは、様々なパラメーターや出力ファイルの場所を手動で指定する手間を省き、初期 RAM ディスクイメージを作成するために必要な情報のリストです。<br />
デフォルトでは、2つのイメージを生成するための命令が含まれています:<br />
<br />
# ''default'' RAM ディスクイメージ。このイメージの内容は、mkinicpio の [[#設定]] で指定されたディレクティブに従って生成されます。<br />
# ''fallback'' RAM ディスクイメージ。作成時に ''autodetect'' フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。<br />
<br />
プリセットを作成した後、pacman フックは、プリセットで提供された情報を使用して2つのイメージを生成する ''mkinitcpio'' スクリプトを呼び出します。<br />
<br />
{{Note|''.preset'' ファイルは、カーネルの更新後に initramfs を自動的に再生成するために使用されます。編集するときは注意してください。}}<br />
<br />
=== 手動生成 ===<br />
<br />
スクリプトを手動で実行するには、マニュアルページ {{man|8|mkinitcpio}} で手順を確認してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、使用するプリセットを {{ic|-p}}/{{ic|--preset}} オプションで指定してください。例えば、{{Pkg|linux}} パッケージの場合、次のコマンドを使用してください:<br />
<br />
# mkinitcpio -p linux<br />
<br />
既存のすべてのプリセットを(再)生成するには、{{ic|-P}}/{{ic|--allpresets}} スイッチを使用してください。これは通常、グローバルな [[#設定]] の変更後にすべての initramfs イメージを再生成するために使用されます:<br />
<br />
# mkinitcpio -P<br />
<br />
ユーザーは、さまざまな構成で initramfs イメージをいくつでも作成できます。生成したいイメージは、それぞれの[[ブートローダー]]の設定ファイルで指定する必要があります。<br />
<br />
=== 生成のカスタマイズ ===<br />
<br />
ユーザーは、代替の設定ファイルを使用してイメージを生成できます。次の例では、{{ic|/etc/mkinitcpio-custom.conf}} に記述されている指示に従って初期 RAM ディスクイメージを生成し、{{ic|/boot/initramfs-custom.img}} として保存します。<br />
<br />
# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img<br />
<br />
現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加してください。インストールされているカーネルリリースは {{ic|/usr/lib/modules/}} にあり、構文は各カーネルのコマンド {{ic|uname -r}} の出力と一致しています。<br />
<br />
# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1<br />
<br />
=== Unified カーネルイメージ ===<br />
<br />
バージョン31 以降の ''mkinitcpio'' では [[Unified カーネルイメージ]] を作成することもできます。<br />
<br />
== 設定 ==<br />
<br />
''mkinitcpio'' のプライマリ設定ファイルは、{{ic|/etc/mkinitcpio.conf}} です。ドロップインの設定ファイルもサポートされています (例: {{ic|/etc/mkinitcpio.conf.d/myhooks.conf}})。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。<br />
<br />
ユーザーは、設定ファイルの中にある6つの変数を変更できます (詳細は {{man|5|mkinitcpio.conf}} を見てください):<br />
<br />
; {{ic|MODULES}}: ブートフックが実行される前にロードされるカーネルモジュール。<br />
; {{ic|BINARIES}}: initramfs イメージに含める追加のバイナリ。<br />
; {{ic|FILES}}: initramfs イメージに含める追加のファイル。<br />
; {{ic|HOOKS}}: フックは初期 RAM ディスクで実行するスクリプトです。<br />
; {{ic|COMPRESSION}}: initramfs イメージを圧縮する際に使用されます。<br />
; {{ic|COMPRESSION_OPTIONS}}: {{ic|COMPRESSION}} のプログラムに渡す追加の引数。この設定の使用は推奨されません。''mkinitcpio'' は圧縮プログラムに対する特殊な要件を処理するため (例: xz には {{ic|1=--check=crc32}} を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。<br />
<br />
{{Note|<br />
* システムが必要とする場合があるフックのいくつか ('''lvm2'''、'''mdadm_udev'''、'''encrypt''' など) は、デフォルトで有効化されて'''いません'''。これに関する指示は [[#HOOKS]] セクションを注意深く読んでください。<br />
* ノード名が同じだがカーネルモジュールが異なる複数のディスクコントローラを使っている場合 (例: 2つの SCSI/SATA または2つの IDE コントローラ)、正しいデバイスがマウントされることを保証するために、[[永続的なブロックデバイスの命名]]を使うべきです。さもないと、ルートデバイスの場所がブート毎に変わってしまい、その結果、カーネルパニックを引き起こす場合があります。<br />
* バージョン 36 より前の ''mkinitcpio'' によって作成されたプリセットファイルでは、{{ic|ALL_config}} 変数が定義されており、この変数が存在しているとドロップインの設定ファイルが読み込まれません。ドロップインファイルを有効化するには、古いプリセットファイルにある {{ic|1=ALL_config="/etc/mkinitcpio.conf"}} 行をコメントアウトしてください。<br />
}}<br />
<br />
=== MODULES ===<br />
<br />
{{ic|MODULES}} 配列では、何か他のことが行われる前にロードするモジュールを指定します。<br />
<br />
モジュールの後ろに {{ic|?}} を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。<br />
<br />
{{Note|<br />
* '''reiser4''' を使う場合、そのモジュールを {{ic|MODULES}} 配列に追加''しなければなりません''。<br />
* '''encrypt''' や '''sd-encrypt''' を使用し、かつ ''mkinitcpio'' が実行されるシステムと生成されたイメージが使用されるシステムが異なる場合、システムの起動中に LUKS デバイスをアンロックするために必要なキーボードモジュールやファイルシステムを {{ic|MODULES}} 配列に追加する必要があります。例えば、使用するキーファイルが ext2 ファイルシステム上にあるが、''mkinitcpio'' が実行されたときには ext2 ファイルシステムがマウントされていなかった場合、{{ic|ext2}} を追加してください。詳細は [[Dm-crypt/システム設定#cryptkey]] を見てください。<br />
* LUKS デバイスをアンロックするために USB 3 ハブのキーボードを使いたい場合、{{ic|usbhid xhci_hcd}} を追加してください。<br />
* ドッキングステーションに接続されているディスプレイを使用する場合、initrd の出力を見えるようにするためにあなたのグラフィックカードのモジュールを追加する必要があるかもしれません (例: ほとんどの Intel カードでは {{ic|i915}})。<br />
}}<br />
<br />
=== BINARIES と FILES ===<br />
<br />
以下のオプションを使ってイメージにファイルを追加することができます。{{ic|BINARIES}} と {{ic|FILES}} はフックが実行される前に追加され、フックによって使用/提供されるファイルを上書きすることがあります。{{ic|BINARIES}} は標準の {{ic|PATH}} に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。{{ic|FILES}} は''そのままの状態で''追加されます。例:<br />
<br />
FILES=(/etc/modprobe.d/modprobe.conf)<br />
<br />
BINARIES=(kexec)<br />
<br />
{{ic|BINARIES}} と {{ic|FILES}} は両方とも [[Bash]] 配列です。なので、スペースで区切ることで複数のエントリを追加することができます。<br />
<br />
=== HOOKS ===<br />
<br />
{{ic|HOOKS}} 配列は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの {{ic|HOOKS}} にある順番通りに実行されます。<br />
<br />
ほとんどのシンプルな単一ディスク環境では、デフォルトの {{ic|HOOKS}} 設定で十分なはずです。[[LVM]]、[[RAID]]、[[dm-crypt]] などのスタックルートデバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。<br />
<br />
==== ビルドフック ====<br />
<br />
ビルドフックは {{ic|/usr/lib/initcpio/install/}} にあります。カスタムビルドフックは {{ic|/etc/initcpio/install/}} に配置します。これらのファイルは ''mkinitcpio'' の実行時に bash シェルによって実行されます。ビルドフックには2つの関数が含まれています: {{ic|build}} と {{ic|help}}。{{ic|build}} 関数にはイメージに追加するモジュール、ファイル、バイナリを記述します。これらのアイテムの追加を容易にする {{man|8|mkinitcpio}} による API が用意されています。{{ic|help}} 関数はフックの役割を出力します。<br />
<br />
すべてのフックを一覧するには:<br />
<br />
$ mkinitcpio -L<br />
<br />
特定のフックのヘルプを出力するには ''mkinitcpio'' の {{ic|-H}}/{{ic|--hookhelp}} オプションを使って下さい、例えば:<br />
<br />
$ mkinitcpio -H udev<br />
<br />
==== ランタイムフック ====<br />
<br />
ランタイムフックは {{ic|/usr/lib/initcpio/hooks/}} にあります。カスタムランタイムフックは {{ic|/etc/initcpio/hooks/}} に配置します。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは {{ic|add_runscript}} をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは {{ic|HOOKS}} 設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:<br />
<br />
{{ic|run_earlyhook}}: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。<br />
<br />
{{ic|run_hook}}: 初期のフックの後すぐに、この名前の関数が実行されます。一番一般的なフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。<br />
<br />
{{ic|run_latehook}}: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや {{ic|/usr}} など他のファイルシステムのマウントなどに控えめに使われます。<br />
<br />
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。<br />
<br />
{{Note|ランタイムフックは busybox init でのみ使用されます。 '''systemd''' フックは systemd ベースの init をトリガーします。これはランタイムフックを実行せず、代わりに systemd ユニットを使用します。}}<br />
<br />
==== 通常のフック ====<br />
<br />
以下は、通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。<br />
<br />
{| class="wikitable"<br />
! busybox init !! systemd init !! [[#ビルドフック|ビルドフック]] !! [[#ランタイムフック|ランタイムフック]] (busybox init のみ)<br />
|-<br />
| {{C|'''base'''}} || {{Grey|''任意''}} || 全ての初期ディレクトリをセットアップし、基本のユーティリティとライブラリをインストールします。'''systemd''' フックを使用していない場合、このフックは重要な busybox init を提供するので、何をしようとしているか理解していない限りはこのフックを常に1番最初に置いてください。<br/>'''systemd''' フックを使用する場合、'''base''' フックは busybox のリカバリシェルを提供するだけなので、'''base''' の追加は任意となります。{{Note|initramfs の root アカウントが[https://gitlab.archlinux.org/archlinux/packaging/packages/systemd/-/commit/292cdf8a2f7dd7c6c7d91d2b59617391935c837c ロックされている]ため、リカバリシェルは使用できません。{{Bug|70408}} を見てください。}}<br />
| {{-}}<br />
|-<br />
| {{C|'''udev'''}} ||rowspan="3" {{C|'''systemd'''}} || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || udev デーモンを起動して、カーネルからの uevent を処理します; デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。<br />
|-<br />
| {{C|'''usr'''}} || {{ic|/usr}} の分割パーティションのサポートを追加します。詳細は [[#/usr を別のパーティションに分割する]] を見てください。 || 本物のルートファイルシステムがマウントされた後に {{ic|/usr}} パーティションをマウントします。<br />
|-<br />
|-<br />
| {{C|'''resume'''}} || {{-}} || "ハイバネート" (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は [[ハイバネート]] を見てください。<br />
|-<br />
| {{C|'''btrfs'''}} || {{Grey|–}} || [[Btrfs]] を有効にして、Btrfs でフォーマットされた複数のデバイスを使用するために必要なモジュールを設定します。このフックを使うには、{{Pkg|btrfs-progs}} をインストールする必要があります。単一のデバイスで Btrfs を使うだけならこのフックは不要であり、{{ic|filesystems}} フックで十分です。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。<br />
|-<br />
|colspan="2" {{C|'''autodetect'''}} || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。'autodetect' より前に置かれたフックは完全にインストールされます。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''modconf'''}} || {{ic|/etc/modprobe.d/}} と {{ic|/usr/lib/modprobe.d/}} から modprobe 設定ファイルをロードします。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''kms'''}} || [[カーネルモード設定#インストール|KMS の早期開始]] を提供する GPU モジュールを追加します。加えて、一部のノート PC の LCD パネルに組み込まれているプライバシースクリーンに必要なモジュールも追加します。|| {{-}}<br />
|-<br />
|colspan="2" {{C|'''block'''}} || 全てのブロックデバイスモジュールを追加します。昔は ''fw'', ''mmc'', ''pata'', ''sata'', ''scsi'' , ''usb'', ''virtio'' フックに分かれていました。 || {{-}}<br />
|-<br />
| {{C|'''net'''}} || {{Grey|''未実装''}} || ネットワークデバイスに必要なモジュールを追加します。このフックを使うには {{Pkg|mkinitcpio-nfs-utils}} をインストールしなければなりません。詳細は [[#net を使う]] を見てください。 || NFS の root ファイルシステムの管理を提供します。<br />
|-<br />
| {{C|'''dmraid'''}} || {{Grey|''?''}} || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では ''mdadm_udev'' フックと一緒に [[mdadm]] を使うことが推奨されます。詳細は [[#RAID を使う]] を見てください。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを検索・構築します。<br />
|-<br />
|colspan="2" {{C|'''mdadm_udev'''}} || udev を使って RAID アレイの構築をサポートします。このフックを使うには {{Pkg|mdadm}} をインストールする必要があります。詳細は [[RAID#mkinitcpio を設定する]] を見てください。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''keyboard'''}} || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。これは古い ''usbinput'' フックを置き換えました。<br />
<br />
{{Note|異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは [[Wikipedia:Headless computer|ヘッドレスシステム]]) の場合、起動時にキーボードを利用できるようにするために (例えば、{{ic|encrypt}} フックが使用されている場合に暗号化済みデバイスをアンロックするために)、このフックを '''autodetect''' の前に配置する必要があります。}}<br />
<br />
| {{-}}<br />
|-<br />
| {{C|'''keymap'''}} ||rowspan="2" {{C|'''sd-vconsole'''}} || {{ic|/etc/vconsole.conf}} から initramfs に、指定した[[コンソールでのキーボード設定#永続的な設定|キーマップ]]を追加します。[[Dm-crypt/システム全体の暗号化|システム暗号化]]を使用する場合 (特にフルディスク暗号化) 、{{ic|1=encrypt}} フックよりも前に追加するようにしてください。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。<br />
|-<br />
| {{C|'''consolefont'''}} || {{ic|/etc/vconsole.conf}} から initramfs に、指定した[[コンソールでのキーボード設定#永続的な設定|コンソールフォント]]を追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。<br />
|-<br />
| {{C|'''encrypt'''}} || {{C|'''sd-encrypt'''}} || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。{{Note|暗号化されたデバイスを起動時にアンロックするための ''keyboard'' フックの注意書きや、ファイルをアンロックする際はファイルシステムについての [[#MODULES]] にある注意書きを見てください。}} || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。<br />
'''sd-encrypt''' については [[Dm-crypt/システム設定#sd-encrypt フックを使う]]を見てください。<br />
|-<br />
|colspan="2" {{C|'''lvm2'''}} || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。ルートファイルシステムを [[LVM]] 上に置いている場合、このフックは必須です。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''filesystems'''}} || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを {{ic|MODULES}} で指定していない限りこのフックが'''必要'''になります。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''fsck'''}} || fsck バイナリとファイルシステム固有のヘルパーを追加し、マウント前にルードデバイスに対して fsck を実行できるようにします。'''autodetect''' フックの後ろにこのフックを追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は'''強く'''推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。このフックを含める場合、初期ユーザ空間でキーボードが動作することを保証するために必要なモジュールも追加することを強く推奨します。<br/>このフックを使用するには、[[カーネルコマンドライン]]にパラメータ {{ic|rw}} を設定する必要があります ([https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 議論])。詳細は [[fsck#ブート時のチェック]] を見てください。 || {{-}}<br />
|-<br />
|colspan="2" {{C|'''microcode'''}} || Intel 及び AMD プロセッサ向けの[[マイクロコード]]早期アップデートファイルを未圧縮 initramfs イメージの先頭に埋め込みます。これは、利用可能であれば {{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるマイクロコードファイルを使用します。これらのファイルが利用できない場合は、{{ic|/boot/amd-ucode.img}} と {{ic|/boot/intel-ucode.img}} を展開して使用します。<br/> '''autodetect''' フックがこのフックより前に実行される場合、イメージをビルドする際に使用したシステムに搭載されているプロセッサ向けのマイクロコードの早期アップデートファイルのみが追加されます。<br/> このフックは、非推奨となっている {{ic|--microcode}} フラグと、プリセットファイルの {{ic|microcode}} オプションの機能を置き換えるものです。また、このフックによって、メインの initramfs イメージにマイクロコードのアップデートが埋め込まれるようになるため、マイクロコードを読み込む {{ic|initrd}} 行をブートローダーの設定に追加する必要が無くなります。 || {{-}}<br />
|-<br />
|}<br />
<br />
=== COMPRESSION ===<br />
<br />
カーネルは、initramfs の圧縮にいくつかの形式をサポートしています: {{Pkg|gzip}}、{{Pkg|bzip2}}、lzma ({{Pkg|xz}})、{{Pkg|xz}}、lzo ({{Pkg|lzop}})、{{Pkg|lz4}}、{{Pkg|zstd}}。mkinitcpio はデフォルトで zstd 圧縮イメージを使用します。zstd と xz の圧縮アルゴリズムは、マルチスレッドモードで実行されることに注意してください (検出されたコアと同じ数のスレッドの生成を試みる {{ic|-T0}} オプションが使用されます)。<br />
<br />
提供されている {{ic|mkinitcpio.conf}} には、さまざまな {{ic|COMPRESSION}} オプションがコメントアウトされています。別の圧縮方法に切り替える場合は、コメントを解除し、対応する圧縮ユーティリティがインストールされていることを確認してください。何も指定しない場合は、zstd のデフォルトのメソッドが使用されます。非圧縮イメージを作成する場合は、設定ファイルで {{ic|1=COMPRESSION='''cat'''}} を指定するか、コマンドラインで {{ic|-z cat}} を使用します。<br />
<br />
{{Tip|lz4 は、高圧縮モード ({{ic|-9}}) のイメージの圧縮率は通常約2.5で、シングルスレッド圧縮の遅さを犠牲にして最速の解凍速度を達成しています。zstd は、マルチスレッド圧縮と、オプションによる幅広い圧縮レベルにより、多用途のソリューションを提供します - {{man|1|zstd|Operation modifiers}} を参照。xz は、その高圧縮プリセット ({{ic|-9}}) で約5の縮小率により最小サイズを実現しますが、その代償として展開速度がかなり遅くなります。}}<br />
<br />
=== COMPRESSION_OPTIONS ===<br />
<br />
{{ic|COMPRESSION}} で指定したプログラムに渡す追加のフラグを記述します、例:<br />
<br />
COMPRESSION_OPTIONS=(-9)<br />
<br />
このオプションは空のままにしておくことができます。''mkinitcpio'' は、サポートされている圧縮メソッドに、機能するイメージを生成するために必須なフラグを渡すことを保証しています。<br />
<br />
{{Warning|このオプションを間違って使用すると、カーネルが生成されたイメージを解凍できない場合、''システムが起動不能になる''場合があります。}}<br />
<br />
デフォルトの zstd 圧縮では、カスタムカーネルのスペースを節約するために (特に[[デュアルブート]]環境で、EFI システムパーティションを {{ic|/boot}} として使用する場合)、{{ic|--long}} オプションは非常に効果的です。ただし、RAM の限られたシステムは、このオプションをした場合に initramfs を解凍できない場合があります。また、{{ic|-v}} オプションは、initramfs の生成中に詳細を見たい場合に必要になるかもしれません。例:<br />
<br />
COMPRESSION_OPTIONS=(-v -5 --long)<br />
<br />
xz で圧縮レベル {{ic|-9e}} を使用すれば、圧縮速度が最も遅くなりますが、圧縮率を最大に高めることができます:<br />
<br />
COMPRESSION="xz"<br />
COMPRESSION_OPTIONS=(-9e)<br />
<br />
== ランタイムのカスタマイズ ==<br />
<br />
ランタイム設定オプションはカーネルコマンドラインを通して {{ic|init}} や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくは [[カーネルパラメータ]] や [[Arch ブートプロセス]] を見て下さい。<br />
<br />
=== base フックの init ===<br />
<br />
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。''mkinitcpio'' は柔軟に様々な形式を使うことができるようになっています。形式の例は [[永続的なブロックデバイスの命名#カーネルパラメータ]] を見てください。<br />
<br />
{{Note|以下のブートパラメーターは initramfs 環境における {{ic|init}} のデフォルトの挙動を変更します。詳しくは {{ic|/usr/lib/initcpio/init}} を参照。{{ic|systemd}} フックが使われている場合 {{ic|base}} フックの {{ic|init}} は置き換わるため機能しません。}}<br />
<br />
; {{ic|break}}: {{ic|break}} や {{ic|1=break=premount}} が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に) {{ic|init}} はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。{{ic|1=break=postmount}} と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。<br />
<br />
; {{ic|disablehooks}}: {{ic|1=disablehooks=hook1[,hook2,...]}} を追加すると実行時にフックを無効化します。例: {{bc|1=disablehooks=resume}}<br />
<br />
; {{ic|earlymodules}}: {{ic|1=earlymodules=mod1[,mod2,...]}} という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。<br />
<br />
他のパラメータについては [[ブートデバッグ]] や {{man|8|mkinitcpio}} を見て下さい。<br />
<br />
=== RAID を使う ===<br />
<br />
[[RAID#mdadm フックを mkinitcpio.conf に追加する]] を見てください。<br />
<br />
=== net を使う ===<br />
<br />
{{Note|NFSv4 はまだサポートされていません {{Bug|28287}}。}}<br />
<br />
'''必要なパッケージ'''<br />
<br />
{{ic|net}} は {{Pkg|mkinitcpio-nfs-utils}} パッケージを必要とします。<br />
<br />
'''カーネルパラメータ'''<br />
<br />
公式の[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]に包括的で最新の情報が載っています。<br />
<br />
'''ip='''<br />
<br />
このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つまでの引数を指定できます: {{ic|1=ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>}}。<br />
<br />
カーネルコマンドラインにこのパラメータが存在しなかった場合、全てのフィールドが空とされて、[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]に書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします。<br />
<br />
{{ic|<autoconf>}} パラメータは {{ic|ip}} パラメータの唯一の値として指定できます (前の全ての {{ic|:}} 文字を排除)。値が {{ic|1=ip=off}} や {{ic|1=ip=none}} の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は {{ic|1=ip=dhcp}} です。<br />
<br />
パラメータの説明は、[https://docs.kernel.org/admin-guide/nfs/nfsroot.html カーネルドキュメント]を参照してください。<br />
<br />
例:<br />
<br />
ip=127.0.0.1:::::lo:none --> ループバックインターフェイスを有効化。<br />
ip=192.168.1.1:::::eth2:none --> 静的 eth2 インターフェイスを有効化。<br />
ip=:::::eth0:dhcp --> eth0 構成に対して dhcp プロトコルを有効化。<br />
<br />
{{Note|{{ic|<device>}} パラメータにはカーネルのデバイス名を使用してください (例: {{ic|eth0}})、永続的な名前のデバイス名 (例: {{ic|enp2s0}}) では動作しません。詳細は [[ネットワーク設定#ネットワークインターフェイス]] を見てください。}}<br />
<br />
'''BOOTIF='''<br />
<br />
複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、{{ic|eth0}} が使われます。<br />
<br />
例:<br />
<br />
BOOTIF=01-A1-B2-C3-D4-E5-F6 # 先頭の "01-" と大文字に注意<br />
<br />
'''nfsroot='''<br />
<br />
{{ic|nfsroot}} パラメータがコマンドラインで指定されなかった場合、デフォルトで {{ic|/tftpboot/%s}} が使われます。<br />
<br />
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]<br />
<br />
パラメータの説明を見るには {{ic|mkinitcpio -H net}} を実行してください。<br />
<br />
=== LVM を使う ===<br />
<br />
root デバイスを [[LVM]] 上に置く場合は、[[LVM に Arch Linux をインストールする#mkinitcpio フックを追加する]] を見てください。<br />
<br />
=== 暗号化されたルートを使う ===<br />
<br />
[[Dm-crypt/システム全体の暗号化|root を暗号化]]している場合、どのフックを含めるべきかに関する詳細な情報は [[Dm-crypt/システム設定#mkinitcpio]] を見て下さい。<br />
<br />
=== /usr を別のパーティションに分割する ===<br />
<br />
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります:<br />
<br />
* 起動時にこのパーティションのチェックを実行するために、{{ic|fsck}} フックを追加して、{{ic|/etc/fstab}} で {{ic|/usr}} の {{ic|passno}} を {{ic|2}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です (これはすべてのユーザに推奨されます)。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。<br />
* systemd フックを使っていない場合、{{ic|usr}} フックを追加する。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== イメージの展開 ===<br />
<br />
initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。<br />
<br />
initramfs イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意で、カーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。<br />
<br />
''mkinitcpio'' には {{man|1|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。<br />
<br />
イメージ内のファイルを一覧するには:<br />
<br />
# lsinitcpio /boot/initramfs-linux.img<br />
<br />
カレントディレクトリにファイルを全て展開するには:<br />
<br />
# lsinitcpio -x /boot/initramfs-linux.img<br />
<br />
イメージの重要なパーツについて読みやすいリストを取得することもできます:<br />
<br />
# lsinitcpio -a /boot/initramfs-linux.img<br />
<br />
=== 展開して修正を加えたイメージの再圧縮 ===<br />
<br />
{{ic|/usr/bin/mkinitcpio}} スクリプトの {{ic|build_image}} 関数を以下のパラメータで実行してください:<br />
<br />
build_image ''出力ファイル'' ''圧縮方式''<br />
<br />
{{ic|build_image}} 関数の内容で新しいスクリプトを作成することでこれを実行できます。<br />
これはカレントディレクトリ内の内容を {{ic|''出力ファイル''}} というファイルに圧縮します。<br />
<br />
{{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、fallback イメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。あるいは、自分で修正してイメージを再圧縮してください。}}<br />
<br />
=== マウントされているのに "/dev must be mounted" と表示される ===<br />
<br />
{{ic|/dev}} がマウントされているかどうか確認するために mkinitcpio は {{ic|/dev/fd/}} が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:<br />
<br />
# ln -s /proc/self/fd /dev/<br />
<br />
(当然 {{ic|/proc}} のマウントも必要です。''mkinitcpio'' によって次にチェックされます。)<br />
<br />
=== Possibly missing firmware for module XXXX ===<br />
<br />
カーネルのアップデート後に initramfs を再生成する際、以下のような警告が表示されることがあります:<br />
<br />
==> WARNING: Possibly missing firmware for module: '<nowiki/>''module_name''<nowiki/>'<br />
<br />
''default'' initramfs イメージを生成するときに同じようなメッセージが表示される場合、警告メッセージが言っている通り、追加のファームウェアをインストールする必要があるかもしれません。ほとんどの一般的なファームウェアファイルは {{Pkg|linux-firmware}} パッケージを[[インストール]]することで入手できます。ファームウェアを提供する他のパッケージについては、以下の表を見るか、[[公式リポジトリ]]や [[AUR]] でモジュール名を検索してみてください。<br />
<br />
メッセージが ''fallback'' initramfs イメージの生成時にのみ表示される場合は、以下の2つの選択肢があります:<br />
<br />
* 影響を受けるハードウェアを使用しないことがわかっている場合は、警告を安全に無視できます。<br />
* 警告を抑制したい場合、不足しているファームウェアをインストールできます。メタパッケージ {{AUR|mkinitcpio-firmware}} には、ほどんどのオプションのファームウェアが含まれています。あるいは、手動で必要なパッケージをインストールしてください:<br />
:{| class="wikitable"<br />
|-<br />
! モジュール !! パッケージ<br />
|-<br />
| aic94xx || {{AUR|aic94xx-firmware}}<br />
|-<br />
| ast || {{AUR|ast-firmware}}<br />
|-<br />
| bfa || {{Pkg|linux-firmware-qlogic}}<br />
|-<br />
| bnx2x || {{Pkg|linux-firmware-bnx2x}}<br />
|-<br />
| liquidio || {{Pkg|linux-firmware-liquidio}}<br />
|-<br />
| mlxsw_spectrum || {{Pkg|linux-firmware-mellanox}}<br />
|-<br />
| nfp || {{Pkg|linux-firmware-nfp}}<br />
|-<br />
| qed || {{Pkg|linux-firmware-qlogic}}<br />
|-<br />
| qla1280 || {{Pkg|linux-firmware-qlogic}}<br />
|-<br />
| qla2xxx || {{Pkg|linux-firmware-qlogic}}<br />
|-<br />
| wd719x || {{AUR|wd719x-firmware}}<br />
|-<br />
| xhci_pci || {{AUR|upd72020x-fw}}<br />
|}<br />
* 警告を取り除きたいが、必要ないファームウェアパッケージのためにシステムの空き領域を無駄にしたくない場合、fallback initramfs の生成を無効化することができます:<br />
*# {{ic|/etc/mkinitcpio.d/}} 内のすべての ''.preset'' ファイルで、{{ic|1=PRESETS=('default' 'fallback')}} 行を {{ic|1=PRESETS=('default')}} に変更してください。<br />
*# fallback initramfs イメージを削除してください: {{ic|# rm /boot/*-fallback.img}}。<br />
*# [[ブートローダー]]の設定ファイルを更新してください。<br />
:{{Warning|fallback initramfs の生成を無効化すると、デフォルトの initramfs でシステムの起動が失敗した場合に、システムを起動するためのもう一つの手段が失われることになります。上記の手順を実行する前に、システムリカバリのための起動可能[[USB インストールメディア|インストールメディア]]を作成しておいてください。}}<br />
<br />
=== No PS/2 controller found ===<br />
<br />
一部のマザーボードで (ほとんどの場合、古いもの。しかし、一部の新しいものでも起こります)、i8042 コントローラが自動検出できません。稀なケースですが、キーボードが使えなくなってしまうことがあります。この状況を事前に察知することができます。PS/2 ポートがあり、{{ic|i8042: PNP: No PS/2 controller found. Probing ports directly}} というメッセージが表示される場合、{{ic|MODULES}} 配列に {{ic|atkbd}} を追加してください。[https://archlinux.org/news/linux-313-warning-ps2-keyboard-support-is-now-modular/]<br />
<br />
=== 標準的なレスキュー手順 ===<br />
<br />
不適切な初期 RAM ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください:<br />
<br />
==== あるマシンでは起動できるが他のマシンでは起動できない ====<br />
<br />
''mkinitcpio'' の {{ic|autodetect}} フックは {{ic|/sys}} をスキャンして、ロードされている[[カーネルモジュール]]を確認して不要なカーネルモジュールを排除します。{{ic|/boot}} ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。<br />
<br />
修正するには、[[ブートローダー]]から [[#イメージ作成とアクティベーション|fallback]] イメージを選択してください (fallback は {{ic|autodetect}} によるフィルタリングがされていません)。起動したら、新しいマシンで ''mkinitcpio'' を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで ''mkinitcpio'' を実行して下さい。それでも駄目な場合、initramfs にモジュールを[[#MODULES|手動]]で追加します。<br />
<br />
== 参照 ==<br />
<br />
* Linux カーネルドキュメント [https://docs.kernel.org/filesystems/ramfs-rootfs-initramfs.html#what-is-rootfs initramfs, "What is rootfs?"]<br />
* Linux カーネルドキュメント [https://docs.kernel.org/admin-guide/initrd.html initrd]<br />
* Wikipedia 記事 [[wikipedia:ja:initrd|initrd]]<br />
<br />
{{TranslationStatus|mkinitcpio|2024-03-11|802763}}</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36500
ゲーム
2024-03-10T09:54:31Z
<p>AshMyzk: /* リモートプレイ */ 章を追加</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい (NVIDIA 以外を使っているユーザーも見る価値があります)。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
また、{{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} をダウンロードすることでも SDL のゲーム中にキーボードコマンドを使えるようにすることができます。さらに、{{AUR|libx11-nokeyboardgrab}}{{Broken package link|パッケージが存在しません}} を使うことで X11 レベルでキーボードの占有を無効にしたり、{{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} で {{ic|LD_PRELOAD}} を使って特定の占有を止めるようにしてアプリケーションを実行するなど細かい制御をすることもできます。Wine/lib32 ユーザーは各 lib32 ライブラリにも気をつけて下さい。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。二番目の X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [http://www.xonotic.org/ Xonotic] を使っています):<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
さらに、別の X 設定ファイルを使うことでちょっとしたスパイスを振りかけることができます:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
別の ''xorg.conf'' を使う理由としては、メインの設定では、NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしているのが考えられます。これが望ましくない場合は、二番目の X を起動してセカンドスクリーンを無効にした設定を使うようにするというのが良いでしょう。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
{{ic|chmod +x}} したら、次のようにしてスクリプトを使うことが可能です:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、次のコマンドを実行して下さい:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it doesn't interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Pulseaudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== realtime プライオリティと負の nice レベルを有効にする ====<br />
<br />
Pulseaudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の Pulseaudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
=== Cgroups ===<br />
<br />
[[Cgroups]] はプロセスをグループでまとめてユーザースペースで優先順位を付けて、レイテンシーを最小限にすることができるカーネルのアジャストメントです。IO の優先順位や CPU の優先順位など、複数のファクターを調整することができます。[[Systemd]] は Cgroups を暗示的に管理することができ、多数のスレッドが実行しているシステムをスムーズに動作させます。systemd をインストールするだけでこの動作の改善が行われます。<br />
<br />
=== CPU 周波数スケーリングの設定を確かめる ===<br />
<br />
適切な cpu 周波数スケーリングドライバーを使うように正しく設定されている場合、システムはデフォルトの governor を Ondemand に設定します。デフォルトでは、この governor はシステムが CPU の 95% を利用しているときのみ、非常に短い時間だけ、クロックを変更します。この設定では、電力が節約され熱が少なめですむ代わりに、パフォーマンスにかなり影響を与えることになります。システムの governor をチューニングすることで、ダウンクロックするのをアイドル状態の時だけに限ることが可能です。詳しくは [[Cpufrequtils#ondemand governor を調整する]]を参照。<br />
<br />
== リモートプレイ ==<br />
<br />
[[Wikipedia:ja:クラウドゲーム|クラウドゲーム]]は、クライアント側のハードウェア要件が低いため、近年大きな人気を集めています。クラウドゲームにおいて唯一重要なことは、最低速度が 5 から 10 Mbit/s (ビデオ品質やフレームレートに依ります) の安定したインターネット接続です (イーサネットケーブル接続か 5 GHz WiFi を推奨)。<br />
<br />
ネットワーク経由でのゲームパッドの使用を通常サポートしていないサービスで、ネットワーク経由でゲームパッドを使用する方法については、[[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
<br />
{{Note|ブラウザで動作するサービスのほとんどは、たいてい {{AUR|google-chrome}} との互換性しか保証していません。}}<br />
<br />
{| class="wikitable sortable" style="text-align: center;"<br />
! サービス<br />
! class="unsortable" | インストーラ<br />
! ブラウザクライアントでの利用<br />
! 自身のホストを使う<br />
! ホストの貸出<br />
! フルデスクトップサポート<br />
! コントローラサポート<br />
! class="unsortable" | 備考<br />
|-<br />
| [https://dixper.gg/ Dixper] || {{-}} || {{Yes}} || {{Y|Windows のみ}} || ? || ? || ? || {{-}}<br />
|-<br />
| [https://reemo.io/ Reemo] || {{AUR|reemod-bin}} || {{Y|Chromium ベースブラウザのみ}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Y|Windows のみ}} || ウェブサイトのダウンロードセクションにある公式インストールスクリプトでソフトウェアをインストールすることもできます。<br />
|-<br />
| [https://xbox.com/play Xbox Cloud] || {{AUR|xbox-cloud-gaming}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || XCloud を使用するには Game Pass Ultimate が必要です。<br />
|-<br />
| [[GeForce Now]] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するには、Steam、Epic Client、あるいは GOG 上のゲームが必要です。<br />
|-<br />
| [https://moonlight-stream.org/ Moonlight] || {{AUR|moonlight-qt}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || これは単なるクライアントです。ホストマシンは GeForce Experience (Windows のみ) か [https://github.com/SunshineStream/Sunshine Sunshine] (マルチプラットフォーム) を使用しなければなりません。<br />
|-<br />
| [https://parsec.app/ Parsec] || {{AUR|parsec-bin}} || {{Yes}} (実験的) || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{Yes}} || クラウドホスティングは[https://support.parsecgaming.com/hc/en-us/articles/360031038112-Cloud-Computer-Update もはや利用できなくなっています]{{Dead link|2023|05|06|status=404}}。<br />
|-<br />
| [https://github.com/mbroemme/vdi-stream-client VDI Stream Client] || {{AUR|vdi-stream-client}} || {{No}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || {{No}} || 3D GPU アクセラレーションと組み込みの USB リダイレクトをサポートしている VDI クライアント。<br />
|-<br />
| [https://playkey.net/ Playkey] || {{AUR|playkey-linux}} || ? || ? || ? || ? || ? || {{-}}<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-gb/ps-now/ps-now-on-pc/ PlayStation Now] || [[Wine]] か [[Steam]] の Proton で動作します。 || {{No}} || {{No}} || {{-}} || {{No}} || {{Yes}} || PC 上で PS4、PS3、PS2 のゲームをプレイできます。あるいは、[[ビデオゲームプラットフォームエミュレーター|エミュレータ]]を使うという手もあります。<br />
|-<br />
| style="white-space:nowrap" | [https://www.playstation.com/en-us/remote-play/ PlayStation Remote Play] || {{AUR|chiaki}} || {{No}} || {{Yes}} || {{-}} || {{Yes}} || {{Yes}} || PS4 や PS5 のゲームを PC でプレイできます。<br />
|-<br />
| [https://rainway.com/ Rainway] || 2019 Q3 に登場予定。 || {{Yes}} || {{Y|Windows のみ}} || {{No}} || {{Yes}} || ? || {{-}}<br />
|-<br />
| [https://shadow.tech/ Shadow] || '''安定版:''' {{AUR|shadow-tech}} <br> '''ベータ版''': {{AUR|shadow-beta}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || コントローラサポートは USB over IP に依存しています。現在、AVC のみのサポートとなっており、HEVC はサポートされていません。<br />
|-<br />
| [[Steam#Steam Remote Play|Steam Remote Play]] || {{pkg|steam}} に含まれています || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{-}}<br />
|-<br />
|-<br />
| [https://stadia.google.com Stadia] || {{-}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || サービスは2023年1月18日に終了します。<br />
|-<br />
| [https://vortex.gg/ Vortex]{{Dead link|2024|01|29|status=404}} || {{-}} || {{Yes}} || {{No}} || {{-}} || {{No}} || ? || {{-}}<br />
|-<br />
| [[VNC]] || {{pkg|tigervnc}} or {{pkg|x11vnc}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || 汎用のリモートデスクトッププロトコル。LAN 経由でゲームする場合には、レイテンシは十分に低いはずです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[xrdp]] || {{AUR|xrdp}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || もう一つの汎用リモートデスクトッププロトコル。[[xrdp#グラフィックアクセラレーション|グラフィカルアクセラレーション]]を設定すれば、OpenGL 及び Vulkan の両方がサポートされます。LAN 経由でゲームをする場合におすすめです。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [[X11 フォワーディング]] || {{pkg|openssh}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || [[VirtualGL]] による SSH 経由での X フォワーディングは OpenGL をサポートしており、全てではありませんが一部のゲームで動作します。ゲームパッドのサポートについては [[ゲームパッド#ネットワークを介して Gamepad を使う]] を見てください。<br />
|-<br />
| [https://boosteroid.com/ Boosteroid] || {{AUR|boosteroid}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはデジタル配信プラットフォーム (Steam、EGS、Origin など) 上のゲームが必要です。全てのゲームが利用できるわけではありません。ゲームの完全なリストを見るにはサインアップ (無料) する必要があります。デジタル配信プラットフォーム上であなたが所有しているゲームを起動するには、サブスクリプションを購入する必要があります。<br />
|-<br />
| [https://www.blacknut.com/ Blacknut] || {{AUR|blacknut-appimage}} または [https://www.blacknut.com/en/download/linux Blacknut AppImage] || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || このサービスを使用するにはサブスクリプションが必要です。全てのゲームが利用できるわけではありません。<br />
|}<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事も参照してください: [[パフォーマンスの向上]]。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、安定した応答時間 (変動がない)、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。以下の[[カーネルパラメータ]]を追加することで、TSC を利用可能にし有効化してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
[[リアルタイムカーネル]]をインストールすることで、CPU のスループットが大幅に低下しますが、何も設定せずに応答時間を飛躍的に安定化させることができます。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルドキュメント]によると Proactive Compaction は応答時間の揺れを発生させるので、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]. この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します):<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
Transparent Huge Pages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/]<br />
<br />
{{bc|<br />
# echo never > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html]: <br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 500 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 1000000 > /sys/kernel/debug/sched/latency_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 500000 > /sys/kernel/debug/sched/min_granularity_ns<br />
# echo 0 > /sys/kernel/debug/sched/wakeup_granularity_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576<br />
w /proc/sys/vm/swappiness - - - - 10<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0<br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 500<br />
w /sys/kernel/debug/sched/latency_ns - - - - 1000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000<br />
w /sys/kernel/debug/sched/min_granularity_ns - - - - 500000<br />
w /sys/kernel/debug/sched/wakeup_granularity_ns - - - - 0<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' やその他のプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== fsync パッチ ===<br />
<br />
[[Steam#Fsync パッチ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。<br />
<br />
最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36499
ゲーム
2024-03-10T09:22:23Z
<p>AshMyzk: /* ゲームの取得 */ Lutris を en wikipedia リンクに</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい (NVIDIA 以外を使っているユーザーも見る価値があります)。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
また、{{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} をダウンロードすることでも SDL のゲーム中にキーボードコマンドを使えるようにすることができます。さらに、{{AUR|libx11-nokeyboardgrab}}{{Broken package link|パッケージが存在しません}} を使うことで X11 レベルでキーボードの占有を無効にしたり、{{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} で {{ic|LD_PRELOAD}} を使って特定の占有を止めるようにしてアプリケーションを実行するなど細かい制御をすることもできます。Wine/lib32 ユーザーは各 lib32 ライブラリにも気をつけて下さい。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。二番目の X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [http://www.xonotic.org/ Xonotic] を使っています):<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
さらに、別の X 設定ファイルを使うことでちょっとしたスパイスを振りかけることができます:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
別の ''xorg.conf'' を使う理由としては、メインの設定では、NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしているのが考えられます。これが望ましくない場合は、二番目の X を起動してセカンドスクリーンを無効にした設定を使うようにするというのが良いでしょう。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
{{ic|chmod +x}} したら、次のようにしてスクリプトを使うことが可能です:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、次のコマンドを実行して下さい:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it doesn't interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Pulseaudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== realtime プライオリティと負の nice レベルを有効にする ====<br />
<br />
Pulseaudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の Pulseaudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
=== Cgroups ===<br />
<br />
[[Cgroups]] はプロセスをグループでまとめてユーザースペースで優先順位を付けて、レイテンシーを最小限にすることができるカーネルのアジャストメントです。IO の優先順位や CPU の優先順位など、複数のファクターを調整することができます。[[Systemd]] は Cgroups を暗示的に管理することができ、多数のスレッドが実行しているシステムをスムーズに動作させます。systemd をインストールするだけでこの動作の改善が行われます。<br />
<br />
=== CPU 周波数スケーリングの設定を確かめる ===<br />
<br />
適切な cpu 周波数スケーリングドライバーを使うように正しく設定されている場合、システムはデフォルトの governor を Ondemand に設定します。デフォルトでは、この governor はシステムが CPU の 95% を利用しているときのみ、非常に短い時間だけ、クロックを変更します。この設定では、電力が節約され熱が少なめですむ代わりに、パフォーマンスにかなり影響を与えることになります。システムの governor をチューニングすることで、ダウンクロックするのをアイドル状態の時だけに限ることが可能です。詳しくは [[Cpufrequtils#ondemand governor を調整する]]を参照。<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事も参照してください: [[パフォーマンスの向上]]。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、安定した応答時間 (変動がない)、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。以下の[[カーネルパラメータ]]を追加することで、TSC を利用可能にし有効化してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
[[リアルタイムカーネル]]をインストールすることで、CPU のスループットが大幅に低下しますが、何も設定せずに応答時間を飛躍的に安定化させることができます。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルドキュメント]によると Proactive Compaction は応答時間の揺れを発生させるので、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]. この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します):<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
Transparent Huge Pages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/]<br />
<br />
{{bc|<br />
# echo never > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html]: <br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 500 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 1000000 > /sys/kernel/debug/sched/latency_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 500000 > /sys/kernel/debug/sched/min_granularity_ns<br />
# echo 0 > /sys/kernel/debug/sched/wakeup_granularity_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576<br />
w /proc/sys/vm/swappiness - - - - 10<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0<br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 500<br />
w /sys/kernel/debug/sched/latency_ns - - - - 1000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000<br />
w /sys/kernel/debug/sched/min_granularity_ns - - - - 500000<br />
w /sys/kernel/debug/sched/wakeup_granularity_ns - - - - 0<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' やその他のプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== fsync パッチ ===<br />
<br />
[[Steam#Fsync パッチ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。<br />
<br />
最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36498
ゲーム
2024-03-10T09:19:32Z
<p>AshMyzk: /* ゲームの取得 */ 同期</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
Linux で利用できるゲームであったとしても、それがネイティブに動作するとは限りません。[[Wine]] や [[Proton]] と一緒に事前にパッケージングされていることもあります。<br />
<br />
[[公式リポジトリ]]や [[AUR]] にある Arch 用にパッケージングされたゲームのリストは、[[ゲーム一覧]] を見てください。<br />
<br />
* {{App|Athenaeum|Steam の代替自由ソフトウェア。|https://gitlab.com/librebob/athenaeum|{{AUR|athenaeum-git}}}}<br />
* {{App|Flathub|[[Flatpak]] の中央リポジトリ。ゲームセクションはまだ小さいですが、大きくなりつつあります。|https://flathub.org/apps/category/Game|{{Pkg|flatpak}}、{{Pkg|discover}}、{{Pkg|gnome-software}}}}<br />
* {{App|[[Wikipedia:ja:GOG.com|GOG.com]]|DRM の無いゲームストア。|https://www.gog.com|{{AUR|lgogdownloader}}、{{AUR|wyvern}}、{{AUR|minigalaxy}}}}<br />
* {{App|Heroic Games Launcher|GOG と Legendary の GUI。Epic Games Launcher のオープンソースな代替ソフトウェア。|https://heroicgameslauncher.com/|{{AUR|heroic-games-launcher}}}}<br />
* {{App|[[Wikipedia:ja:itch.io|itch.io]]|インディーゲームストア。|https://itch.io|{{AUR|itch-setup-bin}}}}<br />
* {{App|Legendary|Epic Games Launcher のフリーでオープンソースな代替ソフトウェア。|https://github.com/derrod/legendary|{{AUR|legendary}}}}<br />
* {{App|[[Wikipedia:ja:Lutris|Lutris]]|Linux 用のオープンなゲーミングプラットフォーム。GOG、Steam、Battle.net、Origin、Uplay、その他多くのソースからゲームを取得できます。Lutris は、様々な[https://lutris.net/games ゲームランナー]を使用しており、完全にカスタマイズ可能な設定オプションを使用してゲームを起動することができます。|https://lutris.net|{{Pkg|lutris}}}}<br />
* {{App|Play.it|ネイティブパッケージのビルドを自動化します。[[Wine]]、[[DOSBox]]、ScummVM のゲームもサポートしています。|https://www.dotslashplay.it/|{{AUR|play.it}}}}<br />
* {{App|Rare|Legendary のもう一つの GUI。PyQt5 をベースとしています。|https://github.com/Dummerle/Rare|{{AUR|rare}}}}<br />
* {{App|[[Steam]]|Valve によって開発されている、デジタル配信及びコミュニケーションのためのプラットフォーム。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
<br />
Wine のラッパーに関しては、[[Wine#サードパーティ製アプリケーション]] を参照してください。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい (NVIDIA 以外を使っているユーザーも見る価値があります)。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
また、{{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} をダウンロードすることでも SDL のゲーム中にキーボードコマンドを使えるようにすることができます。さらに、{{AUR|libx11-nokeyboardgrab}}{{Broken package link|パッケージが存在しません}} を使うことで X11 レベルでキーボードの占有を無効にしたり、{{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} で {{ic|LD_PRELOAD}} を使って特定の占有を止めるようにしてアプリケーションを実行するなど細かい制御をすることもできます。Wine/lib32 ユーザーは各 lib32 ライブラリにも気をつけて下さい。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。二番目の X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [http://www.xonotic.org/ Xonotic] を使っています):<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
さらに、別の X 設定ファイルを使うことでちょっとしたスパイスを振りかけることができます:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
別の ''xorg.conf'' を使う理由としては、メインの設定では、NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしているのが考えられます。これが望ましくない場合は、二番目の X を起動してセカンドスクリーンを無効にした設定を使うようにするというのが良いでしょう。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
{{ic|chmod +x}} したら、次のようにしてスクリプトを使うことが可能です:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、次のコマンドを実行して下さい:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it doesn't interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Pulseaudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== realtime プライオリティと負の nice レベルを有効にする ====<br />
<br />
Pulseaudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の Pulseaudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
=== Cgroups ===<br />
<br />
[[Cgroups]] はプロセスをグループでまとめてユーザースペースで優先順位を付けて、レイテンシーを最小限にすることができるカーネルのアジャストメントです。IO の優先順位や CPU の優先順位など、複数のファクターを調整することができます。[[Systemd]] は Cgroups を暗示的に管理することができ、多数のスレッドが実行しているシステムをスムーズに動作させます。systemd をインストールするだけでこの動作の改善が行われます。<br />
<br />
=== CPU 周波数スケーリングの設定を確かめる ===<br />
<br />
適切な cpu 周波数スケーリングドライバーを使うように正しく設定されている場合、システムはデフォルトの governor を Ondemand に設定します。デフォルトでは、この governor はシステムが CPU の 95% を利用しているときのみ、非常に短い時間だけ、クロックを変更します。この設定では、電力が節約され熱が少なめですむ代わりに、パフォーマンスにかなり影響を与えることになります。システムの governor をチューニングすることで、ダウンクロックするのをアイドル状態の時だけに限ることが可能です。詳しくは [[Cpufrequtils#ondemand governor を調整する]]を参照。<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事も参照してください: [[パフォーマンスの向上]]。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、安定した応答時間 (変動がない)、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。以下の[[カーネルパラメータ]]を追加することで、TSC を利用可能にし有効化してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
[[リアルタイムカーネル]]をインストールすることで、CPU のスループットが大幅に低下しますが、何も設定せずに応答時間を飛躍的に安定化させることができます。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルドキュメント]によると Proactive Compaction は応答時間の揺れを発生させるので、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]. この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します):<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
Transparent Huge Pages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/]<br />
<br />
{{bc|<br />
# echo never > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html]: <br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 500 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 1000000 > /sys/kernel/debug/sched/latency_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 500000 > /sys/kernel/debug/sched/min_granularity_ns<br />
# echo 0 > /sys/kernel/debug/sched/wakeup_granularity_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576<br />
w /proc/sys/vm/swappiness - - - - 10<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0<br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 500<br />
w /sys/kernel/debug/sched/latency_ns - - - - 1000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000<br />
w /sys/kernel/debug/sched/min_granularity_ns - - - - 500000<br />
w /sys/kernel/debug/sched/wakeup_granularity_ns - - - - 0<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' やその他のプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== fsync パッチ ===<br />
<br />
[[Steam#Fsync パッチ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。<br />
<br />
最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk
https://wiki.archlinux.jp/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0&diff=36497
ゲーム
2024-03-10T09:00:14Z
<p>AshMyzk: /* ゲームの互換性 */ 同期</p>
<hr />
<div>[[Category:ゲーム]]<br />
[[de:Spiele]]<br />
[[en:Gaming]]<br />
[[lt:Games]]<br />
[[zh-hans:Gaming]]<br />
{{Related articles start}}<br />
{{Related|ゲーム一覧}}<br />
{{Related|ビデオゲームプラットフォームエミュレーター}}<br />
{{Related|Xorg}}<br />
{{Related|ゲームパッド}}<br />
{{Related|Wine}}<br />
{{Related articles end}}<br />
<br />
Linux は長らく「非公式」のゲーミングプラットフォームと見なされてきました。ほとんどのゲーミング関連組織にとって、Linux へのサポートと Linux のターゲットユーザーは最優先事項ではありません。しかし、2021年以降、この状況に変化が現れ始めました。[[Wikipedia:ja:Valve Corporation|Valve]] などの大企業、[[Wikipedia:CodeWeavers|CodeWeavers]] グループ、そして[[Wikipedia:Open-source software development|コミュニティ]]が、Linux エコシステムに多くの改善を行い、Linux が真にゲーム用として利用可能なプラットフォームになることが可能になりました。さらに、Linux 上でもゲームをコンパイルし実行できるようにするためにクロスプラットフォームのレンダリングエンジンに移行するインディーゲーム開発者が増えつつあります。<br />
<br />
ゲームプレイに関して言えば、ユーザーの考えの大部分は、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] プラットフォーム専用に開発された人気のある [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]に向けられることがよくあります。これは理解できますが、Windows が唯一プレイ可能な環境であるわけではありません。このページのさらに下にある [[#ゲーム環境]] と [[#ゲームの取得]] 章を見てください。これらの章では、他のプラットフォーム上でゲームを実行するためのソフトウェアが挙げられています。<br />
<br />
しかし、[[Wikipedia:ja:Microsoft Windows|Microsoft Windows]] 向けに書かれたゲームを Linux で動作させることに執着している場合は、別の考え方、ツール、およびアプローチが必要で、内部についての理解と機能の代替が必要になることがあります。以下の [[#ゲームの技術的情報]] を読んでください。<br />
<br />
== ゲームの技術的情報 ==<br />
<br />
Windows 用に開発された [[Wikipedia:ja:AAA (コンピュータゲーム産業)|AAA ゲーム]]を Linux 上でプレイしようとすると、最終的に'''3つの複雑な問題'''が立ち塞がります:<br />
<br />
; グラフィックス SDK:<br />
: Linux が認識できない API ([[Wikipedia:ja:DirectX|DirectX]] など) 用に開発されコンパイルされたゲーム。<br />
; 汎用ライブラリの依存関係:<br />
: ゲーム内でのセーブ、設定ファイルの読み込みなど、ゲームプレイ中に行うであろう一般的な操作に必要なライブラリ (例: Microsoft Visual C++、MFC、.NET)。<br />
; 互換性のないインターフェイス:<br />
: 上記のフレームワークとは別に、Linux が認識できない、Windows によって生成されたバイナリフォーマットやコンパイル済みコードによる問題もあります。<br />
<br />
グラフィックス SDK は、グラフィックの呼び出しを基底のグラフィックドライバに転送し、グラフィックドライバは GPU ハードウェアと対話します。<br />
<br />
[[Wikipedia:ja:DirectX|DirectX]] をメインの SDK として使用しているゲームは数多くあります。一方、Linux は [[Wikipedia:ja:OpenGL|OpenGL]] と [[Wikipedia:ja:Vulkan (API)|Vulkan]] しかネイティブにサポートしていません。Linux それ自体は [[Wikipedia:ja:DirectX|DirectX]] も前述の技術 (Visual C++、MFC、.NET) もサポートしていません。<br />
<br />
代わりに、'''同一の'''機能を提供し、最終的にはグラフィックの観点から同一の結果を達成することを試みるオープンソースの代替ソフトウェアがいくつか存在します。これらには、[[Wikipedia:ja:ブラックボックス|ブラックボックス]]の観点から、オリジナルの SDK 呼び出しによって行われるであろう結果を「再発明」することを試みる独自の代替実装が含まれています。人気なものとしては以下があります:<br />
<br />
* [[Wine]] (Wine Is Not an Emulator): "ローダー VM"、依存関係の自己記述、相互運用性などを提供します<br />
* [[Proton]]: Wine プロジェクトからフォークされました。Valve の Steam 用に最適化されています。<br />
* [[Wikipedia:ja:Mono (ソフトウェア)|Mono]]: .NET の代替<br />
* [[Wikipedia:ja:Media Foundation|MF-Media]]: media foundation の依存関係<br />
<br />
例えば、[[Wikipedia:ja:DirectX|DirectX]] における頂点の読み込み、変換、シェーディングの呼び出しは、Wine の新しい ''.dll''/''.so'' でゼロから書き直され、その関数が水面下で何を行うかについての"仮説"に基づいて呼び出しを [[Wikipedia:ja:OpenGL|OpenGL]] に転送して、実質同じ結果を達成することを試みるかもしれません。これらの呼び出しは直接的には同じであり、DirectX が実行されているかのように扱われ、パフォーマスには影響しません (ただし、これらと対話する際の初期オーバーヘッドを除く)。<br />
<br />
しばしば、これらのツールは同時にシステム上のディストリビューションに組み込まれます。'''prefix''' (Wine 用語で、Windows サンドボックスを模倣するディレクトリを指す) が作成・設定された後、依存関係は '''prefix 内に'''インストールされ ("サンドボックス"はゲームの[[Wikipedia:ja:ライブラリ|再配布可能ライブラリ]]が依然として必要です)、しばしば [https://wiki.winehq.org/Winetricks winetricks] もインストールされます。その後、まるで Windows 内であるかのように、ゲームの実行を試みます。<br />
<br />
最近では、この方法はほとんどのゲームでうまく行きます (Wine/Proton にはまだ存在しないカーネルドライバが必要な[https://www.keengamer.com/articles/features/opinion-pieces/kernel-level-anti-cheat-and-7-games-or-programs-that-use-it/ アンチチートで保護されているゲーム]を除いて)。ゲームが動作しない場合、通常は、互換性のないパッケージや不足している依存関係、Wine/Proton の未実装の機能が原因です。<br />
<br />
Lutris は、ゲームをインストールする際に、依存関係を管理してくれるランナーとサンドボックスを提供するソフトウェアです。上記の手順が退屈または複雑と感じる場合に便利です。<br />
<br />
== ゲームの一般的な依存関係 ==<br />
<br />
Wine/Proton を使用する場合、どのようなことをしなければならないか、より深く理解するために、ゲームを実行するために必要となる一般的な依存関係を説明します。アーキテクチャについても、x86 か x64 か、できれば両方か、ということを念頭に置く必要があります。<br />
<br />
'''ほとんどの''' Windows ゲームでは、以下の依存関係を prefix にインストールする必要があるでしょう。<br />
<br />
=== 必須 (広く使用されている) ===<br />
<br />
* [[Microsoft フォント|Microsoft Core フォント]]<br />
* Microsoft Visual C++ 2015 (2017 が広く使用されているので、推奨) [2005、2008、2010、2012、2013、2015、2017-2018、2019]<br />
* DirectX 9.0 (11.0 が広く使用されているので、推奨) [June SDK update 2010] {いくつかのコンポーネントの例を挙げると:}<br />
** Direct3D<br />
** Direct2D<br />
** DirectShow<br />
** DirectInput<br />
** DirectPlay<br />
** DirectSound<br />
** DXGI<br />
** XAudio2<br />
* .NET Framework (3.5 がよく使用されます)<br />
* [[OpenGL]]<br />
** OpenAL<br />
** OpenAI<br />
** OpenCL<br />
* [[Vulkan]]<br />
<br />
=== 任意 (しかし、よく使われている) ===<br />
<br />
* XNA<br />
* PhysX<br />
* Media Foundation<br />
* Quicktime<br />
* Adobe Reader 11<br />
* [[Java]] SRE ([[Minecraft]] などで)<br />
<br />
=== 稀 (あまり一般的でない) ===<br />
<br />
* Gamespy<br />
* MIDI driver<br />
* ACDSee<br />
<br />
== マシン要件 ==<br />
<br />
ゲームが必要とする依存関係をプレフィックスに入れるだけでは十分ではありません。カーネルそのものが、ゲームが行う呼び出しに対応する代替が必要です。すでに述べたように、ドライバと代替品が利用可能です。<br />
<br />
=== ドライバー ===<br />
<br />
* AMD ドライバー: [[AMDGPU]] を参照。<br />
* Intel ドライバー: [[Intel graphics]] を参照。<br />
* NVIDIA ドライバー: [[NVIDIA]] を参照。<br />
<br />
=== マシンと代替品への依存性 ===<br />
<br />
{{Note|以下の情報は参考程度です。これらのパッケージの一部は、主要なパッケージをインストールした際に一緒にインストールされます。}}<br />
<br />
* [[Wine]]<br />
* {{Pkg|wine-gecko}}<br />
* {{Pkg|wine-mono}}<br />
* [[Vulkan]]<br />
* [[OpenGL]]<br />
* [[Proton]] 再配布可能パッケージ (オプションですが、役立つ場合があります)<br />
* {{AUR|wine-ge-custom}} または [https://github.com/Tk-Glitch/PKGBUILDS/tree/master/wine-tkg-git TKG] (オプション。失敗しないかぎり) : 特定のゲームのパッチを含む、特別にコンパイルされた wine バージョン。<br />
<br />
== ゲーム環境 ==<br />
<br />
Wine/Proton 以外にもゲームをプレイする方法はあります。Linux でゲームをプレイするための環境は様々あり、これらの環境では Windows と同じくらい (あるいはそれ以上) のゲームが存在します:<br />
<br />
* ネイティブ – Linux プラットフォーム向けのビルドが存在し、OpenGL や Vulkan グラフィックス API のサポートのあるゲーム。<br />
* [[Wikipedia:ja:エミュレータ|エミュレータ]] – 他のアーキテクチャやシステム用に設計されたソフトウェアを実行する際に必要です。ほとんどのゲームは ROM をエミュレータに読み込ませれば特に設定せずとも動き、問題が発生することは稀です。エミュレータのリストは [[ビデオゲームプラットフォームエミュレーター]] を参照してください。<br />
* [[Java]] - Write once, run everywhere (一度書けば、どこでも動く) なプラットフォームです。Linux でも動く人気なゲームとしては、[[Minecraft]]、[[RuneScape]]、[[Wikipedia:Wurm_Online|Wurm Online]]、[[Wikipedia:Puzzle_Pirates|Puzzle Pirates]] があります。<br />
* ウェブ – ウェブブラウザ内で動くゲームです。<br />
** HTML5 ゲームは canvas と WebGL の技術を使用し、最近のブラウザ全てで動作可能です。<br />
** [[Flash]] ベースのゲーム – プレイするにはプラグインをインストールする必要があります。<br />
* [[Wine]] – Windows 互換レイヤーです。Unix ライクなオペレーティングシステム上で Windows アプリケーション (だけでなく多くのゲームも) を動かせるようにします。[[Wine#DXVK]] を使用すれば、ランタイムで DirectX から Vulkan への変換もサポートし、DirectX しかサポートしていないゲームでパフォーマンスを向上させることができます。<br />
* [[仮想マシン]] – ゲームと互換性のあるオペレーティングシステム (Windows など) をインストールするために使用できます。[[VirtualBox]] には優れた 3D サポートがあります。これに加えて、互換性のあるハードウェアを使用している場合は、Windows KVM ゲストへの VGA パススルー (キーワードは [https://docs.kernel.org/driver-api/vfio.html "virtual function I/O" (VFIO)]) や [[OVMF による PCI パススルー]]も可能です。<br />
* [https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 Proton/DXVK] – プロプライエタリな {{Pkg|steam}} プラットフォームで使用するために設計された、Wine のフォークです。Wine よりも優れたゲームへのサポートを可能にします。詳細は [[Steam#Proton Steam-Play]] を参照してください。<br />
<br />
== ゲームの互換性 ==<br />
<br />
=== vm.max_map_count を増やす ===<br />
<br />
デフォルトでは {{ic|vm.max_map_count}} サイズ制限は 65530 となっていますが、一部のゲームにおいては小さすぎる可能性があります [https://www.phoronix.com/news/Fedora-39-VM-Max-Map-Count]。なので、以下のような [[sysctl]] 設定ファイルを作成してサイズを永続的に大きくしておきましょう:<br />
<br />
{{hc|/etc/sysctl.d/80-gamecompatibility.conf|2=<br />
vm.max_map_count = 2147483642<br />
}}<br />
<br />
'''2147483642''' (MAX_INT - 5) は SteamOS でのデフォルト値です。Fedora では、'''1048576''' が安全な値であるとされています [https://www.phoronix.com/news/Fedora-39-Max-Map-Count-Approve]。<br />
<br />
再起動せずに変更を適用するには、以下を実行してください:<br />
<br />
# sysctl --system<br />
<br />
{{Note|この設定により、コアダンプファイルを読み込もうとする古いプログラムとの互換性が壊れる可能性があります [https://github.com/torvalds/linux/blob/v5.18/include/linux/mm.h#L178]。}}<br />
<br />
== ゲームの取得 ==<br />
<br />
=== ネイティブ ===<br />
<br />
[[公式リポジトリ]]や [[AUR]] からかなりの数が入手できます。[http://liflg.org/ Loki] はいくつかのゲームのインストーラーを提供しています。<br />
<br />
=== デジタル配信 ===<br />
<br />
* {{App|[[Wikipedia:Desura|Desura]]|インディーゲームに特化したデジタル配信プラットフォーム。豊富なゲームがあると考えてよいでしょう (セキュリティやバグがあまり気にならないならば)。|http://www.desura.com/|{{AUR|desura}}{{Broken package link|パッケージが存在しません}}}}<br />
<br />
* {{App|[[Steam]]|Valve によって開発されている著名なデジタル配信とコミュニケーションのプラットフォーム。最近 Linux に (開発会社によって) 移植された有名ゲームが揃っています。Source (Half-Life 2) や Goldsource (HL1) エンジンのゲーム, Serious Sam 3, Brutal Legend, 多数の Humble Bundles のゲームやその他のインディータイトルなどを含んだ巨大なライブラリが存在します。|https://store.steampowered.com|{{Pkg|steam}}}}<br />
::*[http://developer.valvesoftware.com/wiki/Steam_under_Linux Steam under Linux]<br />
::*[https://store.steampowered.com/browse/linux/ linux ゲームカタログを見る]<br />
::*Steam のタイトル全てがネイティブであるとは限りません。中には Wine を使って動作するゲームも存在します。<br />
<br />
* The [https://www.humblebundle.com/store Humble Store]<br />
<br />
* [https://itch.io/ itch.io] || {{AUR|itch}}<br />
<br />
* [http://www.gog.com/games/linux GOG.com]<br />
::*{{AUR|lgogdownloader}} パッケージを使うことでコマンドラインから GOG タイトルをダウンロードすることができます。<br />
::*GOG.com が公式でサポートしているのは Ubuntu と Linux Mint だけです。サポートを求めるときはこのことを覚えておきましょう。たとえ Arch でゲームが動かせなかったとしても返金してもらうことはできません。<br />
::*ほとんどの GOG.com タイトルは DOSBox, ScummVM, Wine によってパッケージ化されています。<br />
<br />
=== Java ===<br />
<br />
* 多くの 4kb 以下のゲーム (中にはゲームデザインの名作もあります) が http://www.java4k.com にあります。<br />
* https://www.pogo.com/ &ndash; 最大のカジュアル Java ゲームポータル<br />
* [http://www.javagametome.com/ The Java Game Tome] - カジュアルゲームの巨大なデータベース<br />
<br />
=== Wine ===<br />
<br />
* [[Wine]] におけるゲーム (やその他のアプリケーション) の実行については [https://appdb.winehq.org/ Wine AppDB] に情報が集積されています。<br />
* [[:カテゴリ:Wine]] も参照。<br />
<br />
{{Pkg|playonlinux}} を使うのが (特に初心者には) おすすめです。必要な依存パッケージが全てインストールされ、最初の起動時に Windows ツールを自動でダウンロード、ネイティブの windows アプリケーションが正しく実行されるように設定を行います。詳しくは、[https://www.playonlinux.com/en/ 公式ウェブサイト]を見て下さい。<br />
<br />
== ゲームの設定 ==<br />
<br />
特定のゲームや、ゲームのタイプによっては実行するのに特別な設定を必要としたり、または設定されていることが前提になっていることがあります。大抵のゲームは、何も設定をしなくても Arch Linux で動作し、コンパイル時の最適化によって、他のディストリビューションよりもパフォーマンスが出ることもあります。しかしながら、特別な環境を使っている場合、希望通りにゲームをスムーズに実行するために多少の設定やスクリプトが必要になるでしょう。<br />
<br />
=== マルチスクリーン環境 ===<br />
<br />
マルチスクリーン環境ではフルスクリーンのゲームで問題が発生することがあります。そのようなときは、[[#別の X サーバーでゲームを起動する|別の X サーバーを実行する]]のが一つの解決方法になりえます。他の方法は [[NVIDIA#Twinview を使ってゲームを遊ぶ|NVIDIA の記事]]を見てみて下さい (NVIDIA 以外を使っているユーザーも見る価値があります)。<br />
<br />
=== キーボード操作 ===<br />
<br />
多くのゲームはキーボードの入力を横取りするため、ウィンドウの切り替え (alt-tab) ができなくなることがあります。<br />
<br />
SDL のゲーム (例: Guacamelee) では {{ic|Ctrl-g}} を押すことでキーボードの占有を無効にすることが可能です。<br />
<br />
また、{{AUR|sdl-nokeyboardgrab}}{{Broken package link|{{aur-mirror|sdl-nokeyboardgrab}}}} をダウンロードすることでも SDL のゲーム中にキーボードコマンドを使えるようにすることができます。さらに、{{AUR|libx11-nokeyboardgrab}}{{Broken package link|パッケージが存在しません}} を使うことで X11 レベルでキーボードの占有を無効にしたり、{{AUR|libx11-ldpreloadnograb}}{{Broken package link|{{aur-mirror|libx11-ldpreloadnograb}}}} で {{ic|LD_PRELOAD}} を使って特定の占有を止めるようにしてアプリケーションを実行するなど細かい制御をすることもできます。Wine/lib32 ユーザーは各 lib32 ライブラリにも気をつけて下さい。<br />
<br />
{{Note|SDL はときどき入力システムを使うことができなくなることが知られています。そのような場合は、数秒間待機すると入力できるようになることがあります。}}<br />
<br />
=== 別の X サーバーでゲームを起動する ===<br />
<br />
上記のような場合だと、別の X サーバーを実行するのが必要もしくは望ましいかもしれません。二番目の X サーバーを実行することには複数の利点が存在します。より良いパフォーマンス、{{ic|Ctrl+Alt+F7}}/{{ic|Ctrl+Alt+F8}} を使ってゲームを"最小化"することができる、ゲームがグラフィックドライバーと問題を起こしてもメインの X サーバーはクラッシュしないなどです。新しい X サーバーは ALSA へのリモートアクセスログインと同じく、ユーザーは音声を聞くために {{ic|audio}} グループに入っている必要があります。<br />
<br />
別の X サーバーを起動するには次のようにします (例として [http://www.xonotic.org/ Xonotic] を使っています):<br />
$ xinit /usr/bin/xonotic-glx -- :1 vt$XDG_VTNR<br />
さらに、別の X 設定ファイルを使うことでちょっとしたスパイスを振りかけることができます:<br />
$ xinit /usr/bin/xonotic-glx -- :1 -xf86config xorg-game.conf vt$XDG_VTNR<br />
別の ''xorg.conf'' を使う理由としては、メインの設定では、NVIDIA の Twinview を使って Xonotic のような 3D ゲームをマルチスクリーンの中央、全ての画面にまたがって、レンダリングしているのが考えられます。これが望ましくない場合は、二番目の X を起動してセカンドスクリーンを無効にした設定を使うようにするというのが良いでしょう。<br />
<br />
Openbox を利用してホームディレクトリや {{ic|/usr/local/bin}} でゲームを起動するスクリプトは以下のようになります:<br />
{{hc|~/game.sh|<nowiki><br />
if [ $# -ge 1 ]; then<br />
game="$(which $1)"<br />
openbox="$(which openbox)"<br />
tmpgame="/tmp/tmpgame.sh"<br />
DISPLAY=:1.0<br />
echo -e "${openbox} &\n${game}" > ${tmpgame}<br />
echo "starting ${game}"<br />
xinit ${tmpgame} -- :1 -xf86config xorg-game.conf || exit 1<br />
else<br />
echo "not a valid argument"<br />
fi<br />
</nowiki>}}<br />
<br />
{{ic|chmod +x}} したら、次のようにしてスクリプトを使うことが可能です:<br />
$ ~/game.sh xonotic-glx<br />
<br />
=== マウス検出の調整 ===<br />
<br />
マウスの素早い操作が鍵を握るゲームの場合、[[マウスのポーリングレート]]を調整することで精度を上げられます。<br />
<br />
=== OpenAL とバイノーラル音声 ===<br />
<br />
[[Wikipedia:ja:OpenAL|OpenAL]] を使っているゲームでは、ヘッドフォンを使用している場合、OpenAL の [[Wikipedia:ja:頭部伝達関数|HRTF]] フィルターを使ってより良いポジショナルオーディオを得ることができます。有効にするには、次のコマンドを実行して下さい:<br />
<br />
echo "hrtf = true" >> ~/.alsoftrc<br />
<br />
または、AUR から {{AUR|openal-hrtf}} をインストールして、{{ic|/etc/openal/alsoftrc.conf}} のオプションを編集して下さい。<br />
<br />
Source エンジンのゲームの場合、HRTF を有効にするにはゲーム内設定の `dsp_slow_cpu` を `1` に設定します。設定しなかった場合は代わりに自前の処理がゲームによって有効にされます。また、ネイティブランタイムを使うように Steam を設定するか、または openal.so のネイティブランタイムのコピーをローカルコピーにリンクさせる必要があります。完全性のために、以下のオプションを使って下さい:<br />
<br />
dsp_slow_cpu 1 # Disable in-game spatialiazation<br />
snd_spatialize_roundrobin 1 # Disable spatialization 1.0*100% of sounds<br />
dsp_enhance_stereo 0 # Disable DSP sound effects. You may want to leave this on, if you find it doesn't interfere with your perception of the sound effects.<br />
snd_pitchquality 1 # Use high quality sounds<br />
<br />
=== Pulseaudio の調整 ===<br />
<br />
[[PulseAudio]] を使っている場合、最適な動作をさせるためにデフォルト設定から変更することができる部分がいくつかあります。<br />
<br />
==== realtime プライオリティと負の nice レベルを有効にする ====<br />
<br />
Pulseaudio はオーディオデーモンとしてリアルタイムの優先度で実行されるようにビルドされます。しかしながら、システムがロックアップする可能性があるというセキュリティ上のリスクのため、デフォルトでは標準のスレッドと同じようにスケジューリングされます。これを変更するには、まずユーザーを {{ic|audio}} グループに追加してください。そして、{{ic|/etc/pulse/daemon.conf}} の以下の行をアンコメント・編集してください:<br />
high-priority = yes<br />
nice-level = -11<br />
<br />
realtime-scheduling = yes<br />
realtime-priority = 5<br />
編集したら pulseaudio を再起動します。<br />
<br />
==== 高品質なリミックスを使ってサウンドを良くする ====<br />
<br />
Arch の Pulseaudio ではリミックスチャンネルにデフォルトで speex-float-0 を使っていますが、これはやや低品質なリミックスとされています。あなたのシステムに負担を増やす余裕がある場合は、以下の設定をすることでサウンドを良くすることが可能です:<br />
resample-method = speex-float-10<br />
<br />
==== ハードウェアバッファを Pulse のバッファリングに合わせる ====<br />
<br />
バッファをあわせることで音の途切れを減らし、ほんの僅かですがパフォーマンスを向上させることができます。詳しくは [https://forums.linuxmint.com/viewtopic.php?f=42&t=44862 ここ] を見て下さい。<br />
<br />
=== Cgroups ===<br />
<br />
[[Cgroups]] はプロセスをグループでまとめてユーザースペースで優先順位を付けて、レイテンシーを最小限にすることができるカーネルのアジャストメントです。IO の優先順位や CPU の優先順位など、複数のファクターを調整することができます。[[Systemd]] は Cgroups を暗示的に管理することができ、多数のスレッドが実行しているシステムをスムーズに動作させます。systemd をインストールするだけでこの動作の改善が行われます。<br />
<br />
=== CPU 周波数スケーリングの設定を確かめる ===<br />
<br />
適切な cpu 周波数スケーリングドライバーを使うように正しく設定されている場合、システムはデフォルトの governor を Ondemand に設定します。デフォルトでは、この governor はシステムが CPU の 95% を利用しているときのみ、非常に短い時間だけ、クロックを変更します。この設定では、電力が節約され熱が少なめですむ代わりに、パフォーマンスにかなり影響を与えることになります。システムの governor をチューニングすることで、ダウンクロックするのをアイドル状態の時だけに限ることが可能です。詳しくは [[Cpufrequtils#ondemand governor を調整する]]を参照。<br />
<br />
== パフォーマンスを向上させる ==<br />
<br />
メインの記事も参照してください: [[パフォーマンスの向上]]。Wine プログラムに関しては、[[Wine#パフォーマンス]] を見てください。素晴らしいゲーミング体験のためには、低遅延、安定した応答時間 (変動がない)、十分なスループット (FPS) が必要です。<br />
小さな変動のある源が複数存在すると、それらが時々重なり合って、顕著なカクつきを生み出してしまうでしょう。ゆえに、ほとんどの場合、スループットを少し下げて、応答時間の安定性を増やすことが推奨されます。<br />
<br />
=== clock_gettime のスループットを改善する ===<br />
<br />
ユーザ空間のプログラム (特にゲーム) は、現在の時刻を取得する {{man|2|clock_gettime}} をたくさん呼び出して、ゲームの物理演算や fps の計算などを行います。時間の使用頻度は以下を実行することで確認できます:<br />
<br />
# perf top<br />
<br />
read_hept (または acpi_pm_read) のオーバーヘッドを見てください。<br />
<br />
あなたが非常に正確なタイマーを必要としていないならば、hpet (high precision event timer) や acpi_pm (ACPI Power Management Timer) から、より高速な TSC (time stamp counter) タイマーに切り替えることができます。以下の[[カーネルパラメータ]]を追加することで、TSC を利用可能にし有効化してください:<br />
<br />
tsc=reliable clocksource=tsc<br />
<br />
その後、再起動し、以下を実行して clocksource を確認してください:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/current_clocksource<br />
<br />
以下を実行すれば、現在利用可能なタイマーすべてを確認できます:<br />
<br />
# cat /sys/devices/system/clocksource/clocksource*/available_clocksource<br />
<br />
このコマンドで表示されたタイマー名を current_clocksource に echo する (つまり、書き込む) ことで、タイマーを変更することができます。Zen 3 システムにおける [https://gist.github.com/weirddan455/eb807fa48915652abeca3b6421970ab4] のベンチマークでは、{{ic|hpet}} や {{ic|acpi_pm}} と比べて {{ic|tsc}} のスループットのほうが約50倍良くなっています。<br />
<br />
=== カーネルパラメータを調整して応答時間を安定化させる ===<br />
<br />
[[リアルタイムカーネル]]をインストールすることで、CPU のスループットが大幅に低下しますが、何も設定せずに応答時間を飛躍的に安定化させることができます。ちなみに、リアルタイムカーネルは {{Pkg|nvidia-open-dkms}} とは互換性がなく、デフォルトのプロセススケジューリングタイプである SCHED_NORMAL (SCHED_OTHER とも呼ばれる) のプロセスのスケジューラは変更しません。以下のようにカーネルパラメータを変更すると、リアルタイムカーネルおよび他のカーネル (デフォルトの linux カーネルなど) の応答時間をさらに安定化させます:<br />
<br />
[https://docs.kernel.org/admin-guide/sysctl/vm.html カーネルドキュメント]によると Proactive Compaction は応答時間の揺れを発生させるので、無効化してください:<br />
<br />
# echo 0 > /proc/sys/vm/compaction_proactiveness<br />
<br />
RAM の空き領域が十分にある場合、メモリアロケーション時に応答時間が悪化することを防ぐために、minimum free Kilobytes の値を増やしてください: [http://highscalability.com/blog/2015/4/8/the-black-magic-of-systematically-reducing-linux-os-jitter.html][https://docs.kernel.org/admin-guide/sysctl/vm.html]. この値を 1024 KB 以下、もしくはシステムメモリの 5% より大きい値に設定しないでください。1GB を予約するには:<br />
<br />
# echo 1048576 > /proc/sys/vm/min_free_kbytes<br />
<br />
システムの空きメモリ領域が不足していない限りスワップを防ぐために (スワップはページをロックするので、レイテンシを増加させ、ディスク IO を使用します):<br />
<br />
# echo 10 > /proc/sys/vm/swappiness<br />
<br />
zone reclaim を無効化してください (zone reclaim はメモリページをロック・移動するので、レイテンシのスパイクを発生させます):<br />
<br />
# echo 0 > /proc/sys/vm/zone_reclaim_mode<br />
<br />
Transparent Huge Pages (THP) を無効化してください。デフラグメンテーションが無効化されている場合でも、THP はレイテンシのスパイクを発生させるかもしれません。[https://docs.kernel.org/admin-guide/mm/transhuge.html][https://alexandrnikitin.github.io/blog/transparent-hugepages-measuring-the-performance-impact/]<br />
<br />
{{bc|<br />
# echo never > /sys/kernel/mm/transparent_hugepage/enabled<br />
# echo never > /sys/kernel/mm/transparent_hugepage/shmem_enabled<br />
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag<br />
}}<br />
<br />
あなたのゲームが TCMalloc を使用する場合 (例: Dota2、CS:GO)、パフォーマンスが大幅に低下してしまうので、THP を無効化することは推奨されません。[https://github.com/google/tcmalloc/blob/master/docs/tuning.md#system-level-optimizations]<br />
<br />
適切なスループットを維持しつつ、ページロック取得のレイテンシの最大値を減らします [https://www.phoronix.com/review/linux-59-unfairness][https://openbenchmarking.org/result/2009154-FI-LINUX58CO57&sro][https://www.phoronix.com/review/linux-59-fairness]:<br />
<br />
# echo 1 > /proc/sys/vm/page_lock_unfairness<br />
<br />
スケジューラの設定を調整します。以下のスケジューラの設定は {{AUR|cfs-zen-tweaks}} と衝突するので、それぞれの設定に対してプロバイダを1つだけ選んでください。デフォルトでは、linux カーネルのスケジューラはレイテンシではなくスループットに対して最適化されています。以下のお手製の設定はそれを変更し、異なるゲームにおいてテストされ、顕著な改善が確認されています。これらの設定はあなたのユースケースに対しては最適ではないかもしれません。必要に応じてこれらの設定を変更することを検討してください [https://access.redhat.com/solutions/177953][https://doc.opensuse.org/documentation/leap/tuning/html/book-tuning/cha-tuning-taskscheduler.html]: <br />
<br />
{{bc|<br />
# echo 0 > /proc/sys/kernel/sched_child_runs_first<br />
# echo 1 > /proc/sys/kernel/sched_autogroup_enabled<br />
# echo 500 > /proc/sys/kernel/sched_cfs_bandwidth_slice_us<br />
# echo 1000000 > /sys/kernel/debug/sched/latency_ns<br />
# echo 500000 > /sys/kernel/debug/sched/migration_cost_ns<br />
# echo 500000 > /sys/kernel/debug/sched/min_granularity_ns<br />
# echo 0 > /sys/kernel/debug/sched/wakeup_granularity_ns<br />
# echo 8 > /sys/kernel/debug/sched/nr_migrate<br />
}}<br />
<br />
==== 設定の変更を永続化させる ====<br />
<br />
通常、[[カーネルパラメータ]]を永続的に変更するには、[[sysctl]] の設定ファイルを作成したり、[[ブートローダー]]の設定を変更したりすることが推奨されます。しかし、上記の設定の変更は procfs ({{ic|/proc}}、sysctl を含む) と sysfs ({{ic|/sys}}) の両方に渡っているので、最も便利な方法は [[systemd-tmpfiles]] を使用することです:<br />
<br />
{{hc|/etc/tmpfiles.d/consistent-response-time-for-gaming.conf|<br />
# Path Mode UID GID Age Argument<br />
w /proc/sys/vm/compaction_proactiveness - - - - 0<br />
w /proc/sys/vm/min_free_kbytes - - - - 1048576<br />
w /proc/sys/vm/swappiness - - - - 10<br />
w /proc/sys/vm/zone_reclaim_mode - - - - 0<br />
w /sys/kernel/mm/transparent_hugepage/enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/shmem_enabled - - - - never<br />
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0<br />
w /proc/sys/vm/page_lock_unfairness - - - - 1<br />
w /proc/sys/kernel/sched_child_runs_first - - - - 0<br />
w /proc/sys/kernel/sched_autogroup_enabled - - - - 1<br />
w /proc/sys/kernel/sched_cfs_bandwidth_slice_us - - - - 500<br />
w /sys/kernel/debug/sched/latency_ns - - - - 1000000<br />
w /sys/kernel/debug/sched/migration_cost_ns - - - - 500000<br />
w /sys/kernel/debug/sched/min_granularity_ns - - - - 500000<br />
w /sys/kernel/debug/sched/wakeup_granularity_ns - - - - 0<br />
w /sys/kernel/debug/sched/nr_migrate - - - - 8<br />
}}<br />
<br />
その後、再起動し、値が正しく反映されていることを確認してください。<br />
<br />
=== 共有オブジェクトを即座に読み込んで初回の遅延を減らす ===<br />
<br />
使用するゲームに対して以下の[[環境変数]]を設定してください:<br />
<br />
LD_BIND_NOW=1<br />
<br />
これにより、プログラムコードを実行時に読み込む必要性がなくなり ({{man|8|ld.so}} を参照)、関数が初めて呼ばれたときの遅延をなくします。システム上に実際には存在せず決して呼ばれないライブラリにリンクしている ''startplasma-x11'' やその他のプログラムに対してこの変数を設定しないでください。この場合、プログラムは起動時に存在しない共有オブジェクトにリンクしようとして失敗するので、問題の特定は簡単です。ほとんどのゲームはこの変数を有効化した状態で問題なく起動するはずです。<br />
<br />
=== ユーティリティ ===<br />
<br />
==== Gamemode ====<br />
<br />
[[Gamemode]] は、ゲームがホスト OS に最適化のセットを一時的に適用するように要求できるようにする、Linux 用のデーモン/ライブラリの組です。これによりゲームのパフォーマンスを向上できます。<br />
<br />
=== ACO コンパイラ ===<br />
<br />
{{Note|以下の方法は、'''[[AMDGPU]]''' ドライバを動作させている AMD GPU で'''しか'''動作しません。}}<br />
<br />
[[AMDGPU#ACO コンパイラ]] を参照。<br />
<br />
=== fsync パッチ ===<br />
<br />
[[Steam#Fsync パッチ]] を参照。<br />
<br />
=== DRI の遅延を軽減する ===<br />
<br />
Direct Rendering Infrastructure (DRI) の設定ファイルは、Mesa と Nouveau を含むすべての DRI ドライバに適用されます。{{ic|/etc/drirc}} を編集することで DRI の設定をシステム全体に対して変更することができますし、{{ic|$HOME/.drirc}} を編集すればユーザ単位で変更できます。これらのファイルが存在しない場合、まず作成する必要があります。両方のファイルは同じ構文を使用します。オプションに関するドキュメントは https://dri.freedesktop.org/wiki/ConfigurationOptions/ で見られます。vblank との同期を無効化することで入力の遅延を減らすには、以下を追加してください:<br />
<br />
<driconf><br />
<device><br />
<application name="Default"><br />
<option name="vblank_mode" value="0" /><br />
</application><br />
</device><br />
</driconf><br />
<br />
=== スケジューリングポリシーによってフレームレートやレスポンスを改善する ===<br />
<br />
カーネルがタスクを優先順位付けできるように適切なスケジューリングポリシーを与えれば、ほとんどのゲームにおいて利益を得られます。これらのポリシーは、理想的にはアプリケーション自体によってスレッドごとに設定されるべきです。<br />
<br />
アプリケーション自体がスケジューリングポリシーを実装していない場合、{{Pkg|schedtool}} というアプリケーションとそれに関連するデーモンの {{AUR|schedtoold}} を使えば、これらのタスクの多くを自動的に処理できます。<br />
<br />
どのプログラムがどのポリシーを使用するかを編集するには、{{ic|/etc/schedtoold.conf}} を編集し、プログラム名の後に必要な ''schedtool'' 引数を追加してください。<br />
<br />
==== ポリシー ====<br />
<br />
{{ic|SCHED_ISO}} (-pf や -ck [[カーネル]]で使用されている BFS/MuQSSPDS スケジューラでのみ実装されています) は、プロセスが CPU の最大80%まで使用できるようになるだけでなく、できるかぎり遅延とスタッタリングを減らすことにつながります。全てではなくとも多くのゲームで効果が得られます:<br />
<br />
bit.trip.runner -I<br />
<br />
{{ic|SCHED_FIFO}} は、より良く機能する代替を提供します。あなたのアプリケーションが {{ic|SCHED_FIFO}} でよりスムーズに動作するかを確認してみるべきでしょう。スムーズに動作する場合は、{{ic|SCHED_FIFO}} を代わりに使用すべきです。とはいえ、{{ic|SCHED_FIFO}} はシステムのリソースを枯渇させるリスクがあるので、注意してください。以下のよな -I が使用されるケースでこれを使用します:<br />
<br />
bit.trip.runner -F -p 15<br />
<br />
==== Nice レベル ====<br />
<br />
次に、先に処理させる必要があるタスクを昇順に nice レベルを設定します。ゲームなど、マルチメディアのタスクは基本的に nice レベルを -4 にすることが推奨されています:<br />
<br />
bit.trip.runner -n -4<br />
<br />
==== コアアフィニティ ====<br />
<br />
ドライバーがマルチスレッドするべきか、あるいはプログラムがマルチスレッドするべきかは、開発において多少の混乱が存在します。ドライバとプログラムの両方に同時にマルチスレッドさせてしまうと、フレームレートの低下などの大幅なパフォーマンスの劣化が発生し、クラッシュのリスクを増加させてしまいます。<br />
<br />
最近のゲームや、[[Wikipedia:ja:GLSL|GLSL]] を無効にしないで実行される Wine プログラムなどがこの例に含まれます。単一のコアを選択して、ドライバーだけがプロセスを管理できるようにするには、{{ic|-a 0x''#''}} フラグを使います。''#'' はコアの番号に置き換えて下さい。例えば、1番目のコアを使うには:<br />
<br />
bit.trip.runner -a 0x1<br />
<br />
CPU にはハイパースレッディングによって 2 または 4 のコアしか存在しないのに 4 あるいは 8 もコアがあるように認識されることがあります。その場合、仮想コア 0101 (1 と 3) を使うには:<br />
<br />
bit.trip.runner -a 0x5<br />
<br />
==== 一般的なケース ====<br />
<br />
高いフレームレートと低遅延を必要とするほとんどのゲームでは、上記のフラグを全て使うのが一番良い結果になります。ただし、アフィニティはプログラムごとに確認してください。ほとんどのネイティブゲームは正しい使い方を理解しています。一般的なケースのフラグ例:<br />
<br />
bit.trip.runner -I -n -4<br />
Amnesia.bin64 -I -n -4<br />
hl2.exe -I -n -4 -a 0x1 #GLSL が有効化された状態の Wine<br />
<br />
==== Optimus やその他の便利なプログラム ====<br />
<br />
一般的に、ゲームが動作するのに必要なプロセスはゲーム自体のプロセスよりも上のレベルに renice されるべきです。奇妙なことに、Wine には ''reverse scheduling'' という既知の問題が存在し、重要なプロセスに nice レベルが高く設定されることがあります。そこで、スケジューリングポリシーを設定すると動作が改善します。Wineserver も CPU 全体を消費することはあまりなく、必要なときは優先度を高くする必要があるので、無条件で {{ic|SCHED_FIFO}} を設定したほうが良いでしょう。<br />
<br />
optirun -I -n -5<br />
wineserver -F -p 20 -n 19<br />
steam.exe -I -n -5<br />
<br />
== 周辺機器 ==<br />
<br />
=== マウス ===<br />
<br />
[[マウスのアクセラレーション]]を設定して、マウスをより正確にコントロールできるようにすると良いかもしれません。<br />
<br />
マウスに4つ以上のボタンが付いている場合、[[マウスボタン]] を参照すると良いかもしれません。<br />
<br />
ゲーミングマウス (特に Logitech と Steelseries) を使用している場合、{{Pkg|piper}} を使ってマウスの[[マウスのポーリングレート]]、DPI、LED などを設定すると良いかもしれません。piper によってサポートされているデバイスの完全なリストは[https://github.com/libratbag/libratbag/tree/master/data/devices このページ]を見てください。logitech デバイスだけの場合は {{Pkg|solaar}} も使えます。<br />
<br />
=== LED ===<br />
<br />
{{Pkg|openrgb}} を使ってマザーボードや RAM の点灯を変更できます。現在サポートされているデバイスのリストは、[https://openrgb.org/devices_0.9.html] を見てください。<br />
<br />
== 参照 ==<br />
<br />
* [https://www.reddit.com/r/linux_gaming/ linux_gaming] - reddit.com 上の Linux ゲーミングに関するフォーラム。サブページ: [https://www.reddit.com/r/linux_gaming/wiki/index Wiki]、[https://www.reddit.com/r/linux_gaming/wiki/faq FAQ]。<br />
* [https://github.com/AdelKS/LinuxGamingGuide Linux Gaming Guide] - Linux ゲーミングのエクスペリエンスの最適化に関するテクニック集。<br />
* [https://areweanticheatyet.com/ are we anti cheat yet] - アンチチートを使用するゲームとそのゲームの Gnu/Linux 及び Wine/Proton における互換性の、コミュニティによる包括的なリスト。<br />
* [https://www.protondb.com/ proton db] - コミュニティによる Linux 互換性レポート集</div>
AshMyzk