<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=N</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=N"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/N"/>
	<updated>2026-05-06T08:49:03Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=41275</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=41275"/>
		<updated>2025-12-30T03:56:37Z</updated>

		<summary type="html">&lt;p&gt;N: /* proc ファイルシステム内のカーネルポインタへのアクセスを制限する */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[fa:امنیت]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
[[zh-hans:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|ケイパビリティ}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事には、Arch Linux システムを[[Wikipedia:ja:ハードニング|ハードニング]]するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
== 概念 ==&lt;br /&gt;
&lt;br /&gt;
* システムのセキュリティを厳重にしすぎると、使い物にならなくなることもある。セキュリティと利便性のバランスを取ることが重要だ。重要なのは、安全で &#039;&#039;かつ&#039;&#039; 使いやすいシステムを作ること。&lt;br /&gt;
* 最大の脅威は常にユーザー自身である。&lt;br /&gt;
* [[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部分は、必要最小限の権限のみを持つべきであり、それ以上のアクセスは許可されるべきではない。&lt;br /&gt;
* 多層防御 (Defense in Depth): セキュリティは独立した複数の層で成り立つべきである。一つの層が突破されても、次の層が攻撃を食い止める仕組みが必要です。&lt;br /&gt;
* 少しだけ疑い深くなること。常に警戒すること。うますぎる話には注意すべきだ。それが本当である可能性は低いと思うこと。&lt;br /&gt;
* システムを100%安全にする方法はただ一つ。それはネットワークから切り離し、電源を切り、金庫に入れ、コンクリートで固め、二度と使用しないこと。&lt;br /&gt;
* 失敗を想定せよ。セキュリティが破られたときに備え、あらかじめ対応策を準備しておくこと。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な Linux システムの鍵です。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
=== 安全なパスワードの選び方 ===&lt;br /&gt;
&lt;br /&gt;
パスワードは、個人情報などから簡単に推測されないよう十分に複雑であり、また、ソーシャルエンジニアリングやブルートフォース攻撃などの手法で[[Wikipedia:Password cracking|クラック]]されないようにする必要があります。強力なパスワードの基本原則は、&#039;&#039;長さ&#039;&#039;と&#039;&#039;ランダム性&#039;&#039;に基づいています。暗号学では、パスワードの品質はその[[Wikipedia:Password strength#Entropy as a measure of password strength|エントロピー]]によって測られます。&lt;br /&gt;
&lt;br /&gt;
安全でないパスワードには、以下のようなものが含まれます。また、以下のようなものを元に変更や置き換えを行った場合も同様に危険です。&lt;br /&gt;
&lt;br /&gt;
* 個人を特定できる情報(例:ペットの名前、生年月日、市外局番、好きなビデオゲームなど)&lt;br /&gt;
* 単純な文字の置き換えを行った単語(例:{{ic|k1araj0hns0n}})最新の辞書攻撃ではこれらも簡単に解析可能&lt;br /&gt;
* 既存の &amp;quot;単語&amp;quot; や一般的な文字列の前後に数字・記号・文字を追加したもの(例:{{ic|DG091101%}})&lt;br /&gt;
* 一般的なフレーズや辞書にある単語を短く組み合わせたもの(例:{{ic|photocopyhauntbranchexpose}})文字の置き換えを行っても(例:{{ic|Ph0toc0pyh4uN7br@nch3xp*se}})、安全とは限らない(ただし、後述の &amp;quot;Diceware&amp;quot; を利用した場合は例外あり)&lt;br /&gt;
* [[Wikipedia:List of the most common passwords|最も一般的なパスワード]]のいずれか&lt;br /&gt;
&lt;br /&gt;
最も安全なパスワードは、十分に長く(長いほど良い)ランダムなソースから生成されたものです。長いパスワードを使用することが重要です。[https://www.theregister.com/2019/02/14/password_length 弱いハッシュアルゴリズムを使用すると、8文字のパスワードハッシュはわずか数時間で解読可能] です。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{AUR|apg}} のようなツールを使用すると、ランダムなパスワードを生成できます。しかし、これらのパスワードは覚えにくいことがあります。覚えやすくするための1つの方法は、長いパスワードを生成し、最初は最低限の安全な文字数だけを暗記し、完全な文字列を一時的に書き留めることです。時間をかけて入力する文字数を増やしていけば、最終的にはパスワードが筋肉の記憶として定着し、完全に覚える必要がなくなります。この方法は難易度が高いものの、辞書攻撃や &amp;quot;知的&amp;quot; ブルートフォース攻撃(単語の組み合わせや文字の置き換えを考慮する攻撃)に対して非常に強力です。&lt;br /&gt;
&lt;br /&gt;
パスワード管理とは別に、{{Pkg|keepassxc}} はパスワード/パスフレーズの生成機能を提供します。GUI でカスタマイズ可能なパスワード生成機能があり、辞書ベースのパスフレーズもサポートされています。&lt;br /&gt;
&lt;br /&gt;
パスワードを覚えるための1つの方法として、**記憶術(ニーモニック)**を利用することが挙げられます。&lt;br /&gt;
例えば、&amp;quot;the girl is walking down the rainy street&amp;quot; というフレーズは、以下のようなパスワードに変換できます。簡単な例:{{ic|t6!WdtR5}} より複雑な例:{{ic|t&amp;amp;6!RrlW@dtR,57}}&lt;br /&gt;
この方法は、パスワードを覚えやすくすることができますが、英単語の最初の文字には偏りがあることに注意が必要です([[Wikipedia:Letter frequency#Relative frequencies of the first letters of a word in the English language|Wikipedia:Letter frequency]] を参照)&lt;br /&gt;
&lt;br /&gt;
また、ランダムに生成したパスワードを紙に書いて安全な場所に保管するという方法も有効です。例えば、財布、カバン、金庫などに保管するのがよいでしょう。ほとんどの人は、デジタルセキュリティよりも物理的な貴重品の保護に関しては理解しやすいため、この方法は現実的です。&lt;br /&gt;
&lt;br /&gt;
さらに、記憶術とランダム生成を組み合わせる方法も効果的です。例えば、長くランダムに生成したパスワードを[[パスワードマネージャ]]に保存し、それをマスターパスワードで管理する方法です。マスターパスワードは記憶し、絶対に保存しないようにします。この方法では、パスワードマネージャーがインストールされているシステムでのみパスワードにアクセスできるようになり、状況によっては不便にもなりますが、セキュリティ強化の側面もあります。一部のパスワードマネージャーにはスマートフォンアプリもあり、手入力が必要な場合にパスワードを表示することができます(この場合、完全にランダムなものではなく、タイピングしやすいが安全なパスワードを使うことも検討できます)ただし、マスターパスワードを忘れるとすべてのパスワードにアクセスできなくなるため、単一障害点になり得ることに注意が必要です。&lt;br /&gt;
また、一部のパスワードマネージャーは、保存するパスワードを暗号化するのではなく、マスターパスワードとサービス名から計算する方式を採用しており、新しいシステムでもデータ同期なしで使用できます。&lt;br /&gt;
&lt;br /&gt;
覚えやすく、それでいて強力なパスワードの作成方法として、無関係な単語を複数組み合わせたパスフレーズを使うという方法もあります。この方法では、十分に長いフレーズを使用することで、辞書単語を使うことによるエントロピーの損失を補うことができます。この手法のエントロピーのトレードオフについては、[https://xkcd.com/936/ xkcdのコミック] に示されています。この方法の安全性は、選択可能な単語の集合が大きい(数千語以上)ことと、5〜7語以上のランダムな単語を選択することによって保証されます。攻撃者が選択可能な単語の集合と、使用する単語数を知っていたとしても、(選択可能な単語数) の (選択する単語数) 乗の通りのパスフレーズが生成可能であり、安全性が確保されます。詳細については [https://www.rempe.us/diceware/ Diceware] を参照してください。&lt;br /&gt;
&lt;br /&gt;
さらに詳しい情報については、[https://www.iusmentis.com/security/passphrasefaq/ The passphrase FAQ] や [[Wikipedia:Password strength]] も参考になります。&lt;br /&gt;
&lt;br /&gt;
=== パスワードの管理 ===&lt;br /&gt;
&lt;br /&gt;
強力なパスワードを選んだら、それを安全に保管することが重要です。[[Wikipedia:Keylogger|キーロガー]] (ソフトウェアおよびハードウェア)、スクリーンロガー、[[Wikipedia:Social engineering (security)|ソーシャルエンジニアリング]]、[[Wikipedia:Shoulder surfing (computer security)|ショルダースーフィング]]に注意し、パスワードの使い回しを避けて、セキュリティの低いサーバーから不要な情報が漏れないようにしましょう。[[アプリケーション一覧/セキュリティ#パスワードマネージャ|パスワードマネージャ]]を使用すると、大量の複雑なパスワードを管理できます。パスワードマネージャーからアプリケーションに保存されたパスワードをコピー&amp;amp;ペーストして使用する場合は、毎回コピーした内容をクリアし、ログに保存されないようにしてください(例:プレーンテキストのターミナルコマンドにペーストしないようにし、{{ic|.bash_history}} などのファイルに保存されないようにします)ブラウザ拡張として実装されたパスワードマネージャは、[https://www.spookjs.com サイドチャネル攻撃]に脆弱である可能性があります。これを回避するためには、別のアプリケーションとして実行されるパスワードマネージャーを使用することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
原則として、強力なパスワードを覚えにくいからといって、セキュリティが低いパスワードを選んではいけません。パスワードはバランスを取る必要があります。強力なマスターパスワードと鍵で守られた暗号化された安全なパスワードデータベースを持つ方が、多くの似たような弱いパスワードを使うよりも優れています。パスワードを紙に書いて保管することも、[https://www.schneier.com/blog/archives/2005/06/write_down_your.html] で示されているように、ソフトウェアの脆弱性を避けつつ物理的なセキュリティを確保できるため、非常に効果的です。&lt;br /&gt;
&lt;br /&gt;
パスフレーズの強度のもう一つの側面は、それが他の場所から簡単に回復できないことです。&lt;br /&gt;
&lt;br /&gt;
ディスク暗号化のパスフレーズをログインパスワードと同じに使用する場合(例えば、ログイン時に暗号化されたパーティションやフォルダを自動マウントする場合)、{{ic|/etc/shadow}} が暗号化されたパーティションに保存されるか、または強力な鍵導出関数 (i.e. yescrypt/argon2 や sha512 を PBKDF2 で使用、md5 や低回数の PBKDF2 は避ける) を使用して保存されたパスワードハッシュを使うようにしてください (詳細については [[SHA hashes#SHA パスワードハッシュ|SHA パスワードハッシュ]] を参照してください)&lt;br /&gt;
&lt;br /&gt;
{{Tip|Arch Linux は [https://archlinux.org/news/changes-to-default-password-hashing-algorithm-and-umask-settings/ デフォルトのハッシュアルゴリズム]を yescrypt に変更しました。もしデフォルトをカスタマイズしていない場合は、{{ic|passwd}} を実行してパスワード変更を行うなどして下さい。}}&lt;br /&gt;
&lt;br /&gt;
パスワードデータベースをバックアップする場合、そのコピーが他のパスフレーズで保護されていないことを確認してください。例えば、暗号化されたドライブや認証されたリモートストレージサービスなどです。もしそのような保護が施されている場合、必要なときにアクセスできなくなります。役立つ方法としては、データベースがバックアップされているドライブやアカウントをマスターパスワードの簡単な暗号学的ハッシュで保護することです。バックアップ場所のリストを保持してください。もしもマスターパスワードが漏洩したと疑われる場合、その場所すべてでパスワードを即座に変更し、マスターパスワードから導出された鍵で保護されたすべてのバックアップと場所も変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
データベースをセキュアにバージョン管理するのは非常に複雑な場合があります。もしその方法を選択するなら、すべてのデータベースバージョンでマスターパスワードを更新する手段を持っている必要があります。マスターパスワードが漏洩したときにそれを即座に知るのは難しいことがあります。他の人がパスワードを発見するリスクを減らすために、定期的にパスワードを変更することを選ぶかもしれません。もしデータベースのコピーの管理が失われたと感じた場合、そのコピーがブルートフォース攻撃によってマスターパスワードを解読される前に、そのデータベース内のすべてのパスワードを変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== パスワードのハッシュ ===&lt;br /&gt;
&lt;br /&gt;
ハッシュは一方向の関数です。つまり、入力を計算せずにそのハッシュを解読することは不可能になるように設計されています (例:MD5、SHA)&lt;br /&gt;
&lt;br /&gt;
パスワードハッシュ関数は、ユーザー入力 (パスワード) を計算せずに解読することが不可能になるように設計されています(例:bcrypt)[[Wikipedia:Key derivation function|鍵導出関数]] (KDF; 例:yescrypt、scrypt、PBKDF2) は、入力 (マスターキーやパスワード) から秘密鍵 (例:AESキー、パスワードハッシュ) を導出するために設計された暗号アルゴリズムです。したがって、KDF はパスワードハッシュ関数としても使用できる複数の用途に対応します。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、Arch Linux はユーザーパスワードをルート専用の読み取り可能な {{ic|/etc/shadow}} ファイルにハッシュ化して保存します。これは、他のユーザーのパラメータが保存される世界に読み取り可能な {{ic|/etc/passwd}} ファイルから分離されています。詳細は [[ユーザーとグループ#ユーザーデータベース]] を参照してください。また、[[#root の制限]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
パスワードは &#039;&#039;&#039;passwd&#039;&#039;&#039; コマンドを使用して設定され、このコマンドはシステムの暗号化関数でパスワードを[[Wikipedia:Key stretching|ストレッチ]]し、その後 {{ic|/etc/shadow}} に保存されます。パスワードは[[Wikipedia:Salt (cryptography)|ソルト]]も施され、[[Wikipedia:Rainbow table|レインボーテーブル]]攻撃に対して防御されます。詳細は[https://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils Linux でパスワードがどのように保存されているか(Shadow ユーティリティを使ったハッシュの理解)]を参照してください。&lt;br /&gt;
&lt;br /&gt;
パスワードハッシュは定義されたフォーマットに従って保存されるため、新たな &#039;&#039;passwd&#039;&#039; コマンドの実行に対してメソッドとパラメータを設定することができます。したがって、{{ic|/etc/shadow}} ファイルに保存された個々のハッシュは、システムでサポートされているハッシュ関数の異種混合になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
フォーマット、ハッシュメソッド、およびパラメータに関する詳細は、{{man|5|crypt}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/login.defs}} ファイルでは、[https://archlinux.org/news/changes-to-default-password-hashing-algorithm-and-umask-settings/ デフォルトのパスワードハッシュメソッド]{{ic|ENCRYPT_METHOD YESCRYPT}} とそのパラメータ {{ic|YESCRYPT_COST_FACTOR}} が設定されます。&lt;br /&gt;
&lt;br /&gt;
例えば、デフォルトの {{ic|YESCRYPT_COST_FACTOR}} パラメータを増加させると、パスワードからハッシュを導き出すために必要な計算時間が対数的に増加します。これは、システムがユーザーのログインを認証する際や、第三者がパスワードの秘密を取得しようとする場合にも適用されます。&lt;br /&gt;
&lt;br /&gt;
これに対して、SHA-512 ハッシュ関数の計算時間は、パラメータにより線形的に影響されます。以前の Arch のデフォルトについては [[SHA パスワードハッシュ]] を参照してください。yescrypt アルゴリズムは内部で SHA-256、HMAC、およびPBKDF2 を使用してパスワードハッシュを計算することに注意してください。主な理由は、これらの広く使用され、テストされた関数の良い特性を組み合わせ、攻撃への耐性を強化することです。例えば、SHA の多用途性が原因で、この関数のハードウェアサポートが提供され、SHA ハッシュの計算性能が著しく向上したため、パスワードハッシュ関数としての使用が次第に時代遅れになりつつあります。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklib を用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_pwquality&#039;&#039; は、[[Wikipedia:Dictionary attack|辞書攻撃]]に対する保護を提供し、システム全体で強制できるパスワードポリシーを設定するのに役立ちます。これは &#039;&#039;pam_cracklib&#039;&#039; をベースにしており、そのオプションとの後方互換性があります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libpwquality}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトでは、&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &#039;&#039;root&#039;&#039; アカウントを使用すると、設定したパスワードポリシーをバイパスするユーザーパスワードを設定できます。これは一時的なパスワードを設定する際に便利です。&lt;br /&gt;
* 現在のパスワードに関するセキュリティガイドライン(例:NISTなど)では、特別な文字を強制することは推奨されていません。なぜなら、それらはしばしば予測可能な変更を引き起こすだけだからです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
例えば、以下のポリシーを強制したい場合:&lt;br /&gt;
&lt;br /&gt;
* エラーが発生した場合にパスワードを2回入力する (retry オプション)&lt;br /&gt;
* 最小長10文字 (minlen オプション)&lt;br /&gt;
* 新しいパスワードを入力する際、古いパスワードとは少なくとも6文字異なること (difok オプション)&lt;br /&gt;
* 最低1桁の数字 (dcredit オプション)&lt;br /&gt;
* 最低1つの大文字 (ucredit オプション)&lt;br /&gt;
* 最低1つの小文字 (lcredit オプション)&lt;br /&gt;
* 最低1つのその他の文字 (ocredit オプション)&lt;br /&gt;
* &amp;quot;myservice&amp;quot; および &amp;quot;mydomain&amp;quot; という単語を含めない&lt;br /&gt;
* root にもこのポリシーを強制する&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}}ファイルを以下のように編集します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_pwquality.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 [badwords=myservice mydomain] enforce_for_root&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|password required pam_unix.so use_authtok}} は、&#039;&#039;pam_unix&#039;&#039; モジュールに対してパスワードの入力を促さず、代わりに &#039;&#039;pam_pwquality&#039;&#039; で提供されたものを使用するように指示します。&lt;br /&gt;
&lt;br /&gt;
詳細については、{{man|8|pam_pwquality}} および {{man|8|pam_unix}} のマニュアルページを参照してください。&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
=== マイクロコード ===&lt;br /&gt;
&lt;br /&gt;
CPU のマイクロコードに対する重要なセキュリティ更新プログラムをインストールする方法については、[[マイクロコード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアの脆弱性 ===&lt;br /&gt;
&lt;br /&gt;
CPU の中には、ハードウェアの脆弱性を含んでいるものがあります。これらの脆弱性の一覧と、特定の使用シナリオに合わせてこれらの脆弱性を緩和するためにカーネルをカスタマイズするのに役立つ緩和策の選択ガイドについては、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/ kernel documentation on hardware vulnerabilities] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既知の脆弱性の影響を受けているかどうかを確認するには、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/devices/system/cpu/vulnerabilities/&lt;br /&gt;
&lt;br /&gt;
ほとんどの場合、カーネルとマイクロコードを更新することで、脆弱性を軽減することができます。&lt;br /&gt;
&lt;br /&gt;
==== 同時マルチスレッディング (ハイパースレッディング) ====&lt;br /&gt;
&lt;br /&gt;
[https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 同時マルチスレッディング]] (SMT) は、インテル CPU のハイパースレッディングとも呼ばれ、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html L1 Terminal Fault] および [https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html Microarchitectural Data Sampling] 脆弱性の原因となる可能性のあるハードウェア機能です。Linux カーネルとマイクロコードのアップデートには、既知の脆弱性に対する緩和策が含まれていますが、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html#virtualization-with-untrusted-guests 信頼できない仮想化ゲストが存在する場合、特定の CPU で SMT を無効にしたほうが良い場合があります。]&lt;br /&gt;
&lt;br /&gt;
SMT は、システムのファームウェアで無効にできることがよくあります。詳細については、マザーボードまたはシステムのドキュメントを参照してください。また、以下の [[カーネルパラメータ]] を追加することで、カーネルで SMT を無効にすることができます。&lt;br /&gt;
&lt;br /&gt;
 l1tf=full,force mds=full,nosmt mitigations=auto,nosmt nosmt=force&lt;br /&gt;
&lt;br /&gt;
== メモリ ==&lt;br /&gt;
&lt;br /&gt;
===ハード化された malloc ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/GrapheneOS/hardened_malloc hardened_malloc] ({{AUR|hardened_malloc}}, {{AUR|hardened-malloc-git}}) は [https://ja.wikipedia.org/wiki/GNU_C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA glibc] の malloc() をハード化した代替品です。元々は Android の [[Wikipedia:Bionic (software)|Bionic]] と [https://ja.wikipedia.org/wiki/Musl musl] に組み込むために開発されましたが、 x86_64 アーキテクチャの標準 Linux ディストリビューションのサポートにも組み込みました。&lt;br /&gt;
&lt;br /&gt;
hardened_malloc はまだ glibc に統合されていませんが(支援とプルリクエストは歓迎します)、LD_PRELOAD と一緒に簡単に使用することができます。これまでのテストでは、 {{ic|/etc/ld.so.preload}} でグローバルに有効にすると、 一握りのアプリケーションにしか問題を起こしません。例えば、{{ic|getrandom}} が標準のホワイトリストにないため、{{ic|seccomp}} 環境フラグが無効でないと {{ic|man}} は正常に動作しませんが、これはシステムコールを追加して再構築すれば簡単に修正可能です。hardened_malloc は性能上のコストがあるので、どの実装を使うかは攻撃対象領域と性能上の必要性に基づいてケースバイケースで決めるとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
スタンドアロンで試すには、hardened-malloc-preload ラッパー スクリプトを使用するか、適切なプリロード値でアプリケーションを手動で開始します。&lt;br /&gt;
&lt;br /&gt;
 LD_PRELOAD=&amp;quot;/usr/lib/libhardened_malloc.so&amp;quot; /usr/bin/firefox&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] の正しい使い方は、その wiki ページにあります。また、hardened_malloc の設定可能なビルドオプションは、githubレポで見つけることができます。&lt;br /&gt;
&lt;br /&gt;
== ストレージ ==&lt;br /&gt;
&lt;br /&gt;
===ディスク暗号化===&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に [[#パスワード|強力なパスフレーズ]] を使用したフルディスク暗号化は、物理的な回復からデータを守る唯一の方法です。これにより、コンピュータの電源がオフになっている場合や、対象のディスクがアンマウントされている場合にデータの機密性が保たれます。&lt;br /&gt;
&lt;br /&gt;
ただし、コンピュータの電源が入っており、ドライブがマウントされている場合、そのデータは暗号化されていないドライブと同様に脆弱です。そのため、データパーティションがもう必要なくなったら、できるだけ早くアンマウントすることが最良の実践です。&lt;br /&gt;
&lt;br /&gt;
また、[[Trusted Platform Module#LUKS による保存データの暗号化|TPMにキーを保存してドライブを暗号化]] することもできますが、過去に [https://tpm.fail 脆弱性] があり、キーは [https://pulsesecurity.co.nz/articles/TPM-sniffing TPMバススニッフィング攻撃] によって抽出される可能性があります。&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt]] のような特定のプログラムは、ユーザーが仮想ボリュームとしてループファイルを暗号化できるようにします。これは、システムの特定の部分だけを安全に保護する必要がある場合、フルディスク暗号化の合理的な代替手段です。&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]] の記事で比較されているブロックデバイスやファイルシステムベースの暗号化方法は、物理メディア上のデータ保護には有効ですが、リモートシステム(例えば [[保存データ暗号化#クラウドストレージの最適化|クラウドストレージ]])に保存されたデータを保護するためには使用できません。そのため、個々のファイル暗号化が役立つ場合もあります。&lt;br /&gt;
&lt;br /&gt;
ファイルを暗号化するためのいくつかの方法は次の通りです:&lt;br /&gt;
&lt;br /&gt;
* 一部の [[アーカイブと圧縮|アーカイブおよび圧縮]] ツールは基本的な暗号化も提供します。例としては、[[7-Zip]] ({{ic|-p}} フラグ)、{{Pkg|zip}} ({{ic|-e}}フラグ) があります。これらのツールはクロスプラットフォームの互換性のためにカスタムアルゴリズムを使用している場合があるため、特別な注意を払って使用するべきです。[https://math.ucr.edu/~mike/zipattacks.pdf]&lt;br /&gt;
* [[GnuPG]] を使用してファイルを [[GnuPG#Encrypt and decrypt|暗号化]] できます。&lt;br /&gt;
* {{Pkg|age}} は、シンプルで使いやすいファイル暗号化ツールです。複数の受信者をサポートしており、SSH キーを使用した暗号化もサポートしているため、安全なファイル共有に役立ちます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
====マウントオプション====&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、ファイルシステムは可能な限り制限の厳しいマウントオプションを使用してマウントするべきです(機能を失わない範囲で)&lt;br /&gt;
&lt;br /&gt;
関連するマウントオプションは以下の通りです:&lt;br /&gt;
&lt;br /&gt;
* {{ic|nodev}}: ファイルシステム上のキャラクタデバイスやブロックデバイスを解釈しない。&lt;br /&gt;
* {{ic|nosuid}}: set-user-identifier や set-group-identifier ビットを無効にする。&lt;br /&gt;
* {{ic|noexec}}: マウントされたファイルシステム上のバイナリを直接実行できないようにする。&lt;br /&gt;
** {{ic|/home}} に {{ic|noexec}} を設定すると、実行可能なスクリプトが禁止され、[[Wine]]、[[Steam]]、PyCharm、[[.NET]] などが動作しなくなります。&lt;br /&gt;
*** Wine は Windows バイナリの実行に {{ic|exec}} フラグを必要としません。ただし、Wine 自体を {{ic|/home}} にインストールする場合は必要です。&lt;br /&gt;
*** [[Steam]] を動作させるには、{{ic|/home/user/.local/share/Steam}} を [[fstab]] で {{ic|exec}} としてマウントできます。以下の設定を追加してください: {{bc|/home/user/.local/share/Steam /home/user/.local/share/Steam none defaults,bind,user,exec,nofail 0 0}} &lt;br /&gt;
** 一部のパッケージ(例:{{Pkg|nvidia-dkms}} のビルド)では、{{ic|/var}} に {{ic|exec}} が必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
データ用のファイルシステムは、常に {{ic|nodev}}、{{ic|nosuid}}、{{ic|noexec}} を指定してマウントするべきです。&lt;br /&gt;
&lt;br /&gt;
マウントを検討すべきファイルシステム:&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var}}&lt;br /&gt;
* {{ic|/home}}&lt;br /&gt;
* {{ic|/dev/shm}}&lt;br /&gt;
* {{ic|/tmp}}&lt;br /&gt;
* {{ic|/boot}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]] を使用する場合、ESP および XBOOTLDR パーティションは [https://github.com/systemd/systemd-stable/commit/49804cfb71d3a79f433096e4cfb5616980171336 常に {{ic|noexec,nosuid,nodev}} で強化] されます。}}&lt;br /&gt;
&lt;br /&gt;
==== スナップショット ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムのスナップショットを利用する場合(例えば [[Btrfs]]、[[LVM]]、[[ZFS]] など)、スナップショットがユーザーが削除したと期待している機密情報を保持する可能性があることを理解することが重要です。特に、[[Snapper]] のような自動スナップショットツールを設定している場合、定期的またはシステムイベントに応じてスナップショットが作成されるため、この問題が発生しやすくなります。&lt;br /&gt;
&lt;br /&gt;
以下は、{{ic|/home/}} 内の機密情報がスナップショットに残存する例です:&lt;br /&gt;
&lt;br /&gt;
* 削除されたファイルやディレクトリ: ファイルシステム上から削除されたとしても、古いスナップショット内には残存している可能性があります。これは通常想定される動作ですが、{{ic|.local/share/Trash/}}、{{ic|.history}} などのファイルやディレクトリを保持する必要があるかどうかを検討すべきです。&lt;br /&gt;
* 一時ファイルやキャッシュ: アプリケーションによって生成された一時ファイルやキャッシュデータもスナップショットに含まれる可能性があります。例えば、暗号化されたディレクトリ内のファイルを開くと、サムネイル({{ic|.cache/thumbnails}})や作業用のコピーが作成され、それらがスナップショットに含まれる可能性があります。同様に、ブラウザの履歴({{ic|.mozilla/}}、{{ic|.config/chromium/}} など)も、削除される前にスナップショットに記録されている場合があります。&lt;br /&gt;
&lt;br /&gt;
対応可能であれば、これらのディレクトリをスナップショットの対象から完全に除外することを検討してください。例えば、[[Btrfs]] を使用している場合、{{ic|.cache/}}、{{ic|.config/}}、{{ic|.local/}}、{{ic|.var/}} など、用途に応じたディレクトリをサブボリュームとして作成することで、スナップショットの影響を受けにくくできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|.local/share/Trash}} を別のサブボリュームに移動すると、場合によっては [[GNOME/Files]] などでゴミ箱の機能が正常に動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
===ファイルシステムのパーミッション===&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[パーミッション]] では、ほとんどのファイルが読み取り可能になっていますが、これを変更することで、{{ic|http}} ユーザーや {{ic|nobody}} ユーザーなどの非 root アカウントに侵入した攻撃者から貴重な情報を隠すことができます。[[chmod]] を使用して、グループやその他のユーザーからすべてのアクセス権を削除できます。&lt;br /&gt;
&lt;br /&gt;
 # chmod go-r &#039;&#039;path_to_hide&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|この設定を広範囲に適用しないでください。1つの設定ファイルごとに適用し、非表示にする価値があるか、プログラムの動作に影響しないかを確認してください。グループが必要な場合は、{{ic|g}} をコマンドから削除するか、既に実行してしまった場合は {{ic|chmod g+r path}} で再度許可を追加する必要があるかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
考慮すべきパスの例:&lt;br /&gt;
&lt;br /&gt;
* {{ic|/boot}}: [[パーティショニング#/boot|ブートディレクトリ]]、[[vmlinuz]] や [[initramfs]] image、または [[ユニファイドカーネルイメージ]] が含まれる場合があります。なお、[[systemd# GPT パーティションの自動マウント]] を使用する場合、デフォルトで安全なパーミッションが適用されます。&lt;br /&gt;
* {{ic|/etc/nftables.conf}}: [[nftables]] の設定ファイル({{Pkg|nftables}} および {{Pkg|iptables-nft}} に適用)&lt;br /&gt;
* {{ic|/etc/iptables}}: レガシーな [[iptables]] の設定ファイル({{Pkg|iptables}} に適用)&lt;br /&gt;
&lt;br /&gt;
また、新しく作成されるファイルのセキュリティを向上させるために、デフォルトの [[umask]] 値 {{ic|0022}} を変更することも可能です。[https://apps.nsa.gov/iaarchive/library/ia-guidance/security-configuration/operating-systems/guide-to-the-secure-configuration-of-red-hat-enterprise.cfm NSA RHEL5 Security Guide] では最大限のセキュリティを確保するために、{{ic|0077}} を推奨しており、これにより所有者以外のユーザーが新しいファイルを読み取れなくなります。変更方法については [[Umask#マスクの値を設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
さらに、[[sudo]] を使用する場合、[[Sudo#Permissive umask|デフォルトの root umask]] を適用するよう設定することを検討してください。&lt;br /&gt;
&lt;br /&gt;
=== SUID ファイルと SGID ファイル ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Setuid|Setuid]] ビットや Setgid ビットが設定されたファイルには注意しましょう。このようなファイルの例としては、以下があります。&lt;br /&gt;
&lt;br /&gt;
* [[PAM|unix_chkpwd]] &lt;br /&gt;
* chage, expiry, gpasswd, groupmems, [[passwd]], sg, ({{Pkg|shadow}})&lt;br /&gt;
* [[FUSE|fusermount3]], fusermount&lt;br /&gt;
* pkexec&lt;br /&gt;
* [[OpenSSH|ssh-keysign]]&lt;br /&gt;
* chfn, chsh, mount, newgrp, umount, wall, write ({{Pkg|util-linux}})&lt;br /&gt;
* [[sudo]], {{Pkg|sudo-rs}}, [[doas]], [[su]], su-rs, [[Kerberos|ksu]]&lt;br /&gt;
* [[firejail]]&lt;br /&gt;
* [[Dbus|dbus-daemon-launch-helper]]&lt;br /&gt;
* [[Chromium|chromium-sandbox]]&lt;br /&gt;
* [[Xorg|Xorg.wrap]]&lt;br /&gt;
&lt;br /&gt;
このような実行ファイルの主なリスクとして、特権昇格の脆弱性があります。例えば [[Wikipedia:Setuid#Security impact]] を参照してください。[https://www.cvedetails.com/vulnerability-list/vendor_id-16224/product_id-36412/Calibre-ebook-Calibre.html][https://www.cvedetails.com/product/32625/Sudo-Project-Sudo.html?vendor_id=15714][https://www.cvedetails.com/vulnerability-list/vendor_id-16191/Firejail-Project.html]&lt;br /&gt;
&lt;br /&gt;
SUID ビットが設定されているが root によって所有されていないファイル、または SGID ビットが設定されているファイルは、&#039;&#039;典型的には&#039;&#039;潜在的なリスクがより小さいですが、理論上、そのようなファイルに脆弱性が存在している場合は、依然として損害を与える可能性があります。通常、代わりに[[ケイパビリティ]]を割り当てることによって、Setuid や Setgid の使用を回避することが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|SUID/SGID 実行ファイルを含むパッケージを最新に保って、脆弱性からシステムを守ることが肝心です。}}&lt;br /&gt;
&lt;br /&gt;
SUID ビットか SGID ビットを持つファイルを {{ic|/usr/bin}} から探すには:&lt;br /&gt;
&lt;br /&gt;
 $ find /usr/bin -perm &amp;quot;/u=s,g=s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== ユーザー設定 ==&lt;br /&gt;
&lt;br /&gt;
=== root アカウントを日常的に使用しない ===&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、root ユーザーを日常的に使用しないようにしてください。システムを使用する各人に非特権ユーザーアカウントを作成するか。一時的な特権アクセスには、必要に応じて [[sudo]] を使用する。&lt;br /&gt;
&lt;br /&gt;
=== ログイン失敗後の遅延時間の設定 ===&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|/etc/pam.d/system-login}} に追加し、ログインに失敗した際に最低4秒の遅延を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|2=&lt;br /&gt;
auth optional pam_faildelay.so delay=4000000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|4000000}} は遅延させる時間をマイクロ秒単位で指定します。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pambase}} 20200721.1-2 の時点では 、デフォルトで {{ic|pam_faillock.so}} が有効になっており、15分間に3回ログインに失敗すると10分間ユーザをロックアウトします ({{Bug|67644}} を参照してください) このロックアウトはパスワード認証 (例:ログインと &#039;&#039;sudo&#039;&#039;) にのみ適用され、SSH 経由の公開鍵認証はそのまま利用可能です。 完全なサービス拒否を防ぐために、このロックアウトは root では無効になっています。&lt;br /&gt;
&lt;br /&gt;
ユーザーをロック解除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 $ faillock --reset --user &#039;&#039;username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ロック機構は {{ic|/run/faillock/}} にあるユーザーごとのファイルです。ディレクトリの所有者は root ですが、ファイルの所有者はユーザーなので、 {{ic|faillock}} コマンドはファイルを空にするだけで、root は必要ありません。&lt;br /&gt;
&lt;br /&gt;
モジュール {{ic|pam_faillock.so}} は、ファイル {{ic|1=/etc/security/faillock.conf}} で設定することが可能です。ロックアウトのパラメータです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|unlock_time}} - ロックアウト時間 (秒単位、デフォルトは10分)&lt;br /&gt;
* {{ic|fail_interval}} - ロックアウトに失敗するとロックアウトされる時間 (秒単位、デフォルトは15分)&lt;br /&gt;
* {{ic|deny}} - ロックアウトするまでに何回ログインに失敗するか (デフォルトは 3)&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=deny = 0}} はロックアウトを無効化します}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、すべてのユーザーロックは再起動後に失われます。攻撃者がマシンをリブートできるのであれば、ロックは持続させた方が安全です。ロックを持続させるには、{{ic|1=/etc/security/faillock.conf}} の {{ic|dir}} パラメータを {{ic|/var/lib/faillock}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるために再起動する必要はありません。root アカウントのロックアウトを有効にする、集中ログイン (LDAP など) を無効にするなど、さらなる設定オプションについては {{man|5|faillock.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。{{ic|prlimit}} コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
=== Wayland を使用する ===&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] よりも [[Wayland]] を使用することをお勧めします。Xorg の設計は現代のセキュリティ慣行より古く、多くの人が [https://security.stackexchange.com/questions/4641/why-are-people-saying-that-the-x-window-system-is-not-secure/4646#4646 は安全でないと考えています] 例えば、Xorg のアプリケーションは非アクティブな状態でもキーストロークを記録することがあります。&lt;br /&gt;
&lt;br /&gt;
もし Xorg を実行しなければならないなら、[[Xorg#Rootless_Xorg|root での実行を避ける]]ことが推奨されます。Wayland 内では、XWayland 互換レイヤーは自動的に root レス Xorg を使用します。&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== su の代わりに sudo を使う ===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sudo を使ってファイルを編集する ====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
=== root ログインの制限 ===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。[[sudo]] を使える状態のまま root を無効化したい場合、{{ic|passwd -l root}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== 特定のユーザーだけに許可を与える ====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ssh ログインを拒否する ====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==== access.conf で許容されるログインの組み合わせを指定する ====&lt;br /&gt;
&lt;br /&gt;
誰かが [[PAM]] でログインしようとすると、 {{ic|/etc/security/access.conf}} がそのログインプロパティに一致する最初の組み合わせをチェックします。そして、その組み合わせのルールに基づいて、試行が失敗するか成功するかが決まります。&lt;br /&gt;
&lt;br /&gt;
 +:root:LOCAL&lt;br /&gt;
 -:root:ALL&lt;br /&gt;
&lt;br /&gt;
特定のグループやユーザーに対してルールを設定することができます。この例では、ユーザー archie は、wheel および adm グループに属するすべてのユーザーと同様に、ローカルでのログインを許可されています。それ以外のログインは拒否されます。&lt;br /&gt;
&lt;br /&gt;
 +:archie:LOCAL&lt;br /&gt;
 +:(wheel):LOCAL&lt;br /&gt;
 +:(adm):LOCAL&lt;br /&gt;
 -:ALL:ALL&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|5|access.conf}} で確認してください。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
== カーネルの堅牢化 ==&lt;br /&gt;
&lt;br /&gt;
=== カーネルの自己防衛機能/脆弱性攻撃対策 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、[https://github.com/anthraxx/linux-hardened 基本的なカーネル堅牢化パッチセット]と、{{pkg|linux}} パッケージよりもセキュリティに重点を置いたコンパイル時設定オプションを使用します。カスタムビルドでは、セキュリティ寄りのデフォルトとは異なる、セキュリティと性能の妥協点を選択することができます。&lt;br /&gt;
&lt;br /&gt;
しかし、このカーネルを使うといくつかのパッケージが動かなくなることに注意する必要があります。例えば&lt;br /&gt;
&lt;br /&gt;
* {{AUR|skypeforlinux-preview-bin}}&lt;br /&gt;
* {{AUR|skypeforlinux-stable-bin}}&lt;br /&gt;
* {{pkg|throttled}}&lt;br /&gt;
&lt;br /&gt;
[[NVIDIA]] などのアウトオブツリードライバを使用している場合、その [[DKMS]] パッケージに切り替える必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
==== ユーザー空間 ASLR の比較 ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、アドレス空間配置ランダム化の改善された実装をユーザ空間のプロセスに対して提供します。{{pkg|paxtest}} コマンドを使うことで、提供されるエントロピーの推定値を得ることができます:&lt;br /&gt;
&lt;br /&gt;
===== 64 ビットプロセス =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened 5.4.21.a-1-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 32 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 40 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 40 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 32 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 32 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 32 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 32 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 34 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 34 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 32 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 32 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux 5.5.5-arch1-1|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 20 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 29 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 29 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-lts 4.19.101-1-lts|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 28 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 28 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 32 ビットプロセス (x86_64 カーネル上) =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 16 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 22 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 27 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 18 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 16 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 16 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 18 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 16 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 18 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 18 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux|&lt;br /&gt;
Anonymous mapping randomization test     : 8 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 13 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 13 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 8 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 8 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 8 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 8 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 13 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: No randomization&lt;br /&gt;
Randomization under memory exhaustion @0 : No randomization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== proc ファイルシステム内のカーネルポインタへのアクセスを制限する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を 1 に設定すると、{{ic|CAP_SYSLOG}} を持たない通常ユーザから {{ic|/proc/kallsyms}} 内のカーネルシンボルのアドレスが秘匿され、カーネルのエクスプロイトで動的にアドレス/シンボルを解決することが困難になります。これは、事前にコンパイルされた Arch Linux カーネルではあまり意味がありません。周到な攻撃者はカーネルパッケージをダウンロードして、そこから手動でシンボルを取得することができるからです。しかしながら、自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし、一部の {{Pkg|perf}} コマンドの機能が、root 以外のユーザによって使用された場合に破壊されます (しかし、いずれにせよ多くの {{Pkg|perf}} コマンドは root アクセスを必要とします)。詳細は {{Bug|34323}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を 2 に設定すると、{{ic|/proc/kallsyms}} 内のカーネルシンボルのアドレスが権限に依らず隠されます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kptr-restrict.conf|2=&lt;br /&gt;
kernel.kptr_restrict = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} はデフォルトで {{ic|0}} ではなく {{ic|1=kptr_restrict=2}} を設定します。}}&lt;br /&gt;
&lt;br /&gt;
=== BPF の堅牢化 ===&lt;br /&gt;
&lt;br /&gt;
BPF は、実行時にカーネル内のバイトコードを動的にロードして実行するために使用されるシステムです。ネットワーク (XDP, tc など)、トレース (kprobes, uprobes, tracepoints など)、セキュリティ (seccomp など) など、多くの Linux カーネルサブシステムで使用されています。また、高度なネットワークセキュリティ、パフォーマンスプロファイリング、ダイナミックトレースにも有効です。&lt;br /&gt;
&lt;br /&gt;
BPF はもともと [[Wikipedia:ja:Berkeley Packet Filter|Berkeley Packet Filter]] の頭文字をとったもので、オリジナルの古典的な BPF は BSD 用のパケットキャプチャツールに使われていたためです。これは最終的に拡張 BPF (eBPF) に発展し、その後まもなくただの BPF (頭字語ではありません) に改名されました。BPFはパケットフィルタリングツールの実装に使われることがありますが、 iptables や netfilter のようなパケットフィルタリングツールと混同しないでください。&lt;br /&gt;
&lt;br /&gt;
BPF のコードは解釈されるか、[[Wikipedia:ja:実行時コンパイラ|Just-In-Time (JIT) コンパイラ]]を使ってコンパイルされるかのどちらかです。Arch のカーネルは {{ic|CONFIG_BPF_JIT_ALWAYS_ON}} でビルドされており、BPF インタープリタを無効にして全ての BPF を JIT コンパイラでコンパイルするよう強制しています。これにより、攻撃者が BPF を使って SPECTRE 型の脆弱性を悪用した特権昇格攻撃をすることが難しくなります。詳しくは、[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=290af86629b25ffd1ed6232c4e9107da031705cb CONFIG_BPF_JIT_ALWAYS_ON を導入したカーネルパッチ]を参照してください。&lt;br /&gt;
&lt;br /&gt;
カーネルは JIT コンパイルされた BPF に対して、パフォーマンスと多くの BPF プログラムをトレース・デバッグする能力を犠牲にして、ある種の JIT スプレー攻撃を軽減するための堅牢化機能を備えています。この機能は、{{ic|net.core.bpf_jit_harden}} を {{ic|1}} (非特権コードの堅牢化を有効化する) か {{ic|2}} (全てのコードの堅牢化を有効化する) に設定することで有効化できます。&lt;br /&gt;
&lt;br /&gt;
詳しくは、[https://docs.kernel.org/admin-guide/sysctl/net.html カーネルドキュメント] の {{ic|net.core.bpf_*}} 設定を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{Pkg|linux-hardened}} では、デフォルトで {{ic|1=net.core.bpf_jit_harden=2}} が設定されており、{{ic|0}} ではありません。&lt;br /&gt;
* デフォルトでは、BPF プログラムは非特権ユーザでも実行可能です。この挙動を変更するには {{ic|1=kernel.unprivileged_bpf_disabled=1}} を設定してください [https://access.redhat.com/security/cve/cve-2021-33624]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ptrace スコープ ===&lt;br /&gt;
&lt;br /&gt;
{{man|2|ptrace}} システムコールは、あるプロセス (&amp;quot;tracer&amp;quot;) が他のプロセス (&amp;quot;tracee&amp;quot;) の実行を監視、制御し、tracee のメモリとレジスタを検査、変更するための手段を提供します。通常、{{ic|ptrace}} は &#039;&#039;gdb&#039;&#039; や &#039;&#039;strace&#039;&#039;、&#039;&#039;perf&#039;&#039;、&#039;&#039;reptyr&#039;&#039; などのデバッグツールによって使用されます。しかし、他のプロセスからデータを読んだり、他のプロセスの制御を奪ったりする手段を悪意のあるプロセスにも提供してしまいます。&lt;br /&gt;
&lt;br /&gt;
Arch では、{{ic|kernel.yama.ptrace_scope}} [[カーネルパラメータ]]を提供する [https://docs.kernel.org/admin-guide/LSM/Yama.html Yama LSM] がデフォルトで有効化されています。このパラメータはデフォルトで {{ic|1}} (制限) に設定されており、{{ic|CAP_SYS_PTRACE}} [[ケイパビリティ]]も特権も持たない tracer が制限されたスコープ外で {{ic|ptrace}} コールを実行できないようにしています。これは、古典的なパーミッションと比べてセキュリティ上大きな改善です。このモジュールが無いと、同じユーザとして実行されているプロセスを隔てるものがなくなってしまいます ({{man|7|pid_namespaces}} などの他のセキュリティレイヤーがない場合)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトでは、[[sudo]] を使うなどして、{{ic|ptrace}} を必要とするツールを特権プロセスとして実行することができます。}}&lt;br /&gt;
&lt;br /&gt;
デバッグツールを使う必要がない場合は、システムを堅牢化するために {{ic|kernel.yama.ptrace_scope}} を {{ic|2}} (管理者限定) や {{ic|3}} ({{ic|ptrace}} を禁止) に設定することを検討してください。&lt;br /&gt;
&lt;br /&gt;
=== hidepid ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* これは、サンドボックスと [[Xorg]] 内で実行するアプリケーションなど、特定のアプリケーションで問題を発生させる場合があります (回避策を見てください)。&lt;br /&gt;
* {{Pkg|systemd}} &amp;gt; 237.64-1 を使用している場合、これは [[D-Bus]]、[[Polkit]]、[[PulseAudio]]、そして [[bluetooth]] で問題を発生させます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
カーネルには、{{ic|proc}} ファイルシステムを {{ic|1=hidepid=}} オプションと {{ic|1=gid=}} オプションを使ってマウントすることで、他のユーザのプロセス (通常、{{ic|/proc}} でアクセス可能) を非特権ユーザから秘匿する機能があります。これらのマウントオプションは https://docs.kernel.org/filesystems/proc.html でドキュメント化されています。&lt;br /&gt;
&lt;br /&gt;
これにより、侵入者が動作中のプロセスの情報 (特権で動作しているデーモンがあるか、他のユーザが機密情報を扱うプログラムを実行しているか、他のユーザがプログラムを実行しているか) を得る作業を複雑化し、ユーザが特定のプログラムを実行しているかどうかを知るのを不可能にし (ただし、そのプログラムがそれ自体の挙動で存在を他者に知られることがないとする)、さらに、貧弱に書かれたプログラムが機密情報をプログラム引数を介して渡したとしてもローカルの盗聴者から守られます。&lt;br /&gt;
&lt;br /&gt;
{{ic|proc}} [[ユーザーとグループ#システムグループ#グループ]] ({{Pkg|filesystem}} パッケージによって提供されています) は、他のユーザのプロセス情報を得ることのできるユーザのホワイトリストとして機能します。ユーザやサービスが自身以外の {{ic|/proc/&amp;lt;pid&amp;gt;}} ディレクトリにアクセスする必要がある場合、そのユーザまたはサービスを[[ユーザーとグループ#グループ管理|proc グループに追加してください]]。&lt;br /&gt;
&lt;br /&gt;
例えば、プロセスの情報を {{ic|proc}} グループに属さない他のユーザから隠すには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
proc	/proc	proc	nosuid,nodev,noexec,hidepid=2,gid=proc	0	0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ユーザのセッションを正しく動作させるために、&#039;&#039;systemd-logind&#039;&#039; を例外として追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/systemd-logind.service.d/hidepid.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
SupplementaryGroups=proc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールのロードを制限する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch カーネルは {{ic|CONFIG_MODULE_SIG_ALL}} が有効で、{{Pkg|linux}} パッケージの一部としてビルドされた全てのカーネルモジュールに署名します。これにより、カーネルは有効なキーで署名されたモジュールだけをロードするように制限できます。実際、これはローカルでコンパイルされた、もしくは {{Pkg|virtualbox-host-modules-arch}} などのパッケージによって提供された、ツリー外のモジュールは全てロードできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
カーネルモジュールの読み込みは {{ic|1=module.sig_enforce=1}} [[カーネルパラメータ]]を設定することで制限することができます。詳細は[https://docs.kernel.org/admin-guide/module-signing.html カーネルドキュメント]で見られます。&lt;br /&gt;
&lt;br /&gt;
=== kexec を無効にする ===&lt;br /&gt;
&lt;br /&gt;
Kexec は、現在実行中のカーネルを置き換えることを可能にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kexec-restrict.conf|2=&lt;br /&gt;
kernel.kexec_load_disabled = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|kexec は {{pkg|linux-hardened}} でデフォルトで無効になっています。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルロックダウンモード ===&lt;br /&gt;
&lt;br /&gt;
Linux 5.4 から、オプションの[https://mjg59.dreamwidth.org/55105.html ロックダウン機能]がカーネルに[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d 追加されました]。これは、UID 0 (root) とカーネルの間の境界を強化することを目的としています。この機能を有効にすると、ハードウェアやカーネルへの低レベルなアクセスに依存している一部のアプリケーションは動作しなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
ロックダウンを使用するには、LSM が初期化され、ロックダウンモードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
[[カーネル#公式サポートカーネル|公式にサポートされているカーネル]]は全て LSM を初期化しますが、ロックダウンモードを強制しません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|有効化されている LSM は {{ic|cat /sys/kernel/security/lsm}} を実行することで確認することができます。}}&lt;br /&gt;
&lt;br /&gt;
ロックダウンには2つの動作モードがあります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|integrity}}: ユーザーランドが実行中のカーネルを変更できるカーネル機能 (kexec、bpf) は無効化されます。&lt;br /&gt;
* {{ic|confidentiality}}: ユーザーランドがカーネルから機密情報を抽出するためのカーネルの機能も無効化されます。&lt;br /&gt;
&lt;br /&gt;
特定の脅威モデルで指示がない限り、{{ic|integrity}} を使用することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
実行時にカーネルのロックダウンを有効にするには、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;mode&#039;&#039; &amp;gt; /sys/kernel/security/lockdown&lt;br /&gt;
&lt;br /&gt;
起動時にカーネルのロックダウンを有効にするには、{{ic|1=lockdown=&#039;&#039;mode&#039;&#039;}} [[カーネルパラメータ]]を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルロックダウンを実行時に無効化することはできません。&lt;br /&gt;
* カーネルロックダウンは、[[ハイバネート]]を無効化します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{man|7|kernel_lockdown}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Linux Kernel Runtime Guard (LKRG) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.openwall.com/lkrg/ LKRG] ({{AUR|lkrg-dkms}}) は、カーネルの整合性チェックとエクスプロイト行為の検出を行うカーネルモジュールです。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
こちらも参照 [[Wikipedia:ja:サンドボックス (セキュリティ)]]&lt;br /&gt;
&lt;br /&gt;
{{Note|ユーザー名前空間の設定項目 {{ic|CONFIG_USER_NS}} は、現在 {{Pkg|linux}}、{{Pkg|linux-lts}}、{{Pkg|linux-zen}}、および {{Pkg|linux-hardened}} で有効になっています。これが無効だと、一部のアプリケーションで特定のサンドボックス機能が利用できなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|非特権ユーザー名前空間の使用 ({{ic|CONFIG_USER_NS_UNPRIVILEGED}}) は、{{Pkg|linux}}、{{Pkg|linux-lts}}、{{Pkg|linux-zen}} でデフォルトで有効になっています。これにより、ローカル特権昇格の攻撃対象が大幅に拡大します([https://gitlab.com/apparmor/apparmor/-/wikis/unprivileged_userns_restriction AppArmorのWiki] および {{Bug|36969}} を参照。}}&lt;br /&gt;
&lt;br /&gt;
これを軽減するためには、次のいずれかを行ってください:&lt;br /&gt;
&lt;br /&gt;
* 安全なデフォルトを持つ {{Pkg|linux-hardened}} カーネルを使用する、または&lt;br /&gt;
* {{ic|kernel.unprivileged_userns_clone}} [[sysctl]] を {{ic|0}} に設定する。&lt;br /&gt;
&lt;br /&gt;
これにより、[[Zoom Meetings|Zoom]] や {{pkg|nsjail}} などのアプリケーションが動作しなくなる場合があることに注意してください。また、システムに {{pkg|bubblewrap}} がインストールされている場合は、{{pkg|bubblewrap-suid}} に置き換える必要があります。詳細は [[Bubblewrap#インストール]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] は、アプリケーションやサーバーをサンドボックス化するための使いやすいツールです。元々はブラウザやインターネット向けアプリケーションのために作成されましたが、現在では多くのアプリケーションに対応しています。さまざまな機能を備えたサンドボックス環境を構築するために、suid バイナリとしてインストールされ、ブラックリストとホワイトリストに基づいてターゲットアプリケーションのサンドボックス化された実行環境を構築します。&lt;br /&gt;
&lt;br /&gt;
=== bubblewrap ===&lt;br /&gt;
&lt;br /&gt;
[[bubblewrap]] は、[[Flatpak]] などの非特権コンテナツール向けに開発されたサンドボックスアプリケーションで、Firejail よりもリソース消費と複雑さが大幅に小さいです。ファイルパスのホワイトリスト機能は欠けていますが、bubblewrap はバインドマウントのほか、ユーザー/IPC/PID/ ネットワーク /cgroup 名前空間の作成をサポートしており、シンプルなものから複雑なサンドボックスまで対応可能です。&lt;br /&gt;
&lt;br /&gt;
[[Bubblejail]] サンドボックスは [[bubblewrap]] を基にしており、リソース指向の権限モデルと、権限を調整するためのグラフィカルインターフェースを提供します。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] してサンドボックス化されたプロセス環境を作成できます。しかし、これは他のサンドボックス技術に比べて非常に制限されています。そのサンドボックス化の範囲はファイルパスの隔離に限られています。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
[[Linux Containers]] は、他のオプション([[#完全な仮想化オプション|完全な仮想化オプション]] を除く) よりも多くの隔離が必要な場合に適した選択肢です。LXC は、既存のカーネルの上で擬似 chroot 内で実行され、独自の仮想ハードウェアを持っています。&lt;br /&gt;
&lt;br /&gt;
=== 完全な仮想化オプション ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]]、[[KVM]]、[[Xen]]、または [https://www.qubes-os.org/ Qubes OS](Xen ベース)などの完全仮想化オプションを使用することで、リスクの高いアプリケーションを実行したり、危険なウェブサイトを閲覧したりする場合に、隔離とセキュリティを強化することができます。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:Netfilter|Netfilter]] の [[iptables]] および [[nftables]] を使用できますが、これらのサービスはデフォルトで [[有効化]] されていません。システム上で実行されているサービスを保護するために、何らかの形のファイアウォールを設定することを強く推奨します。多くのリソース(ArchWiki など)では、どのサービスを保護するべきかが明示的に記載されていないため、ファイアウォールを有効にすることは良い予防措置となります。&lt;br /&gt;
&lt;br /&gt;
* 一般的な情報については [[iptables]] および [[nftables]] を参照してください。&lt;br /&gt;
* iptables ファイアウォールの設定方法については [[シンプルなステートフルファイアウォール]] を参照してください。&lt;br /&gt;
* netfilter の設定方法については [[ファイアウォール]] を参照してください。&lt;br /&gt;
* Bluetack などの IP アドレスリストをブロックするには [[Ipset]] を参照してください。&lt;br /&gt;
* {{Pkg|opensnitch}} は、アプリケーション、ポート、ホストなどによる設定可能なルールをサポートする、構成可能なインバウンドおよびアウトバウンドファイアウォールです。&lt;br /&gt;
&lt;br /&gt;
==== ポートを開く ====&lt;br /&gt;
&lt;br /&gt;
一部のサービスは、開かれたネットワークポートでインバウンドトラフィックを待ち受けます。これらのサービスは、必要最低限のアドレスとインターフェースにのみバインドすることが重要です。リモート攻撃者が [https://samy.pl/slipstream/ ネットワークプロトコルの欠陥を悪用して公開されたサービスにアクセスする] 可能性があります。これは、[https://nvd.nist.gov/vuln/detail/CVE-2019-13450 localhost にバインドされたプロセス] にも発生することがあります。&lt;br /&gt;
&lt;br /&gt;
一般的に、サービスがローカルシステムのみでアクセス可能であれば、非ループバックアドレス(例えば {{ic|0.0.0.0/0}})ではなく、Unix ドメインソケット({{man|7|unix}})や {{ic|localhost}} のようなループバックアドレスにバインドするべきです。&lt;br /&gt;
&lt;br /&gt;
サービスがネットワーク越しに他のシステムからアクセス可能である必要がある場合、厳格な [[ファイアウォール]] ルールでアクセスを制御し、可能な限り認証、認可、暗号化を構成することが重要です。&lt;br /&gt;
&lt;br /&gt;
現在のすべてのオープンポートをリストするには、{{ic|ss -l}} を使用できます。すべてのリスニング中のプロセスとその数値的な TCP および UDP ポート番号を表示するには:&lt;br /&gt;
&lt;br /&gt;
 # ss -lpntu&lt;br /&gt;
&lt;br /&gt;
その他のオプションについては、{{man|8|ss}}を参照してください。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
二段階認証によって認証を強化することができます。[[Google Authenticator]] はワンタイムパスコード (OTP) を使用する二段階認証方式を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシはアプリケーションとネットワークの間に挟まる追加レイヤーとして使われ、信頼できないソースからのデータをサニタイズします。少ない権限でプロキシを動作させることで、エンドユーザー権限で複雑なアプリケーションを実行するよりも攻撃対象を小さくすることができます。&lt;br /&gt;
&lt;br /&gt;
例えば {{Pkg|glibc}} の中に実装されている DNS リゾルバを考えてみてください。(root で実行することもある) アプリケーションにリンクされている DNS リゾルバにバグが存在した場合、リモートコード実行につながる危険があります。[[dnsmasq]] などの DNS キャッシュサーバーをインストールしてプロキシとして使うことで問題を防ぐことが可能です [https://googleonlinesecurity.blogspot.it/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html]。&lt;br /&gt;
&lt;br /&gt;
=== SSL 証明書の管理 ===&lt;br /&gt;
&lt;br /&gt;
サーバーサイドの SSL 証明書の管理については [[OpenSSL]] や [[Network Security Services]] (NSS) を参照してください。また、関連する [[Let’s Encrypt]] プロジェクトも見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのインターネット SSL 証明書のトラストチェーンは {{Pkg|ca-certificates}} パッケージによって提供されています。Arch はデフォルトで信頼しても問題ないとされる証明書を提供しているソース (例: {{AUR|ca-certificates-cacert}}, {{Pkg|ca-certificates-mozilla}}) に依存しています。&lt;br /&gt;
&lt;br /&gt;
デフォルトの証明書を変えたいと思うことがあるかもしれません。例えば、[http://www.theregister.co.uk/2016/05/27/blue_coat_ca_certs/ ニュース] を読んで証明書を信頼しないようにしたい場合 (ソースのプロバイダーによって無効になるのを待てない場合)、Arch のインフラを使うことで簡単に設定できます:&lt;br /&gt;
# {{ic|.crt}} 形式の証明書を入手してください (例: [https://crt.sh/?id=19538258 view], [https://crt.sh/?d=19538258 download]; 既存のルート認証局の場合、システム内にあるはずです)。&lt;br /&gt;
# {{ic|/etc/ca-certificates/trust-source/blacklist/}} にコピーしてください。&lt;br /&gt;
# root で &#039;&#039;update-ca-trust&#039;&#039; を実行してください。&lt;br /&gt;
&lt;br /&gt;
お好きなブラウザを開いて&#039;&#039;&#039;信頼できない&#039;&#039;&#039;サイトとして表示されれば、ブラックリストが上手く機能しています。&lt;br /&gt;
&lt;br /&gt;
== 物理セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐためにできることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識やそこまでの意図はなく、現実に実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバブルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
=== ブートローダー ===&lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダー]] を保護することは非常に重要です。保護されていないブートローダは、[[カーネルパラメータ]]に{{ic|1=init=/bin/sh}} を設定することでシェルに直接ブートしてログインの制限を回避することができます。&lt;br /&gt;
&lt;br /&gt;
==== Syslinux ====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== GRUB ====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] はブートローダのパスワードもサポートしています。詳しくは [[GRUB/ヒントとテクニック#GRUB メニューのパスワード保護|GRUB メニューのパスワード保護]] を参照してください。[[GRUB/ヒントとテクニック# GRUB メニューのパスワード保護|暗号化 /boot]] もサポートしていますが、これはブートローダコードの一部だけを暗号化しないままにしています。GRUB の設定、[[カーネル]]、[[initramfs]] は暗号化されています。&lt;br /&gt;
&lt;br /&gt;
==== systemd-boot ====&lt;br /&gt;
&lt;br /&gt;
[[systemd-boot]] は [[#セキュアブート]] が有効な場合、カーネルパラメータの編集を無効にします。代わりの方法として、[[systemd-boot#パスワードで保護されたカーネルパラメータエディタ]] を参照して下さい、より伝統的なパスワードベースのオプションを使用できます。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] は [[UEFI]] の機能で、コンピュータが起動するファイルの認証を可能にするものです。これは、起動パーティション内のファイルを置き換えるような、いくつかの [https://ja.wikipedia.org/wiki/%E6%82%AA%E6%84%8F%E3%81%82%E3%82%8B%E3%83%A1%E3%82%A4%E3%83%89%E6%94%BB%E6%92%83 悪意あるメイド攻撃] を防止するのに役立ちます。通常、コンピュータにはベンダー (OEM) によって登録されたキーが付属しています。しかし、これを取り外して、コンピュータを「セットアップモード」にし、ユーザーが自分のキーを登録・管理できるようにすることができます。&lt;br /&gt;
&lt;br /&gt;
セキュアブートのページでは、[https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Implementing_Secure_Boot using your own keys] によってセキュアブートを設定する方法を案内しています。&lt;br /&gt;
&lt;br /&gt;
=== トラステッドプラットフォームモジュール(TPM) ===&lt;br /&gt;
&lt;br /&gt;
[[Trusted Platform Module|TPM]] は、暗号鍵が埋め込まれたハードウェア・マイクロプロセッサです。これは、最近のほとんどのコンピュータの基本的な信頼の根源を形成し、ブートチェーンのエンドツーエンドの検証を可能にします。内部スマートカードとして使用したり、コンピュータ上で動作するファームウェアを証明したり、改ざん防止とブルートフォース耐性のあるストアにユーザーが秘密情報を保管することができます。&lt;br /&gt;
&lt;br /&gt;
=== リムーバブル フラッシュ ドライブ上のブートパーティション ===&lt;br /&gt;
&lt;br /&gt;
ブートパーティションをフラッシュドライブに置き、それがないとシステムが起動しないようにする、というのはよくあるアイデアです。このアイデアの支持者はしばしば [[セキュリティ#ディスク暗号化|ディスク暗号化]] を併用し、ブートパーティションに置かれた [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USBdetached encryption headers] を使っている人もいます。&lt;br /&gt;
&lt;br /&gt;
この方法は [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB encrypting /boot] と統合することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
=== 不正なUSBデバイスから保護する ===&lt;br /&gt;
&lt;br /&gt;
[[Usbguard]] は、デバイスの属性に基づく基本的なホワイトリストおよびブラックリスト機能を実装することで、不正な USB デバイス (別名 [https://ja.wikipedia.org/wiki/BadUSB BadUSB], [https://github.com/samyk/poisontap PoisonTap] または [https://lanturtle.com/ LanTurtle]) からコンピューターを保護できるソフトウェアフレームワークです。&lt;br /&gt;
&lt;br /&gt;
=== 揮発性データの収集 ===&lt;br /&gt;
&lt;br /&gt;
電源が入っているコンピュータは、[https://fedvte.usalearning.gov/courses/CSI/course/videos/pdf/CSI_D01_S05_T01_STEP.pdf volatile data collection] に対して脆弱である可能性があります。コンピュータの電源を入れる必要がない時や、コンピュータの物理的な安全性が一時的に損なわれる場合(例:セキュリティチェックポイントを通過する時)には、コンピュータの電源を完全に切ることがベストプラクティスです。&lt;br /&gt;
&lt;br /&gt;
== パッケージ ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージの認証 ===&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== アップグレード ===&lt;br /&gt;
&lt;br /&gt;
定期的に [[システムメンテナンス#システムのアップグレード|システムのアップグレード]] を行うことが重要です。&lt;br /&gt;
&lt;br /&gt;
=== 脆弱性アラートの確認 ===&lt;br /&gt;
&lt;br /&gt;
National Vulnerability Database が提供する Common Vulnerabilities and Exposure (CVE) Security Alert の更新を購読し、[https://nvd.nist.gov/download.cfm NVD Download webpage] で見つけてください。[https://security.archlinux.org/ Arch Linux Security Tracker] は Arch Linux Security Advisory (ASA), Arch Linux Vulnerability Group (AVG), CVE データセットを表形式でまとめた、特に有用なリソースです。ツール {{Pkg|arch-audit}} は実行中のシステムに影響を与える脆弱性をチェックするために使われます。グラフィカルなシステムトレイである {{Pkg|arch-audit-gtk}} も使うことができます。[https://wiki.archlinux.org/title/Arch_Security_Team Arch Security Team]も参照してください。&lt;br /&gt;
&lt;br /&gt;
特にメインレポジトリや AUR 以外の手段でソフトウェアをインストールしている場合は、あなたが使っているソフトウェアのリリース通知を購読することも検討すべきです。いくつかのソフトウェアには、セキュリティに関する通知を受け取るために購読できるメーリングリストがあります。ソースコードホスティングサイトはしばしば新しいリリースの RSS フィードを提供しています。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの再ビルド ===&lt;br /&gt;
&lt;br /&gt;
攻撃対象領域を減らす手段として、パッケージをリビルドし、不要な関数や機能を削除することができます。例えば、{{Pkg|bzip2}} は [https://security.archlinux.org/CVE-2016-3189 CVE-2016-3189] を回避するために {{ic|bzip2recover}} を使わずにリビルドすることが可能です。カスタムハードニングフラグは、手動またはラッパーを介して適用することもできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! フラグ !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| -D_FORTIFY_SOURCE=2 || ランタイムバッファオーバーフローの検出 &lt;br /&gt;
|-&lt;br /&gt;
| -D_GLIBCXX_ASSERTIONS || C++ の文字列とコンテナのランタイム境界チェック &lt;br /&gt;
|-&lt;br /&gt;
| -fasynchronous-unwind-tables || バックトレースの信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fexceptions || テーブルベースのスレッドキャンセルを有効にする &lt;br /&gt;
|-&lt;br /&gt;
| -fpie -Wl,-pie || 実行可能ファイルに対する完全な ASLR &lt;br /&gt;
|-&lt;br /&gt;
| -fpic -shared || 共有ライブラリのテキスト再配置を行わない &lt;br /&gt;
|-&lt;br /&gt;
| -fplugin=annobin || ハードニング品質管理用データの作成 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-clash-protection || スタックオーバーフロー検出の信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector or -fstack-protector-all || スタックスマッシュプロテクター &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector-strong || 同様に &lt;br /&gt;
|-&lt;br /&gt;
| -g || デバッグ情報を生成する &lt;br /&gt;
|-&lt;br /&gt;
| -grecord-gcc-switches || デバッグ情報にコンパイラのフラグを格納する &lt;br /&gt;
|-&lt;br /&gt;
| -mcet -fcf-protection || 制御フローの完全性保護 &lt;br /&gt;
|-&lt;br /&gt;
| -O2 || 推奨される最適化 &lt;br /&gt;
|-&lt;br /&gt;
| -pipe || 一時ファイルを回避し、ビルドを高速化します。 &lt;br /&gt;
|-&lt;br /&gt;
| -Wall || 推奨されるコンパイラの警告 &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=format-security || 安全でない可能性のあるフォーマット文字列の引数を拒否する &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=implicit-function-declaration || 関数プロトタイプの欠落を却下する &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,defs || アンダーリンクの検出と拒否 &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,now || 遅延バインディングを無効にする &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,relro || 移設後の読み出し専用セグメント &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/ Flags and info ソース]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://security.archlinux.org/ Arch Linux セキュリティトラッカー]&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [https://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the Linux desktop]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the Linux server]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation: Linux ワークステーションのセキュリティチェックリスト]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io Privacy Resources]&lt;br /&gt;
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html Red Hat Enterprise Linux 7 セキュリティガイド]&lt;br /&gt;
* [https://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Debian 安全化マニュアル (PDF)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://www.auscert.org.au/resources/publications/guidelines/unix-linux/unix-and-linux-security-checklist-v3.0 UNIX and Linux Security Checklist v3.0]&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=41250</id>
		<title>Systemd-boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=41250"/>
		<updated>2025-12-14T05:35:06Z</updated>

		<summary type="html">&lt;p&gt;N: /* ローダーの追加 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase title}}&lt;br /&gt;
[[Category:ブートローダー]]&lt;br /&gt;
[[de:Gummiboot]]&lt;br /&gt;
[[en:Systemd-boot]]&lt;br /&gt;
[[es:Systemd-boot]]&lt;br /&gt;
[[pt:Systemd-boot]]&lt;br /&gt;
[[ru:Systemd-boot]]&lt;br /&gt;
[[zh-hans:Systemd-boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|セキュアブート}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&#039;&#039;&#039;systemd-boot&#039;&#039;&#039; (旧名 &#039;&#039;&#039;gummiboot&#039;&#039;&#039;。ドイツ語で「ゴムボート」)は、 設定された EFI イメージを実行するシンプルな [[UEFI]] [[ブートマネージャー]]です。デフォルトのエントリは設定されたパターン (glob) または矢印キーで操作する画面上のメニューによって選択されます。{{Pkg|systemd}} に含まれており、Arch システムにデフォルトでインストールされます。&lt;br /&gt;
&lt;br /&gt;
systemd-boot は EFI 実行可能ファイル ([[EFISTUB]]、[[UEFI シェル]]、[[GRUB]]、[https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-and-uefi#understanding-the-windows-boot-manager Windows ブートマネージャ]) のみを起動できることに注意してください。&lt;br /&gt;
&lt;br /&gt;
== サポートされているファイルシステム ==&lt;br /&gt;
&lt;br /&gt;
systemd-boot はファイルシステムのサポートを [[Arch ブートプロセス#UEFI|ファームウェア]] から引き継ぎます (少なくとも FAT12、FAT16、FAT32) さらに、{{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/drivers/}} にある [[Unified Extensible Firmware Interface#UEFI ドライバ|UEFI ドライバ]] を全てロードします。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; は、{{Pkg|base}} メタパッケージの依存関係である {{Pkg|systemd}} パッケージとともに出荷されるため、追加のパッケージを手動でインストールする必要はありません。&lt;br /&gt;
&lt;br /&gt;
== EFI ブートマネージャのインストール ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、[[Unified Extensible Firmware Interface#UEFI 変数|UEFI 変数]] が利用できるかどうか確かめてください。{{ic|efivar --list}} コマンドを実行することでチェックできます。または、efivar がインストールされていない場合は、{{ic|ls /sys/firmware/efi/efivars}} を実行してください (ディレクトリが存在する場合、システムは UEFI モードにブートされます)&lt;br /&gt;
&lt;br /&gt;
このページでは ESP のマウントポイントを {{ic|&#039;&#039;esp&#039;&#039;}} として表します (大抵の場合は {{ic|/efi}} か {{ic|/boot}} です) これは、システムのマウントポイントに [[chroot]] していることを前提としています。&lt;br /&gt;
&lt;br /&gt;
{{man|1|bootctl}} を使用して EFI システムパーティションに &#039;&#039;systemd-boot&#039;&#039; をインストールします:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install&lt;br /&gt;
&lt;br /&gt;
これにより、&#039;&#039;systemd-boot&#039;&#039; UEFI ブートマネージャーが ESP にコピーされ、その UEFI ブートエントリが作成され、UEFI ブート順序の最初に設定されます。&lt;br /&gt;
&lt;br /&gt;
* x64 UEFI では、{{ic|/usr/lib/systemd/boot/efi/systemd-bootx64.efi}} は {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi}} と {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} にコピーされます。&lt;br /&gt;
* IA32 UEFI では、{{ic|/usr/lib/systemd/boot/efi/systemd-bootia32.efi}} は {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootia32.efi}} と {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}} にコピーされます。&lt;br /&gt;
&lt;br /&gt;
UEFI ブートエントリは &amp;quot;Linux Boot Manager&amp;quot; と呼ばれ、UEFI のビット数によって、ESP 上の {{ic|EFI}systemd-bootx64.efi}} か {{ic|EFI}systemd-bootia32.efi}} を指します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|bootctl install}} を実行すると、&#039;&#039;systemd-boot&#039;&#039; は ESP を {{ic|/efi}},{{ic|/boot}},{{ic|/boot/efi}} に配置しようとします。{{ic|&#039;&#039;esp&#039;&#039;}} を別の場所に設定するには、{{ic|1=--esp-path=&#039;&#039;esp&#039;&#039;}} オプションを渡す必要があります。(詳細は {{man|1|bootctl|OPTIONS}} を参照)&lt;br /&gt;
* &#039;&#039;systemd-boot&#039;&#039; をインストールすると既存の {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} は上書きされます。(または、{{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}} の IA32 UEFI)、例えば Microsoft 版のファイルなどです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
インストールを完了するには、&#039;&#039;systemd-boot&#039;&#039; を[[systemd-boot#設定|設定]]します。&lt;br /&gt;
&lt;br /&gt;
=== XBOOTLDR を使用したインストール ===&lt;br /&gt;
&lt;br /&gt;
カーネルと initramfs を ESP から分離するために、&amp;quot;Linux extended boot&amp;quot; タイプ (XBOOTLDR) の別の [[パーティショニング#/boot|/boot パーティション]]を作成することができます。これは、既存の [[EFI システムパーティション|ESP]] が小さすぎる [[Windows と Arch のデュアルブート]] 時に特に役立ちます。 &lt;br /&gt;
&lt;br /&gt;
通常どおり ESP を作成し、同じ物理ドライブに XBOOTLDR 用の別のパーティションを作成します。XBOOTLDR のパーティションタイプ GUID は {{ic|&amp;quot;bc13c2ff-59e6-4262-a352-b275fd6f7172}} である必要があります。XBOOTLDR パーティションのサイズは、インストールする全てのカーネルを収納できる 十分な大きさが必要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* systemd-boot は、 ESP の場合のようにファイルシステムチェックを行いません。 したがって、他のファイルシステムを使用することは可能ですが、 UEFI 実装が起動中にそれを読み取ることができる場合に限ります。&lt;br /&gt;
* &amp;quot;fast boot&amp;quot; モードが有効の場合、UEFI ファームウェアは ESP 以外のパーティションのロードをスキップすることがあります。これにより、&#039;&#039;システム起動&#039;&#039; が XBOOTLDR パーティション上のエントリを見つけられなくなる可能性があります。XBOOTLDRを使用するには、&amp;quot;fast boot&amp;quot; を無効にする必要があります。&lt;br /&gt;
* XBOOTLDR パーティションは、system-boot が認識できるように ESP と同じ物理ディスク上になければならない場合があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
インストール中に、ESP を {{ic|/mnt/efi}} にマウントし、 {{ic|&#039;&#039;boot&#039;&#039;}} を {{ic|/mnt/boot}} にマウントします。&lt;br /&gt;
&lt;br /&gt;
chroot になったら、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl --esp-path=/efi --boot-path=/boot install&lt;br /&gt;
&lt;br /&gt;
インストールを完了するには &#039;&#039;systemd-boot&#039;&#039; を[[#設定|設定]]します。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ブートマネージャの更新 ===&lt;br /&gt;
&lt;br /&gt;
新しいバージョンの &#039;&#039;systemd-boot&#039;&#039; がリリースされるたびに、UEFI ブートマネージャはオプションでユーザーによって再インストールできます。これは手動または自動で行うことができ、以下にその2つの方法を説明します。&lt;br /&gt;
&lt;br /&gt;
{{Note|UEFI ブートマネージャは独立した EFI 実行可能ファイルであり、任意のバージョンを使用してシステムをブートできます(部分的な更新は適用されません。pacman は &#039;&#039;systemd-boot&#039;&#039; インストーラーのみをインストールし、&#039;&#039;systemd-boot&#039;&#039; 本体はインストールしません)ただし、新しいバージョンは新機能を追加したり、バグを修正したりする可能性があるため、&#039;&#039;systemd-boot&#039;&#039; の更新はおそらく良いアイデアです。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|[[セキュアブート]] が有効な場合、ブートローダーの更新に署名する必要があります。詳細は [[#セキュアブートのための署名]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 手動で更新 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bootctl&#039;&#039; を使用して &#039;&#039;systemd-boot&#039;&#039; を更新:&lt;br /&gt;
&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|bootctl install}} と同様に、&#039;&#039;systemd-boot&#039;&#039;は ESP を {{ic|/efi}}、{{ic|/boot}}、{{ic|/boot/efi}} に配置しようとします。{{ic|&#039;&#039;esp&#039;&#039;}} を別の場所に設定するには、{{ic|1=--esp-path=&#039;&#039;esp&#039;&#039;}} オプションを渡す必要があります。}}&lt;br /&gt;
&lt;br /&gt;
==== 自動で更新 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; を自動的に更新するには、[[systemd#ユニットを使う|systemd サービス]] または [[pacman フック]] を使用してください。これらの2つの方法については、以下に説明します。&lt;br /&gt;
&lt;br /&gt;
===== systemd サービス =====&lt;br /&gt;
&lt;br /&gt;
バージョン 250 以降、{{Pkg|systemd}} には {{ic|systemd-boot-update.service}} が同梱されています。このサービスを [[有効化]] すると、次回の起動時にブートローダーが更新されます。&lt;br /&gt;
&lt;br /&gt;
===== Pacman フック =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|systemd-boot-pacman-hook}} パッケージは {{Pkg|systemd}} がアップグレードされる度に実行される pacman フックを追加します。&lt;br /&gt;
&lt;br /&gt;
systemd-boot-pacman-hook をインストールするのではなく、次のファイルを {{ic|/etc/pacman.d/hooks/}} に手動で配置することをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/95-systemd-boot.hook|2=&lt;br /&gt;
[Trigger]&lt;br /&gt;
Type = Package&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Target = systemd&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Gracefully upgrading systemd-boot...&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/systemctl restart systemd-boot-update.service&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートのための署名 ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] が有効な場合、パッケージのアップグレード時にブートマネージャを自動的に署名するために、pacmanフックを追加したい場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/80-secureboot.hook|2=&lt;br /&gt;
[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Path&lt;br /&gt;
Target = usr/lib/systemd/boot/efi/systemd-boot*.efi&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Signing systemd-boot EFI binary for Secure Boot&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /bin/sh -c &#039;while read -r i; do sbsign --key &#039;&#039;/path/to/keyfile.key&#039;&#039; --cert &#039;&#039;/path/to/certificate.crt&#039;&#039; &amp;quot;$i&amp;quot;; done;&#039;&lt;br /&gt;
Depends = sh&lt;br /&gt;
Depends = sbsigntools&lt;br /&gt;
NeedsTargets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/keyfile.key&#039;&#039;}} と {{ic|&#039;&#039;/path/to/certificate.crt&#039;&#039;}} をそれぞれ署名鍵と証明書に置き換えてください。このフックの詳細な理解には、{{man|1|sbsign}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|/usr/lib/systemd/boot/efi/systemd-boot*.efi.signed}} は、{{ic|bootctl install}} または {{ic|bootctl update}} によって自動的に認識されます。詳細は {{man|1|bootctl|SIGNED .EFI FILES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
別の方法としてこちらも参照、[[Unified Extensible Firmware Interface/セキュアブート#pacman フックを使って自動的に署名する|sbctl]]&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== ローダー設定 ===&lt;br /&gt;
&lt;br /&gt;
ローダーの設定は {{ic|&#039;&#039;esp&#039;&#039;/loader/loader.conf}} ファイルに保存されます。詳細は、{{man|5|loader.conf|OPTIONS}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
ローダーの設定例を以下に示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/loader.conf|&lt;br /&gt;
default  arch.conf&lt;br /&gt;
timeout  4&lt;br /&gt;
console-mode max&lt;br /&gt;
editor   no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* systemd-boot はインデント用のタブを受け入れません。代わりにスペースを使用してください。&lt;br /&gt;
* {{ic|default}} と {{ic|timeout}} はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。&lt;br /&gt;
* ​{{ic|bootctl set-default &amp;quot;&amp;quot;}} を使用すると、 {{ic|default}} オプションに優先して EFI 変数をクリアできます。&lt;br /&gt;
* 基本的なローダーの設定ファイルは {{ic|/usr/share/systemd/bootctl/loader.conf}} に存在します。&lt;br /&gt;
* {{ic|timeout 0}} を設定している場合、{{ic|Space}} を押すことでブートメニューにアクセスできます。&lt;br /&gt;
* ブートローダー(エントリ選択中)が歪んで表示される場合や、誤った解像度が使用されている場合は、{{ic|console-mode}} を {{ic|auto}}(最適な解像度を選択するためのヒューリスティックスを使用)、{{ic|keep}}(ファームウェアが提供する解像度を維持)、または {{ic|2}}(最初の非 UEFI 標準解像度を選択しようと試みる)に設定してみることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ローダーの追加 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039;は、起動元の[[EFI システムパーティション]]上の{{ic|/loader/entries/}}ディレクトリ内にある&#039;&#039;.conf&#039;&#039;ファイルおよび同一ディスク上の[[Systemd-boot#XBOOTLDR_を使用したインストール|XBOOTDR]]パーティションも検索対象とします。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|&#039;&#039;esp&#039;&#039;/loader/entries/*.conf}}内のエントリーは{{ic|&#039;&#039;esp/&#039;&#039;}}ディレクトリ内のファイル(kernel, initramfs, imageなど)のみ参照でき、{{ic|&#039;&#039;boot&#039;&#039;/loader/entries/*.conf}}内のエントリーは{{ic|&#039;&#039;boot/&#039;&#039;}}ディレクトリ内のファイルのみ参照出来ます。&lt;br /&gt;
* ファイルパスはEFIシステムパーティションまたはXBOOTLDRパーティションをルートにしたパスです。例えばEFIシステムパーティションまたはXBOOTLDRパーティションが{{ic|/boot}}ディレクトリにマウントされている時は{{ic|/boot/vmlinuz-linux}}ファイルは{{ic|linux}}キーで{{ic|/vmlinuz-linux}}として指定する必要があります。&lt;br /&gt;
* [[セキュアブート]]が有効になっている場合、組み込みの{{ic|.cmdline}}を持つ[[ユニファイドカーネルイメージ]](UKI)はブートエントリーで指定したオプションや対話的に渡されるコマンドラインオプションを全て無視します。セキュアブートが無効の場合コマンドラインで渡されたオプションは組み込みの{{ic|.cmdline}}の内容を上書きします。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[UUID]] &#039;&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;&#039;のボリュームからArch Linuxを起動するloaderファイルの例:&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch.conf|2=&lt;br /&gt;
title   Arch Linux&lt;br /&gt;
linux   /vmlinuz-linux&lt;br /&gt;
initrd  /initramfs-linux.img&lt;br /&gt;
options root=UUID=&#039;&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;&#039; rw&lt;br /&gt;
}}&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch-fallback.conf|2=&lt;br /&gt;
title   Arch Linux (fallback initramfs)&lt;br /&gt;
linux   /vmlinuz-linux&lt;br /&gt;
initrd  /initramfs-linux-fallback.img&lt;br /&gt;
options root=UUID=&#039;&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;&#039; rw&lt;br /&gt;
}}&lt;br /&gt;
全構成オプションの詳細については、[https://uapi-group.org/specifications/specs/boot_loader_specification/#type-1-boot-loader-specification-entries Boot Loader Specification]を参照してください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039;は起動時に、{{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}の&#039;&#039;&#039;Windows Boot Manager&#039;&#039;&#039;、ファームウェア内の&#039;&#039;&#039;Apple macOS Boot Manager&#039;&#039;&#039;、{{ic|/shellx64.efi}}の[[Unified_Extensible_Firmware_Interface#UEFI_シェル|UEFIシェル]]、{{ic|/EFI/BOOT/bootx64.efi}}の&#039;&#039;&#039;EFIデフォルトローダー&#039;&#039;&#039;をチェックし、存在する場合それぞれ{{ic|auto-windows}}、{{ic|auto-osx}}、{{ic|auto-efi-shell}}、{{ic|auto-efi-default}}というタイトルで対応するエントリが生成されます。さらに{{ic|/EFI/Linux/}}に置かれた特別なカーネルファイルを検出します。これらのエントリは手動でローダーを構成する必要はありません。ただし他のEFIアプリケーションの自動検出機能は([[rEFInd]]とは異なり)備えていません、Linuxカーネルを起動するには手動でエントリを作成する必要があります。&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 設定済みのブートエントリは、{{ic|bootctl list}}コマンドで表示できます。&lt;br /&gt;
* エントリファイルの例は{{ic|/usr/share/systemd/bootctl/arch.conf}}にあります。&lt;br /&gt;
* [[LVM]]、[[LUKS]]、[[dm-crypt]]、[[Btrfs]]などで必要な[[カーネルパラメータ]]はそれぞれのページを確認してください。&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
[[マイクロコード#別個のマイクロコード_initramfs_ファイルを使う|外部のマイクロコードinitramfsイメージ]]を使用する場合(例えばBoosterをinitramfs生成ツールとして使用する場合)、{{ic|/boot/amd-ucode.img}}または{{ic|/boot/intel-ucode.img}}を別の{{ic|inird}}として指定し、メインのinitramfsイメージより&#039;&#039;&#039;前に&#039;&#039;&#039;記述する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== EFI シェルや他の EFI アプリ ====&lt;br /&gt;
&lt;br /&gt;
[[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]] を {{Pkg|edk2-shell}} パッケージとともにインストールした場合、&amp;quot;systemd-boot&amp;quot; は EFI ファイルが {{ic|&#039;&#039;esp&#039;&#039;/shellx64.efi}} に配置されると自動的に検出して新しいエントリを作成します。&lt;br /&gt;
これを実行するには、パッケージをインストールした後に以下のようなコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/edk2-shell/x64/Shell.efi /boot/shellx64.efi&lt;br /&gt;
&lt;br /&gt;
それ以外の場合は、[[rEFInd#ツール|その他の EFI アプリケーション]] を ESP にインストールした場合、次のスニペットを使用できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|efi}} 行のファイルパスパラメータは、[[EFI システムパーティション]] のルートに対して相対的です。もし EFI システムパーティションが {{ic|/boot}} にマウントされていて、EFI バイナリが {{ic|/boot/EFI/xx.efi}} と {{ic|/boot/yy.efi}} に存在する場合、それぞれのパラメータは {{ic|efi /EFI/xx.efi}} と {{ic|efi /yy.efi}} のように指定します。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/fwupd.conf|&lt;br /&gt;
title  Firmware updater&lt;br /&gt;
efi     /EFI/tools/fwupdx64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/gdisk.conf|&lt;br /&gt;
title  GPT fdisk (gdisk)&lt;br /&gt;
efi     /EFI/tools/gdisk_x64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Memtest86+ =====&lt;br /&gt;
&lt;br /&gt;
これを機能させるには、{{pkg|memtest86+-efi}} をインストールする必要があります。また、セキュアブートを使用するときに EFI バイナリに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/memtest.conf|&lt;br /&gt;
title Memtest86+&lt;br /&gt;
efi /memtest86+/memtest.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Netboot =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;systemd-boot&amp;quot; は [[Netboot]] をチェーンロードできます。{{ic|ipxe-arch.efi}}  EFI バイナリとその署名をダウンロードし、それを検証した後、提案された場所に {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch_netboot/arch_netboot.efi}} として配置します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch_netboot.conf|&lt;br /&gt;
title Arch Linux Netboot&lt;br /&gt;
efi /EFI/arch_netboot/arch_netboot.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; は [[GRUB]] をチェーンロードできます。{{ic|grubx64.efi}} バイナリの場所は、GRUB が ESP にインストールされた際に使用された {{ic|1=--bootloader-id=}} と一致します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/grub.conf|&lt;br /&gt;
title GRUB&lt;br /&gt;
efi /EFI/GRUB/grubx64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 別のディスクから起動 ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;systemd-boot&amp;quot; は起動元の ESP や同一ディスク上のXBOOTLDRパーティション以外のパーティションからEFIバイナリを起動 [https://github.com/systemd/systemd/issues/3252 できませんが、] [[UEFI シェル]] を使ってそれを行うことができます。&lt;br /&gt;
&lt;br /&gt;
まず、上記の [[#EFI シェルや他の EFI アプリ]] のセクションに従って、{{Pkg|edk2-shell}} パッケージをインストールします。UEFI シェルで &amp;quot;map&amp;quot; コマンドを使用して、対応する PARTUUID を持つパーティションの &#039;&#039;&#039;FS エイリアス&#039;&#039;&#039; (例:HD0a66666a2、HD0b、FS1、BLK7) を確認します。&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|exit}} コマンドを使用して Linux に戻り、UEFI シェルを通じてターゲット EFI プログラムを実行するための新しいローダーエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/windows.conf|&lt;br /&gt;
title   Windows&lt;br /&gt;
efi     /shellx64.efi&lt;br /&gt;
options -nointerrupt -nomap -noversion HD0b:EFI\Microsoft\Boot\Bootmgfw.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|efi}} パスは、 {{ic|shellx64.efi}} がコピーされた &amp;quot;esp&amp;quot; パーティション内の場所と一致していることを確認してください。また、{{ic|shellx64.efi}} EFI ファイルは、&amp;quot;systemd-boot&amp;quot; による自動エントリ作成を避けるために他の場所に移動することもできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|HD0b}} は、前述の &amp;quot;FS エイリアス&amp;quot; に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|-nointerrupt}} オプションは、{{ic|Ctrl+c}} でターゲット EFI プログラムを中断しないようにします。&lt;br /&gt;
* {{ic|-nomap -noversion}} オプションは、デフォルトの UEFI シェルの挨拶を非表示にします。&lt;br /&gt;
* ターゲットEFIプログラムが終了した場合(例えばエラーで)にUEFIシェルが自動的にブートローダーに戻るようにするには、{{ic|-exit}}  オプションを追加します。&lt;br /&gt;
* もし UEFI シェル内にまだ不要な出力がある場合、{{ic|-noconsoleout}}  オプションを追加できます。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ファームウェアセットアップの起動 ===&lt;br /&gt;
&lt;br /&gt;
systemd-boot は、デバイスのファームウェアが OS からセットアップに再起動することをサポートしている場合、UEFI ファームウェアセットアップに起動するエントリを自動的に追加します。&lt;br /&gt;
&lt;br /&gt;
=== ハイバネーション ===&lt;br /&gt;
&lt;br /&gt;
[[サスペンドとハイバネート]]の記事を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== パスワードで保護されたカーネルパラメータエディタ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|password}} 設定オプションをサポートしている {{AUR|systemd-boot-password}} をインストールすることもできます。{{ic|sbpctl generate}} を使ってオプションで指定する値を生成できます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot-password&#039;&#039; は以下のコマンドでインストールしてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=# sbpctl install &#039;&#039;esp&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
カーネルパラメータを編集する前にパスワードの入力が求められるようになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ブートメニューで使用できるキー ===&lt;br /&gt;
&lt;br /&gt;
ブートメニューで使用できるキー割り当てについては、{{man|7|systemd-boot|KEY BINDINGS}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 再起動後の起動対象を選択する ===&lt;br /&gt;
&lt;br /&gt;
ブートマネージャーは systemctl コマンドに統合されており、再起動後に起動させるオプションを選択できます。例えば、カスタムカーネルのエントリファイルが {{ic|&#039;&#039;esp&#039;&#039;/loader/entries/arch-custom.conf}} にあるとき、次のようにするとデフォルト設定はそのままにカスタムカーネルが起動します:&lt;br /&gt;
&lt;br /&gt;
 $ systemctl reboot --boot-loader-entry=arch-custom&lt;br /&gt;
&amp;lt;!-- To see a list of possible entries pass the {{ic|--help}} option. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
マザーボードのファームウェアを起動させるときは次のようにします:&lt;br /&gt;
&lt;br /&gt;
 $ systemctl reboot --firmware-setup&lt;br /&gt;
&lt;br /&gt;
=== ユニファイドカーネルイメージ を使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} にある [[ユニファイドカーネルイメージ|Unified kernel image]] (UKI)は、systemd-boot によって自動的に読み込まれ、{{ic|&#039;&#039;esp&#039;&#039;/loader/entries}} にエントリを追加する必要はありません。(Unified kernel image は、systemd-boot によって識別されるためには、{{ic|.efi}} 拡張子を持っている必要があります。)&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|&#039;&#039;esp&#039;&#039;/loader/entries/}} 内のファイルは、{{ic|&#039;&#039;esp&#039;&#039;/loader/loader.conf}} に {{ic|default}} が設定されていない場合、最初に起動されます。それらのエントリを削除するか、フルファイル名でデフォルトを設定してください。例:{{ic|1=default arch-linux.efi}}}}&lt;br /&gt;
&lt;br /&gt;
=== ESP 上の Grml ===&lt;br /&gt;
&lt;br /&gt;
{{Note|以下の手順は、Grml 専用ではありません。​若干の調整で他のソフト (例: [http://www.system-rescue-cd.org/ SystemRescueCD]) のインストールも可能です。}}&lt;br /&gt;
{{Tip|{{ic|PKGBUILD}} が利用可能です: {{AUR|archiso-systemd-boot}}}}&lt;br /&gt;
&lt;br /&gt;
[https://grml.org/ Grml] ​は、システム管理とレスキュー用のソフトウェアを集めた小さなライブシステムです。&lt;br /&gt;
&lt;br /&gt;
​Grml を ESP にインストールするには、カーネル {{ic|vmlinuz}}、 initramfs {{ic|initrd.img}}、 圧縮イメージ {{ic|grml64-small.squashfs}} を iso ファイルから ESP にコピーするだけです。そのためには、まず [https://grml.org/ grml64-small.iso] ファイルをダウンロードして(マウントポイントは以降 &#039;&#039;mnt&#039;&#039; と表記される) ファイルをマウントします。​カーネルと initramfs は {{ic|&#039;&#039;mnt&#039;&#039;/boot/grml6 small/}} にあり、圧縮されたイメージは {{ic|&#039;&#039;mnt&#039;&#039;/live/grml64-small/}} にあります。&lt;br /&gt;
&lt;br /&gt;
​次に、Grml 用のディレクトリを ESP に作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
&lt;br /&gt;
​上記のファイルをコピーします:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/boot/grml64small/vmlinuz &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/boot/grml64small/initrd.img &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/live/grml64-small/grml64-small.squashfs &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
&lt;br /&gt;
​最後のステップで、システムブートローダー用のエントリを作成します。 {{ic|&#039;&#039;esp&#039;&#039;/loader/entries}} 次の内容の {{ic|grml.conf}} ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/grml.conf|2=&lt;br /&gt;
title   Grml Live Linux&lt;br /&gt;
linux   /grml/vmlinuz&lt;br /&gt;
initrd  /grml/initrd.img&lt;br /&gt;
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0}}&lt;br /&gt;
&lt;br /&gt;
​使用可能なブートオプションの概要については、 [http://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml]&lt;br /&gt;
&lt;br /&gt;
=== ESP 上の Archiso ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|PKGBUILD}} が利用可能です: {{AUR|archiso-systemd-boot}}}}&lt;br /&gt;
&lt;br /&gt;
Grml と同様に、Arch Linux の ISO を使用することができます。そのためには、ISO ファイルからカーネル {{ic|vmlinuz-linux}}、initramfs {{ic|initramfs-linux.img}}、および squashfs イメージ {{ic|airootfs.sfs}} を EFI システムパーティションにコピーする必要があります。&lt;br /&gt;
&lt;br /&gt;
最初に [https://archlinux.org/download/ archlinux-yyy.mm.dd-x86_64.iso] をダウンロードします。&lt;br /&gt;
&lt;br /&gt;
次に、ESP に Archiso のディレクトリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/archiso&lt;br /&gt;
&lt;br /&gt;
そこに {{ic|arch}} ディレクトリの内容を抽出します:&lt;br /&gt;
&lt;br /&gt;
 # bsdtar -v -x --no-same-permissions --strip-components 1 -f archlinux-&#039;&#039;YYYY&#039;&#039;.&#039;&#039;MM&#039;&#039;.&#039;&#039;DD&#039;&#039;-x86_64.iso -C &#039;&#039;esp&#039;&#039;/EFI/archiso arch&lt;br /&gt;
&lt;br /&gt;
最後のステップでは、systemd-boot Loader のブートエントリを作成します:{{ic|&#039;&#039;esp&#039;&#039;/roader/entries}}:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch-rescue.conf|2=&lt;br /&gt;
title   Arch Linux (rescue system)&lt;br /&gt;
linux   /EFI/archiso/boot/x86_64/vmlinuz-linux&lt;br /&gt;
initrd  /EFI/archiso/boot/x86_64/initramfs-linux.img&lt;br /&gt;
options archisobasedir=/EFI/archiso archisosearchfilename=/EFI/archiso/boot/x86_64/vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
利用可能なブートオプションの概要については、[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio-archiso/-/blob/master/docs/README.bootparams README.bootparams for mkinitcpio-archiso] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== BIOS システムでの systemd-boot ===&lt;br /&gt;
&lt;br /&gt;
[https://systemd.io/BOOT_LOADER_SPECIFICATION/ ブートローダーの仕様] に従う BIOS システム用のブートローダーが必要な場合は、 BIOS システムで systemd-boot を押してサービスを開始できます。 [[Clover]] ブートローダーは BIOS システムからの起動をサポートし、シミュレートされた EFI 環境を提供します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== systemd-boot がブートエントリを表示しない ===&lt;br /&gt;
&lt;br /&gt;
これは、カーネルへのパスが間違って指定されているなど、設定ファイルに関するさまざまな問題が原因である可能性があります。確認するには、次のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # bootctl&lt;br /&gt;
&lt;br /&gt;
=== BIOS モードで起動後にインストール ===&lt;br /&gt;
&lt;br /&gt;
{{Note|こちらの起動方法は推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
BIOS モードで OS を起動したいときも &#039;&#039;systemd-boot&#039;&#039; をインストールすることは可能です。ただし、起動時に &#039;&#039;systemd-boot&#039;&#039; の EFI ファイルを実行するようにファームウェアを設定する必要があります:&lt;br /&gt;
&lt;br /&gt;
* 他の場所に機能する UEFI Shell がある場合。&lt;br /&gt;
* ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。&lt;br /&gt;
* 一部のファームウェアは、UEFI に他のエントリが設定されていない場合、デフォルトで {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} を使用することがあります。&lt;br /&gt;
&lt;br /&gt;
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi}} (32ビット環境の場合 {{ic|systemd-bootia32.efi}}) に変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|Dell Latitude シリーズのファームウェアインターフェースは、UEFI ブートの設定に必要なすべてを提供しますが、UEFI シェルはコンピュータの ROM に書き込むことができません。}}&lt;br /&gt;
&lt;br /&gt;
=== efibootmgr を使って手動エントリを追加する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|bootctl install}} コマンドが失敗した場合、{{Pkg|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --create --disk /dev/sd&#039;&#039;X&#039;&#039; --part &#039;&#039;Y&#039;&#039; --loader &#039;\EFI\systemd\systemd-bootx64.efi&#039; --label &amp;quot;Linux Boot Manager&amp;quot; --unicode&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/sdXY}} は [[EFI システムパーティション]]に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|EFI イメージのパスでは区切り文字としてバックスラッシュ ({{ic|\}}) を使用します。}}&lt;br /&gt;
&lt;br /&gt;
=== Windows の bcdedit を使用した手動入力 ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由で Windows から EFI ブートエントリを作成する必要がある場合は、管理者プロンプトから次のコマンドを使用してください。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; bcdedit /copy {bootmgr} /d &amp;quot;Linux Boot Manager&amp;quot;&lt;br /&gt;
 &amp;gt; bcdedit /set {&#039;&#039;guid&#039;&#039;} path \EFI\systemd\systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;guid&#039;&#039;}} を最初のコマンドによってリターンされた ID に置き換えます。これをデフォルトのエントリとして設定するには:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; bcdedit /default {&#039;&#039;guid&#039;&#039;}&lt;br /&gt;
&lt;br /&gt;
=== Windows をアップグレードした後にメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
[[Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまう]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== Windows BitLocker TPM ロック解除のサポートを追加 ===&lt;br /&gt;
&lt;br /&gt;
BitLocker による回復キーの要求を停止するには、次の行を &#039;&#039;loader.conf&#039;&#039; に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/loader.conf|&lt;br /&gt;
reboot-for-bitlocker yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これにより、&#039;&#039;BootNext&#039;&#039; UEFI 変数が設定され、BitLocker が回復キーを必要とせずに &#039;&#039;Windows ブートマネージャー&#039;&#039; がロードされます。これは 1 回限りの変更であり、&#039;&#039;systemd-boot&#039;&#039; がデフォルトのブートローダーのままです。Windows が自動検出された場合は、エントリとして指定する必要はありません。&lt;br /&gt;
&lt;br /&gt;
これは実験的な機能なので、必ず {{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* https://systemd.io/BOOT/&lt;br /&gt;
* https://bbs.archlinux.org/viewtopic.php?id=254374&lt;br /&gt;
* https://uapi-group.org/specifications/specs/boot_loader_specification/&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=41249</id>
		<title>Systemd-boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=41249"/>
		<updated>2025-12-14T05:28:22Z</updated>

		<summary type="html">&lt;p&gt;N: /* ローダーの追加 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase title}}&lt;br /&gt;
[[Category:ブートローダー]]&lt;br /&gt;
[[de:Gummiboot]]&lt;br /&gt;
[[en:Systemd-boot]]&lt;br /&gt;
[[es:Systemd-boot]]&lt;br /&gt;
[[pt:Systemd-boot]]&lt;br /&gt;
[[ru:Systemd-boot]]&lt;br /&gt;
[[zh-hans:Systemd-boot]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|セキュアブート}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&#039;&#039;&#039;systemd-boot&#039;&#039;&#039; (旧名 &#039;&#039;&#039;gummiboot&#039;&#039;&#039;。ドイツ語で「ゴムボート」)は、 設定された EFI イメージを実行するシンプルな [[UEFI]] [[ブートマネージャー]]です。デフォルトのエントリは設定されたパターン (glob) または矢印キーで操作する画面上のメニューによって選択されます。{{Pkg|systemd}} に含まれており、Arch システムにデフォルトでインストールされます。&lt;br /&gt;
&lt;br /&gt;
systemd-boot は EFI 実行可能ファイル ([[EFISTUB]]、[[UEFI シェル]]、[[GRUB]]、[https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-and-uefi#understanding-the-windows-boot-manager Windows ブートマネージャ]) のみを起動できることに注意してください。&lt;br /&gt;
&lt;br /&gt;
== サポートされているファイルシステム ==&lt;br /&gt;
&lt;br /&gt;
systemd-boot はファイルシステムのサポートを [[Arch ブートプロセス#UEFI|ファームウェア]] から引き継ぎます (少なくとも FAT12、FAT16、FAT32) さらに、{{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/drivers/}} にある [[Unified Extensible Firmware Interface#UEFI ドライバ|UEFI ドライバ]] を全てロードします。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; は、{{Pkg|base}} メタパッケージの依存関係である {{Pkg|systemd}} パッケージとともに出荷されるため、追加のパッケージを手動でインストールする必要はありません。&lt;br /&gt;
&lt;br /&gt;
== EFI ブートマネージャのインストール ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、[[Unified Extensible Firmware Interface#UEFI 変数|UEFI 変数]] が利用できるかどうか確かめてください。{{ic|efivar --list}} コマンドを実行することでチェックできます。または、efivar がインストールされていない場合は、{{ic|ls /sys/firmware/efi/efivars}} を実行してください (ディレクトリが存在する場合、システムは UEFI モードにブートされます)&lt;br /&gt;
&lt;br /&gt;
このページでは ESP のマウントポイントを {{ic|&#039;&#039;esp&#039;&#039;}} として表します (大抵の場合は {{ic|/efi}} か {{ic|/boot}} です) これは、システムのマウントポイントに [[chroot]] していることを前提としています。&lt;br /&gt;
&lt;br /&gt;
{{man|1|bootctl}} を使用して EFI システムパーティションに &#039;&#039;systemd-boot&#039;&#039; をインストールします:&lt;br /&gt;
&lt;br /&gt;
 # bootctl install&lt;br /&gt;
&lt;br /&gt;
これにより、&#039;&#039;systemd-boot&#039;&#039; UEFI ブートマネージャーが ESP にコピーされ、その UEFI ブートエントリが作成され、UEFI ブート順序の最初に設定されます。&lt;br /&gt;
&lt;br /&gt;
* x64 UEFI では、{{ic|/usr/lib/systemd/boot/efi/systemd-bootx64.efi}} は {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi}} と {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} にコピーされます。&lt;br /&gt;
* IA32 UEFI では、{{ic|/usr/lib/systemd/boot/efi/systemd-bootia32.efi}} は {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootia32.efi}} と {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}} にコピーされます。&lt;br /&gt;
&lt;br /&gt;
UEFI ブートエントリは &amp;quot;Linux Boot Manager&amp;quot; と呼ばれ、UEFI のビット数によって、ESP 上の {{ic|EFI}systemd-bootx64.efi}} か {{ic|EFI}systemd-bootia32.efi}} を指します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|bootctl install}} を実行すると、&#039;&#039;systemd-boot&#039;&#039; は ESP を {{ic|/efi}},{{ic|/boot}},{{ic|/boot/efi}} に配置しようとします。{{ic|&#039;&#039;esp&#039;&#039;}} を別の場所に設定するには、{{ic|1=--esp-path=&#039;&#039;esp&#039;&#039;}} オプションを渡す必要があります。(詳細は {{man|1|bootctl|OPTIONS}} を参照)&lt;br /&gt;
* &#039;&#039;systemd-boot&#039;&#039; をインストールすると既存の {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} は上書きされます。(または、{{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTIA32.EFI}} の IA32 UEFI)、例えば Microsoft 版のファイルなどです。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
インストールを完了するには、&#039;&#039;systemd-boot&#039;&#039; を[[systemd-boot#設定|設定]]します。&lt;br /&gt;
&lt;br /&gt;
=== XBOOTLDR を使用したインストール ===&lt;br /&gt;
&lt;br /&gt;
カーネルと initramfs を ESP から分離するために、&amp;quot;Linux extended boot&amp;quot; タイプ (XBOOTLDR) の別の [[パーティショニング#/boot|/boot パーティション]]を作成することができます。これは、既存の [[EFI システムパーティション|ESP]] が小さすぎる [[Windows と Arch のデュアルブート]] 時に特に役立ちます。 &lt;br /&gt;
&lt;br /&gt;
通常どおり ESP を作成し、同じ物理ドライブに XBOOTLDR 用の別のパーティションを作成します。XBOOTLDR のパーティションタイプ GUID は {{ic|&amp;quot;bc13c2ff-59e6-4262-a352-b275fd6f7172}} である必要があります。XBOOTLDR パーティションのサイズは、インストールする全てのカーネルを収納できる 十分な大きさが必要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* systemd-boot は、 ESP の場合のようにファイルシステムチェックを行いません。 したがって、他のファイルシステムを使用することは可能ですが、 UEFI 実装が起動中にそれを読み取ることができる場合に限ります。&lt;br /&gt;
* &amp;quot;fast boot&amp;quot; モードが有効の場合、UEFI ファームウェアは ESP 以外のパーティションのロードをスキップすることがあります。これにより、&#039;&#039;システム起動&#039;&#039; が XBOOTLDR パーティション上のエントリを見つけられなくなる可能性があります。XBOOTLDRを使用するには、&amp;quot;fast boot&amp;quot; を無効にする必要があります。&lt;br /&gt;
* XBOOTLDR パーティションは、system-boot が認識できるように ESP と同じ物理ディスク上になければならない場合があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
インストール中に、ESP を {{ic|/mnt/efi}} にマウントし、 {{ic|&#039;&#039;boot&#039;&#039;}} を {{ic|/mnt/boot}} にマウントします。&lt;br /&gt;
&lt;br /&gt;
chroot になったら、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl --esp-path=/efi --boot-path=/boot install&lt;br /&gt;
&lt;br /&gt;
インストールを完了するには &#039;&#039;systemd-boot&#039;&#039; を[[#設定|設定]]します。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ブートマネージャの更新 ===&lt;br /&gt;
&lt;br /&gt;
新しいバージョンの &#039;&#039;systemd-boot&#039;&#039; がリリースされるたびに、UEFI ブートマネージャはオプションでユーザーによって再インストールできます。これは手動または自動で行うことができ、以下にその2つの方法を説明します。&lt;br /&gt;
&lt;br /&gt;
{{Note|UEFI ブートマネージャは独立した EFI 実行可能ファイルであり、任意のバージョンを使用してシステムをブートできます(部分的な更新は適用されません。pacman は &#039;&#039;systemd-boot&#039;&#039; インストーラーのみをインストールし、&#039;&#039;systemd-boot&#039;&#039; 本体はインストールしません)ただし、新しいバージョンは新機能を追加したり、バグを修正したりする可能性があるため、&#039;&#039;systemd-boot&#039;&#039; の更新はおそらく良いアイデアです。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|[[セキュアブート]] が有効な場合、ブートローダーの更新に署名する必要があります。詳細は [[#セキュアブートのための署名]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 手動で更新 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bootctl&#039;&#039; を使用して &#039;&#039;systemd-boot&#039;&#039; を更新:&lt;br /&gt;
&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|bootctl install}} と同様に、&#039;&#039;systemd-boot&#039;&#039;は ESP を {{ic|/efi}}、{{ic|/boot}}、{{ic|/boot/efi}} に配置しようとします。{{ic|&#039;&#039;esp&#039;&#039;}} を別の場所に設定するには、{{ic|1=--esp-path=&#039;&#039;esp&#039;&#039;}} オプションを渡す必要があります。}}&lt;br /&gt;
&lt;br /&gt;
==== 自動で更新 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; を自動的に更新するには、[[systemd#ユニットを使う|systemd サービス]] または [[pacman フック]] を使用してください。これらの2つの方法については、以下に説明します。&lt;br /&gt;
&lt;br /&gt;
===== systemd サービス =====&lt;br /&gt;
&lt;br /&gt;
バージョン 250 以降、{{Pkg|systemd}} には {{ic|systemd-boot-update.service}} が同梱されています。このサービスを [[有効化]] すると、次回の起動時にブートローダーが更新されます。&lt;br /&gt;
&lt;br /&gt;
===== Pacman フック =====&lt;br /&gt;
&lt;br /&gt;
{{AUR|systemd-boot-pacman-hook}} パッケージは {{Pkg|systemd}} がアップグレードされる度に実行される pacman フックを追加します。&lt;br /&gt;
&lt;br /&gt;
systemd-boot-pacman-hook をインストールするのではなく、次のファイルを {{ic|/etc/pacman.d/hooks/}} に手動で配置することをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/95-systemd-boot.hook|2=&lt;br /&gt;
[Trigger]&lt;br /&gt;
Type = Package&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Target = systemd&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Gracefully upgrading systemd-boot...&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/systemctl restart systemd-boot-update.service&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== セキュアブートのための署名 ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] が有効な場合、パッケージのアップグレード時にブートマネージャを自動的に署名するために、pacmanフックを追加したい場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/80-secureboot.hook|2=&lt;br /&gt;
[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Path&lt;br /&gt;
Target = usr/lib/systemd/boot/efi/systemd-boot*.efi&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Signing systemd-boot EFI binary for Secure Boot&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /bin/sh -c &#039;while read -r i; do sbsign --key &#039;&#039;/path/to/keyfile.key&#039;&#039; --cert &#039;&#039;/path/to/certificate.crt&#039;&#039; &amp;quot;$i&amp;quot;; done;&#039;&lt;br /&gt;
Depends = sh&lt;br /&gt;
Depends = sbsigntools&lt;br /&gt;
NeedsTargets&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/keyfile.key&#039;&#039;}} と {{ic|&#039;&#039;/path/to/certificate.crt&#039;&#039;}} をそれぞれ署名鍵と証明書に置き換えてください。このフックの詳細な理解には、{{man|1|sbsign}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
作成された {{ic|/usr/lib/systemd/boot/efi/systemd-boot*.efi.signed}} は、{{ic|bootctl install}} または {{ic|bootctl update}} によって自動的に認識されます。詳細は {{man|1|bootctl|SIGNED .EFI FILES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
別の方法としてこちらも参照、[[Unified Extensible Firmware Interface/セキュアブート#pacman フックを使って自動的に署名する|sbctl]]&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== ローダー設定 ===&lt;br /&gt;
&lt;br /&gt;
ローダーの設定は {{ic|&#039;&#039;esp&#039;&#039;/loader/loader.conf}} ファイルに保存されます。詳細は、{{man|5|loader.conf|OPTIONS}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
ローダーの設定例を以下に示します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/loader.conf|&lt;br /&gt;
default  arch.conf&lt;br /&gt;
timeout  4&lt;br /&gt;
console-mode max&lt;br /&gt;
editor   no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* systemd-boot はインデント用のタブを受け入れません。代わりにスペースを使用してください。&lt;br /&gt;
* {{ic|default}} と {{ic|timeout}} はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。&lt;br /&gt;
* ​{{ic|bootctl set-default &amp;quot;&amp;quot;}} を使用すると、 {{ic|default}} オプションに優先して EFI 変数をクリアできます。&lt;br /&gt;
* 基本的なローダーの設定ファイルは {{ic|/usr/share/systemd/bootctl/loader.conf}} に存在します。&lt;br /&gt;
* {{ic|timeout 0}} を設定している場合、{{ic|Space}} を押すことでブートメニューにアクセスできます。&lt;br /&gt;
* ブートローダー(エントリ選択中)が歪んで表示される場合や、誤った解像度が使用されている場合は、{{ic|console-mode}} を {{ic|auto}}(最適な解像度を選択するためのヒューリスティックスを使用)、{{ic|keep}}(ファームウェアが提供する解像度を維持)、または {{ic|2}}(最初の非 UEFI 標準解像度を選択しようと試みる)に設定してみることができます。}}&lt;br /&gt;
&lt;br /&gt;
=== ローダーの追加 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039;は、起動元の[[EFI システムパーティション]]上の{{ic|/loader/entries/}}ディレクトリ内にある&#039;&#039;.conf&#039;&#039;ファイルおよび同一ディスク上の[[Systemd-boot#XBOOTLDR_を使用したインストール|XBOOTDR]]パーティションも検索対象とします。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|&#039;&#039;esp&#039;&#039;/loader/entries/*.conf}}内のエントリーは{{ic|&#039;&#039;esp/&#039;&#039;}}ディレクトリ内のファイル(kernel, initramfs, imageなど)のみ参照でき、{{ic|&#039;&#039;boot&#039;&#039;/loader/entries/*.conf}}内のエントリーは{{ic|&#039;&#039;boot/&#039;&#039;}}ディレクトリ内のファイルのみ参照出来ます。&lt;br /&gt;
* ファイルパスはEFIシステムパーティションまたはXBOOTLDRパーティションをルートにしたパスです。例えばEFIシステムパーティションまたはXBOOTLDRパーティションが{{ic|/boot}}ディレクトリにマウントされている時は{{ic|/boot/vmlinuz-linux}}ファイルは{{ic|linux}}キーで{{ic|/vmlinuz-linux}}として指定する必要があります。&lt;br /&gt;
* [[セキュアブート]]が有効になっている場合、組み込みの{{ic|.cmdline}}を持つ[[ユニファイドカーネルイメージ]](UKI)はブートエントリーで指定したオプションや対話的に渡されるコマンドラインオプションを全て無視します。セキュアブートが無効の場合コマンドラインで渡されたオプションは組み込みの{{ic|.cmdline}}の内容を上書きします。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
UUID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxのボリュームからArch Linuxを起動するloaderファイルの例:&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch.conf|2=&lt;br /&gt;
title   Arch Linux&lt;br /&gt;
linux   /vmlinuz-linux&lt;br /&gt;
initrd  /initramfs-linux.img&lt;br /&gt;
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw&lt;br /&gt;
}}&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch-fallback.conf|2=&lt;br /&gt;
title   Arch Linux (fallback initramfs)&lt;br /&gt;
linux   /vmlinuz-linux&lt;br /&gt;
initrd  /initramfs-linux-fallback.img&lt;br /&gt;
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw&lt;br /&gt;
}}&lt;br /&gt;
全構成オプションの詳細については、[https://uapi-group.org/specifications/specs/boot_loader_specification/#type-1-boot-loader-specification-entries Boot Loader Specification]を参照してください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039;は起動時に、{{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}の&#039;&#039;&#039;Windows Boot Manager&#039;&#039;&#039;、ファームウェア内の&#039;&#039;&#039;Apple macOS Boot Manager&#039;&#039;&#039;、{{ic|/shellx64.efi}}の[[Unified_Extensible_Firmware_Interface#UEFI_シェル|UEFIシェル]]、{{ic|/EFI/BOOT/bootx64.efi}}の&#039;&#039;&#039;EFIデフォルトローダー&#039;&#039;&#039;をチェックし、存在する場合それぞれ{{ic|auto-windows}}、{{ic|auto-osx}}、{{ic|auto-efi-shell}}、{{ic|auto-efi-default}}というタイトルで対応するエントリが生成されます。さらに{{ic|/EFI/Linux/}}に置かれた特別なカーネルファイルを検出します。これらのエントリは手動でローダーを構成する必要はありません。ただし他のEFIアプリケーションの自動検出機能は([[rEFInd]]とは異なり)備えていません、Linuxカーネルを起動するには手動でエントリを作成する必要があります。&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 設定済みのブートエントリは、{{ic|bootctl list}}コマンドで表示できます。&lt;br /&gt;
* エントリファイルの例は{{ic|/usr/share/systemd/bootctl/arch.conf}}にあります。&lt;br /&gt;
* [[LVM]]、[[LUKS]]、[[dm-crypt]]、[[Btrfs]]などで必要な[[カーネルパラメータ]]はそれぞれのページを確認してください。&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
[[マイクロコード#別個のマイクロコード_initramfs_ファイルを使う|外部のマイクロコードinitramfsイメージ]]を使用する場合(例えばBoosterをinitramfs生成ツールとして使用する場合)、{{ic|/boot/amd-ucode.img}}または{{ic|/boot/intel-ucode.img}}を別の{{ic|inird}}として指定し、メインのinitramfsイメージより&#039;&#039;&#039;前に&#039;&#039;&#039;記述する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== EFI シェルや他の EFI アプリ ====&lt;br /&gt;
&lt;br /&gt;
[[Unified Extensible Firmware Interface#UEFI シェル|UEFI シェル]] を {{Pkg|edk2-shell}} パッケージとともにインストールした場合、&amp;quot;systemd-boot&amp;quot; は EFI ファイルが {{ic|&#039;&#039;esp&#039;&#039;/shellx64.efi}} に配置されると自動的に検出して新しいエントリを作成します。&lt;br /&gt;
これを実行するには、パッケージをインストールした後に以下のようなコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/share/edk2-shell/x64/Shell.efi /boot/shellx64.efi&lt;br /&gt;
&lt;br /&gt;
それ以外の場合は、[[rEFInd#ツール|その他の EFI アプリケーション]] を ESP にインストールした場合、次のスニペットを使用できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|efi}} 行のファイルパスパラメータは、[[EFI システムパーティション]] のルートに対して相対的です。もし EFI システムパーティションが {{ic|/boot}} にマウントされていて、EFI バイナリが {{ic|/boot/EFI/xx.efi}} と {{ic|/boot/yy.efi}} に存在する場合、それぞれのパラメータは {{ic|efi /EFI/xx.efi}} と {{ic|efi /yy.efi}} のように指定します。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/fwupd.conf|&lt;br /&gt;
title  Firmware updater&lt;br /&gt;
efi     /EFI/tools/fwupdx64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/gdisk.conf|&lt;br /&gt;
title  GPT fdisk (gdisk)&lt;br /&gt;
efi     /EFI/tools/gdisk_x64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Memtest86+ =====&lt;br /&gt;
&lt;br /&gt;
これを機能させるには、{{pkg|memtest86+-efi}} をインストールする必要があります。また、セキュアブートを使用するときに EFI バイナリに署名する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/memtest.conf|&lt;br /&gt;
title Memtest86+&lt;br /&gt;
efi /memtest86+/memtest.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Netboot =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;systemd-boot&amp;quot; は [[Netboot]] をチェーンロードできます。{{ic|ipxe-arch.efi}}  EFI バイナリとその署名をダウンロードし、それを検証した後、提案された場所に {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch_netboot/arch_netboot.efi}} として配置します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch_netboot.conf|&lt;br /&gt;
title Arch Linux Netboot&lt;br /&gt;
efi /EFI/arch_netboot/arch_netboot.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; は [[GRUB]] をチェーンロードできます。{{ic|grubx64.efi}} バイナリの場所は、GRUB が ESP にインストールされた際に使用された {{ic|1=--bootloader-id=}} と一致します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/grub.conf|&lt;br /&gt;
title GRUB&lt;br /&gt;
efi /EFI/GRUB/grubx64.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 別のディスクから起動 ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;systemd-boot&amp;quot; は起動元の ESP や同一ディスク上のXBOOTLDRパーティション以外のパーティションからEFIバイナリを起動 [https://github.com/systemd/systemd/issues/3252 できませんが、] [[UEFI シェル]] を使ってそれを行うことができます。&lt;br /&gt;
&lt;br /&gt;
まず、上記の [[#EFI シェルや他の EFI アプリ]] のセクションに従って、{{Pkg|edk2-shell}} パッケージをインストールします。UEFI シェルで &amp;quot;map&amp;quot; コマンドを使用して、対応する PARTUUID を持つパーティションの &#039;&#039;&#039;FS エイリアス&#039;&#039;&#039; (例:HD0a66666a2、HD0b、FS1、BLK7) を確認します。&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|exit}} コマンドを使用して Linux に戻り、UEFI シェルを通じてターゲット EFI プログラムを実行するための新しいローダーエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/windows.conf|&lt;br /&gt;
title   Windows&lt;br /&gt;
efi     /shellx64.efi&lt;br /&gt;
options -nointerrupt -nomap -noversion HD0b:EFI\Microsoft\Boot\Bootmgfw.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|efi}} パスは、 {{ic|shellx64.efi}} がコピーされた &amp;quot;esp&amp;quot; パーティション内の場所と一致していることを確認してください。また、{{ic|shellx64.efi}} EFI ファイルは、&amp;quot;systemd-boot&amp;quot; による自動エントリ作成を避けるために他の場所に移動することもできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|HD0b}} は、前述の &amp;quot;FS エイリアス&amp;quot; に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
* {{ic|-nointerrupt}} オプションは、{{ic|Ctrl+c}} でターゲット EFI プログラムを中断しないようにします。&lt;br /&gt;
* {{ic|-nomap -noversion}} オプションは、デフォルトの UEFI シェルの挨拶を非表示にします。&lt;br /&gt;
* ターゲットEFIプログラムが終了した場合(例えばエラーで)にUEFIシェルが自動的にブートローダーに戻るようにするには、{{ic|-exit}}  オプションを追加します。&lt;br /&gt;
* もし UEFI シェル内にまだ不要な出力がある場合、{{ic|-noconsoleout}}  オプションを追加できます。&lt;br /&gt;
&lt;br /&gt;
=== UEFI ファームウェアセットアップの起動 ===&lt;br /&gt;
&lt;br /&gt;
systemd-boot は、デバイスのファームウェアが OS からセットアップに再起動することをサポートしている場合、UEFI ファームウェアセットアップに起動するエントリを自動的に追加します。&lt;br /&gt;
&lt;br /&gt;
=== ハイバネーション ===&lt;br /&gt;
&lt;br /&gt;
[[サスペンドとハイバネート]]の記事を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== パスワードで保護されたカーネルパラメータエディタ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|password}} 設定オプションをサポートしている {{AUR|systemd-boot-password}} をインストールすることもできます。{{ic|sbpctl generate}} を使ってオプションで指定する値を生成できます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot-password&#039;&#039; は以下のコマンドでインストールしてください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=# sbpctl install &#039;&#039;esp&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
カーネルパラメータを編集する前にパスワードの入力が求められるようになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ブートメニューで使用できるキー ===&lt;br /&gt;
&lt;br /&gt;
ブートメニューで使用できるキー割り当てについては、{{man|7|systemd-boot|KEY BINDINGS}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 再起動後の起動対象を選択する ===&lt;br /&gt;
&lt;br /&gt;
ブートマネージャーは systemctl コマンドに統合されており、再起動後に起動させるオプションを選択できます。例えば、カスタムカーネルのエントリファイルが {{ic|&#039;&#039;esp&#039;&#039;/loader/entries/arch-custom.conf}} にあるとき、次のようにするとデフォルト設定はそのままにカスタムカーネルが起動します:&lt;br /&gt;
&lt;br /&gt;
 $ systemctl reboot --boot-loader-entry=arch-custom&lt;br /&gt;
&amp;lt;!-- To see a list of possible entries pass the {{ic|--help}} option. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
マザーボードのファームウェアを起動させるときは次のようにします:&lt;br /&gt;
&lt;br /&gt;
 $ systemctl reboot --firmware-setup&lt;br /&gt;
&lt;br /&gt;
=== ユニファイドカーネルイメージ を使う ===&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} にある [[ユニファイドカーネルイメージ|Unified kernel image]] (UKI)は、systemd-boot によって自動的に読み込まれ、{{ic|&#039;&#039;esp&#039;&#039;/loader/entries}} にエントリを追加する必要はありません。(Unified kernel image は、systemd-boot によって識別されるためには、{{ic|.efi}} 拡張子を持っている必要があります。)&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|&#039;&#039;esp&#039;&#039;/loader/entries/}} 内のファイルは、{{ic|&#039;&#039;esp&#039;&#039;/loader/loader.conf}} に {{ic|default}} が設定されていない場合、最初に起動されます。それらのエントリを削除するか、フルファイル名でデフォルトを設定してください。例:{{ic|1=default arch-linux.efi}}}}&lt;br /&gt;
&lt;br /&gt;
=== ESP 上の Grml ===&lt;br /&gt;
&lt;br /&gt;
{{Note|以下の手順は、Grml 専用ではありません。​若干の調整で他のソフト (例: [http://www.system-rescue-cd.org/ SystemRescueCD]) のインストールも可能です。}}&lt;br /&gt;
{{Tip|{{ic|PKGBUILD}} が利用可能です: {{AUR|archiso-systemd-boot}}}}&lt;br /&gt;
&lt;br /&gt;
[https://grml.org/ Grml] ​は、システム管理とレスキュー用のソフトウェアを集めた小さなライブシステムです。&lt;br /&gt;
&lt;br /&gt;
​Grml を ESP にインストールするには、カーネル {{ic|vmlinuz}}、 initramfs {{ic|initrd.img}}、 圧縮イメージ {{ic|grml64-small.squashfs}} を iso ファイルから ESP にコピーするだけです。そのためには、まず [https://grml.org/ grml64-small.iso] ファイルをダウンロードして(マウントポイントは以降 &#039;&#039;mnt&#039;&#039; と表記される) ファイルをマウントします。​カーネルと initramfs は {{ic|&#039;&#039;mnt&#039;&#039;/boot/grml6 small/}} にあり、圧縮されたイメージは {{ic|&#039;&#039;mnt&#039;&#039;/live/grml64-small/}} にあります。&lt;br /&gt;
&lt;br /&gt;
​次に、Grml 用のディレクトリを ESP に作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
&lt;br /&gt;
​上記のファイルをコピーします:&lt;br /&gt;
&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/boot/grml64small/vmlinuz &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/boot/grml64small/initrd.img &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
 # cp &#039;&#039;mnt&#039;&#039;/live/grml64-small/grml64-small.squashfs &#039;&#039;esp&#039;&#039;/grml&lt;br /&gt;
&lt;br /&gt;
​最後のステップで、システムブートローダー用のエントリを作成します。 {{ic|&#039;&#039;esp&#039;&#039;/loader/entries}} 次の内容の {{ic|grml.conf}} ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/grml.conf|2=&lt;br /&gt;
title   Grml Live Linux&lt;br /&gt;
linux   /grml/vmlinuz&lt;br /&gt;
initrd  /grml/initrd.img&lt;br /&gt;
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0}}&lt;br /&gt;
&lt;br /&gt;
​使用可能なブートオプションの概要については、 [http://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml]&lt;br /&gt;
&lt;br /&gt;
=== ESP 上の Archiso ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|PKGBUILD}} が利用可能です: {{AUR|archiso-systemd-boot}}}}&lt;br /&gt;
&lt;br /&gt;
Grml と同様に、Arch Linux の ISO を使用することができます。そのためには、ISO ファイルからカーネル {{ic|vmlinuz-linux}}、initramfs {{ic|initramfs-linux.img}}、および squashfs イメージ {{ic|airootfs.sfs}} を EFI システムパーティションにコピーする必要があります。&lt;br /&gt;
&lt;br /&gt;
最初に [https://archlinux.org/download/ archlinux-yyy.mm.dd-x86_64.iso] をダウンロードします。&lt;br /&gt;
&lt;br /&gt;
次に、ESP に Archiso のディレクトリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p &#039;&#039;esp&#039;&#039;/EFI/archiso&lt;br /&gt;
&lt;br /&gt;
そこに {{ic|arch}} ディレクトリの内容を抽出します:&lt;br /&gt;
&lt;br /&gt;
 # bsdtar -v -x --no-same-permissions --strip-components 1 -f archlinux-&#039;&#039;YYYY&#039;&#039;.&#039;&#039;MM&#039;&#039;.&#039;&#039;DD&#039;&#039;-x86_64.iso -C &#039;&#039;esp&#039;&#039;/EFI/archiso arch&lt;br /&gt;
&lt;br /&gt;
最後のステップでは、systemd-boot Loader のブートエントリを作成します:{{ic|&#039;&#039;esp&#039;&#039;/roader/entries}}:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/arch-rescue.conf|2=&lt;br /&gt;
title   Arch Linux (rescue system)&lt;br /&gt;
linux   /EFI/archiso/boot/x86_64/vmlinuz-linux&lt;br /&gt;
initrd  /EFI/archiso/boot/x86_64/initramfs-linux.img&lt;br /&gt;
options archisobasedir=/EFI/archiso archisosearchfilename=/EFI/archiso/boot/x86_64/vmlinuz-linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
利用可能なブートオプションの概要については、[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio-archiso/-/blob/master/docs/README.bootparams README.bootparams for mkinitcpio-archiso] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== BIOS システムでの systemd-boot ===&lt;br /&gt;
&lt;br /&gt;
[https://systemd.io/BOOT_LOADER_SPECIFICATION/ ブートローダーの仕様] に従う BIOS システム用のブートローダーが必要な場合は、 BIOS システムで systemd-boot を押してサービスを開始できます。 [[Clover]] ブートローダーは BIOS システムからの起動をサポートし、シミュレートされた EFI 環境を提供します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== systemd-boot がブートエントリを表示しない ===&lt;br /&gt;
&lt;br /&gt;
これは、カーネルへのパスが間違って指定されているなど、設定ファイルに関するさまざまな問題が原因である可能性があります。確認するには、次のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # bootctl&lt;br /&gt;
&lt;br /&gt;
=== BIOS モードで起動後にインストール ===&lt;br /&gt;
&lt;br /&gt;
{{Note|こちらの起動方法は推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
BIOS モードで OS を起動したいときも &#039;&#039;systemd-boot&#039;&#039; をインストールすることは可能です。ただし、起動時に &#039;&#039;systemd-boot&#039;&#039; の EFI ファイルを実行するようにファームウェアを設定する必要があります:&lt;br /&gt;
&lt;br /&gt;
* 他の場所に機能する UEFI Shell がある場合。&lt;br /&gt;
* ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。&lt;br /&gt;
* 一部のファームウェアは、UEFI に他のエントリが設定されていない場合、デフォルトで {{ic|&#039;&#039;esp&#039;&#039;/EFI/BOOT/BOOTX64.EFI}} を使用することがあります。&lt;br /&gt;
&lt;br /&gt;
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi}} (32ビット環境の場合 {{ic|systemd-bootia32.efi}}) に変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|Dell Latitude シリーズのファームウェアインターフェースは、UEFI ブートの設定に必要なすべてを提供しますが、UEFI シェルはコンピュータの ROM に書き込むことができません。}}&lt;br /&gt;
&lt;br /&gt;
=== efibootmgr を使って手動エントリを追加する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|bootctl install}} コマンドが失敗した場合、{{Pkg|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --create --disk /dev/sd&#039;&#039;X&#039;&#039; --part &#039;&#039;Y&#039;&#039; --loader &#039;\EFI\systemd\systemd-bootx64.efi&#039; --label &amp;quot;Linux Boot Manager&amp;quot; --unicode&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/sdXY}} は [[EFI システムパーティション]]に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|EFI イメージのパスでは区切り文字としてバックスラッシュ ({{ic|\}}) を使用します。}}&lt;br /&gt;
&lt;br /&gt;
=== Windows の bcdedit を使用した手動入力 ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由で Windows から EFI ブートエントリを作成する必要がある場合は、管理者プロンプトから次のコマンドを使用してください。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; bcdedit /copy {bootmgr} /d &amp;quot;Linux Boot Manager&amp;quot;&lt;br /&gt;
 &amp;gt; bcdedit /set {&#039;&#039;guid&#039;&#039;} path \EFI\systemd\systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;guid&#039;&#039;}} を最初のコマンドによってリターンされた ID に置き換えます。これをデフォルトのエントリとして設定するには:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; bcdedit /default {&#039;&#039;guid&#039;&#039;}&lt;br /&gt;
&lt;br /&gt;
=== Windows をアップグレードした後にメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
[[Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまう]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== Windows BitLocker TPM ロック解除のサポートを追加 ===&lt;br /&gt;
&lt;br /&gt;
BitLocker による回復キーの要求を停止するには、次の行を &#039;&#039;loader.conf&#039;&#039; に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/loader.conf|&lt;br /&gt;
reboot-for-bitlocker yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これにより、&#039;&#039;BootNext&#039;&#039; UEFI 変数が設定され、BitLocker が回復キーを必要とせずに &#039;&#039;Windows ブートマネージャー&#039;&#039; がロードされます。これは 1 回限りの変更であり、&#039;&#039;systemd-boot&#039;&#039; がデフォルトのブートローダーのままです。Windows が自動検出された場合は、エントリとして指定する必要はありません。&lt;br /&gt;
&lt;br /&gt;
これは実験的な機能なので、必ず {{man|5|loader.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* https://systemd.io/BOOT/&lt;br /&gt;
* https://bbs.archlinux.org/viewtopic.php?id=254374&lt;br /&gt;
* https://uapi-group.org/specifications/specs/boot_loader_specification/&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bluetooth&amp;diff=41194</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bluetooth&amp;diff=41194"/>
		<updated>2025-12-06T13:14:57Z</updated>

		<summary type="html">&lt;p&gt;N: /* Windows での展開 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bluetooth]]&lt;br /&gt;
[[de:Bluetooth]]&lt;br /&gt;
[[en:Bluetooth]]&lt;br /&gt;
[[es:Bluetooth]]&lt;br /&gt;
[[ru:Bluetooth]]&lt;br /&gt;
[[zh-hans:Bluetooth]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bluetooth マウス}}&lt;br /&gt;
{{Related|Bluetooth キーボード}}&lt;br /&gt;
{{Related|Bluetooth ヘッドセット}}&lt;br /&gt;
{{Related|Blueman}}&lt;br /&gt;
{{Related|ObexFTP}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Wikipedia:ja:Bluetooth|Bluetooth]] は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として [http://www.bluez.org/ BlueZ] が標準的に使われています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
# Bluetooth プロトコロスタックを提供する、{{Pkg|bluez}} パッケージを[[インストール]]します。&lt;br /&gt;
# {{ic|bluetoothctl}} ユーティリティを提供する、{{Pkg|bluez-utils}} を[[インストール]]します。{{Pkg|bluez-deprecated-tools}} を[[インストール]]して、[[#非推奨の BlueZ ツール|非推奨の BlueZ ツール]] を追加します。&lt;br /&gt;
# 一般的な Bluetooth ドライバは、{{ic|btusb}} カーネルモジュールです。このモジュールがロードされているかどうかを[[カーネルモジュール#情報を取得|確認]]してください。もしロードされていなければ、[[カーネルモジュール#手動でモジュールを扱う|モジュールをロード]]してください。&lt;br /&gt;
# {{ic|bluetooth.service}} を[[起動/有効化]]します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* デフォルトでは bluetooth デーモンは {{ic|lp}} [[ユーザーとグループ#システムグループ|グループ]]のメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth テザリングに接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。&lt;br /&gt;
* Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [https://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino]{{Dead link|2023|09|16|status=404}})。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。&lt;br /&gt;
* Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。&lt;br /&gt;
* hcitool や hciconfig などのツールは上流では非推奨となっており、{{Pkg|bluez-utils}} にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は {{Pkg|bluez-deprecated-tools}} をインストールしてください。詳しい情報は {{Bug|53110}} や [https://lore.kernel.org/linux-bluetooth/20170104133401.3636-1-luiz.dentz@gmail.com/ Bluez メーリングリスト] を参照。&lt;br /&gt;
* 2024年から、{{Pkg|bluez-obex}}と{{Pkg|bluez-mesh}}は{{Pkg|bluez}}から分離されました。よって、Bluetooth越しにファイルを転送したい場合は、{{Pkg|bluez-obex}}をインストールし、ユーザーサービス {{ic|obex.service}} を有効化する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
=== フロントエンド ===&lt;br /&gt;
&lt;br /&gt;
==== コンソール ====&lt;br /&gt;
&lt;br /&gt;
* {{App|bluetoothctl|シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。|http://www.bluez.org/|{{Pkg|bluez-utils}}}}&lt;br /&gt;
* {{App|bluetuith|ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。|https://www.github.com/darkhz/bluetuith|{{AUR|bluetuith}}}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|bluetoothctl コマンドを自動化するには、{{ic|echo -e &amp;quot;&#039;&#039;command1&#039;&#039;\n&#039;&#039;command2&#039;&#039;\n&amp;quot; {{!}} bluetoothctl}} または {{ic|bluetoothctl -- &#039;&#039;command&#039;&#039;}} を使用します。}}&lt;br /&gt;
&lt;br /&gt;
==== グラフィカル ====&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Bluetooth をカスタマイズするためのグラフィカルインターフェイスが利用可能です。&lt;br /&gt;
&lt;br /&gt;
* {{App|GNOME Bluetooth|[[GNOME]] の Bluetooth ツール。&lt;br /&gt;
** {{Pkg|gnome-bluetooth-3.0}} バックエンドを提供 ({{Pkg|gnome-bluetooth}} はレガシーです)&lt;br /&gt;
** {{Pkg|gnome-shell}} ステータスモニターアプレットを提供&lt;br /&gt;
** {{Pkg|gnome-control-center}} は設定用のフロントエンド GUI を提供しており、アクティビティ概要で  Bluetooth と入力するか、 {{ic|gnome-control-center bluetooth}} コマンドでアクセスすることができます。&lt;br /&gt;
** また、{{ic|bluetooth-sendto}} コマンドを直接起動して、リモートデバイスにファイルを送信することも可能です。&lt;br /&gt;
** {{AUR|nautilus-bluetooth}} は Nautilus の右クリックメニューに &amp;quot;Bluetoothで送信&amp;quot; エントリを追加します。&lt;br /&gt;
** ファイルを受信するには、Bluetooth 設定パネルを開きます。Bluetooth パネルが開いている間のみ受信できます。&lt;br /&gt;
** Thunar のファイルプロパティメニューの &#039;&#039;送信先&#039;&#039; メニューに Bluetooth エントリを追加するには、説明 [https://docs.xfce.org/xfce/thunar/send-to ここ] を参照してください。(設定が必要なコマンドは {{ic|bluetooth-sendto %F}} です)&lt;br /&gt;
|https://wiki.gnome.org/Projects/GnomeBluetooth|}}&lt;br /&gt;
* {{App|Bluedevil|[[KDE]] の Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。|https://invent.kde.org/plasma/bluedevil|{{Pkg|bluedevil}}}}&lt;br /&gt;
* {{App|Blueberry|GNOME Bluetooth から Linux Mint でスピンオフした &#039;&#039;Blueberry&#039;&#039; は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。|https://github.com/linuxmint/blueberry|{{Pkg|blueberry}}}}&lt;br /&gt;
* {{App|[[Blueman]]|フル機能の Bluetooth マネージャー|https://github.com/blueman-project/blueman|{{Pkg|blueman}}}}&lt;br /&gt;
* {{App|[[ObexFTP]]|OBEX 対応のデバイスとの間でファイルを転送するツール。|http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp|{{AUR|obexftp}}}}&lt;br /&gt;
&lt;br /&gt;
== ペアリング ==&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluetooth デバイスを使用する前に、[[rfkill]] でブロックされていないことを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
このセクションでは、&#039;&#039;bluetoothctl&#039;&#039; CLI を使って &#039;&#039;bluez5&#039;&#039; を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。&lt;br /&gt;
&lt;br /&gt;
正確な手順は、利用するデバイスとその入力機能によります。以下は {{ic|bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。&lt;br /&gt;
&lt;br /&gt;
# (任意) {{ic|select &#039;&#039;MAC Address&#039;&#039;}} と入力してデフォルトのコントローラを選択してください。&lt;br /&gt;
# (任意) デバイスがオフになっている場合、{{ic|power on}} と入力してコントローラへの電源供給をオンにしてください。デバイスはデフォルトでオンになっています ([[#アダプタのデフォルト電源状態]])。&lt;br /&gt;
# {{ic|devices}} と入力して、ペアリングしたいデバイスの MAC アドレスを取得してください。&lt;br /&gt;
# デバイスが表示されないときは {{ic|scan on}} コマンドでデバイス検出モードにしてください。&lt;br /&gt;
# {{ic|agent on}} でエージェントをオンにするか、特定のエージェントを選択してください: {{ic|agent}} の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の &#039;ペアリングコード&#039; を管理するもののことです。エージェントは、&#039;ペアリングコード&#039;の受信に応答したり、&#039;ペアリングコード&#039;を送信したりできます。ほとんどの場合、{{ic|default-agent}} を使うのが適切なはずです。[https://askubuntu.com/questions/763939/bluetoothctl-what-is-a-bluetooth-agent]&lt;br /&gt;
# {{ic|pair &#039;&#039;MAC Address&#039;&#039;}} と入力することでペアリングを実行します (タブ補完が使えます)。&lt;br /&gt;
# PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust &#039;&#039;MAC Address&#039;&#039;}} と入力してこれを行なって下さい。デバイスを信頼するには {{ic|trust &#039;&#039;MAC_address&#039;&#039;}} と入力してください。&lt;br /&gt;
# {{ic|connect &#039;&#039;MAC_address&#039;&#039;}} を使って接続を確立してください。&lt;br /&gt;
&lt;br /&gt;
セッションの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bluetoothctl|&lt;br /&gt;
[NEW] Controller 00:10:20:30:40:50 &#039;&#039;hostname&#039;&#039; [default]&lt;br /&gt;
[bluetooth]# agent KeyboardOnly&lt;br /&gt;
Agent registered&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# default-agent&lt;br /&gt;
Default agent request successful&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller 00:10:20:30:40:50 Powered: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
[CHG] Controller 00:10:20:30:40:50 Discovering: yes&lt;br /&gt;
[NEW] Device 00:12:34:56:78:90 &#039;&#039;device name&#039;&#039;&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# pair 00:12:34:56:78:90&lt;br /&gt;
Attempting to pair with 00:12:34:56:78:90&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: no&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
Request PIN code&lt;br /&gt;
[agent] Enter PIN code: 1234&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: no&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# connect 00:12:34:56:78:90&lt;br /&gt;
Attempting to connect to 00:12:34:56:78:90&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
Connection successful&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== デュアルブートペアリング ===&lt;br /&gt;
&lt;br /&gt;
デュアルブート環境でデバイスをペアリングするには、Linux の方でペアリングキーを変更して Windows または macOS で使用されているペアリングキーと同じにする必要があります。&lt;br /&gt;
&lt;br /&gt;
このページでは、これを手動で行う方法のみを説明しています。この手順を自動化するには、[https://github.com/x2es/bt-dualboot bt-dualboot プロジェクト]や関連するリポジトリを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 設定方法 ====&lt;br /&gt;
&lt;br /&gt;
これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。&lt;br /&gt;
&lt;br /&gt;
{{Note|([[Logitech MX Master]] や Logitech 604 Lightspeed などの) 一部の Logitech デバイスは、デバイスが新しいシステムとペアリングするたびに MAC アドレスの値を1つ増加させます。プロセスの最後にこれに対処するために、このケースに該当するかどうかを確認する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
==== Windows の場合 ====&lt;br /&gt;
&lt;br /&gt;
===== Windows での展開 =====&lt;br /&gt;
&lt;br /&gt;
まず、Windows を起動してください。&lt;br /&gt;
&lt;br /&gt;
リンクキーを含むレジストリキーは、ログイン不可能な[https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts#system SYSTEM アカウント]でしかアクセスできません。そのため、{{ic|regedit.exe}} を {{ic|SYSTEM}} として実行するには、Windows Sysinternals 公式サイトにある Microsoft の [https://docs.microsoft.com/en-us/sysinternals/downloads/psexec PsExec] ツールが必要になります。&lt;br /&gt;
&lt;br /&gt;
[https://download.sysinternals.com/files/PSTools.zip PsTools] をダウンロードし、{{ic|PsExec64.exe}} を解凍します。&lt;br /&gt;
&lt;br /&gt;
[https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands#command-shell-overview コマンドシェル] の管理者インスタンスで、解凍した EXE の場所からレジストリエディタを起動してください:&lt;br /&gt;
&lt;br /&gt;
 .\PsExec64.exe -s -i regedit.exe&lt;br /&gt;
&lt;br /&gt;
レジストリエディタで、以下のレジストリキーに移動します:&lt;br /&gt;
&lt;br /&gt;
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
&lt;br /&gt;
このキーの中に各 Bluetooth アダプターの MAC アドレス別のキーがあります。複数のキーがあり、どれを使えばいいかわからない場合は、[https://www.addictivetips.com/windows-tips/find-bluetooth-mac-address-windows-10/ このガイド]に従って、目的の Bluetooth アダプタの MAC アドレスを検索してください。&lt;br /&gt;
&lt;br /&gt;
目的のデバイスアダプタキーの中に、ペアリングされたデバイスのそれぞれに対してキーが、MAC アドレスと関連付けられて存在しています。&lt;br /&gt;
&lt;br /&gt;
インストール間で共有したい各ペアデバイスについて、キー全体を右クリックし、&#039;&#039;.reg&#039;&#039; ファイルとしてエクスポートしてください。これはテキストファイルで、このファイルからキーをコピーできます。&lt;br /&gt;
&lt;br /&gt;
このファイルにバイナリキーが1つだけ存在する場合、Bluetooth 5.1 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。&lt;br /&gt;
&lt;br /&gt;
ペアリングしたデバイスに複数のキー ({{ic|LTK}} や {{ic|IRK}} など) が存在する場合、これは Bluetooth 5.1 デバイスで&#039;&#039;ある&#039;&#039;ということになります。これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために、Linux を起動して [[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
===== Linux での展開 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows パーティションが Bitlocker で暗号化されている場合、Linux から chntpw を使ってアクセスすることはできません。}}&lt;br /&gt;
&lt;br /&gt;
Arch をリブートしてください。{{Pkg|chntpw}} をインストールして、Windows システムドライブをマウントします。&lt;br /&gt;
&lt;br /&gt;
 $ cd &#039;&#039;/path/to/windows/system&#039;&#039;/Windows/System32/config&lt;br /&gt;
 $ chntpw -e SYSTEM&lt;br /&gt;
{{Note|CurrentControlSet の代わりに ControlSet00X（X は任意の数字）と表示されることがあります。ls コマンドで確認してください。}}&lt;br /&gt;
{{ic|chntpw}} 環境の中で以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; cd CurrentControlSet\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
もしくは&lt;br /&gt;
 &amp;gt; cd ControlSet00X\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
&lt;br /&gt;
次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; ls&lt;br /&gt;
 &amp;gt; cd &#039;&#039;your-device&#039;s-mac-address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ペアリングしているデバイスにも同じことをします。Bluetooth 5.1 デバイスで&#039;&#039;ない&#039;&#039;場合、ペアリングキーしか表示されません:&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;gt; ls|&lt;br /&gt;
Node has 0 subkeys and 1 values&lt;br /&gt;
size  type        value name    [value if type DWORD]&lt;br /&gt;
16    REG_BINARY &amp;lt;123456789876&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスである場合、{{ic|hex}} を通して、デバイスのキーを取得します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;gt; hex 123456789876|&lt;br /&gt;
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (いくつかの他の文字)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
”XX&amp;quot; はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスで&#039;&#039;ある&#039;&#039;場合、1つのデバイスに対応するキーが複数表示されます。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
Node has 0 subkeys and 8 values&lt;br /&gt;
  size     type              value name             [value if type DWORD]&lt;br /&gt;
    16  3 REG_BINARY         &amp;lt;LTK&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;KeyLength&amp;gt;               16 [0x10]&lt;br /&gt;
     8  b REG_QWORD          &amp;lt;ERand&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;EDIV&amp;gt;                 37520 [0x9290]&lt;br /&gt;
    16  3 REG_BINARY         &amp;lt;IRK&amp;gt;&lt;br /&gt;
     8  b REG_QWORD          &amp;lt;Address&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;AddressType&amp;gt;              1 [0x1]&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;AuthReq&amp;gt;                 45 [0x2d]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。必要な値を得るには {{ic|hex &#039;&#039;value_name&#039;&#039;}} を使います。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために [[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
==== macOS の場合 ====&lt;br /&gt;
&lt;br /&gt;
macOS を起動し:&lt;br /&gt;
&lt;br /&gt;
* macOS Monterey 及びそれ以降の場合:&lt;br /&gt;
*# Keychain Access を開き、Bluetooth と検索してください。&lt;br /&gt;
*# 日付順でソートしてください。&lt;br /&gt;
*# 対象のデバイスを最近取り除いて再接続した場合、キーを変更日時順でソートして、最新のものを選べばよいです。キーはおそらく MobileBluetooth (古い Bluetooth デバイスの場合) という名前か、UUID (Bluetooth 5.1 以降) だけです。&lt;br /&gt;
*# 対象のエントリをダブルクリックしてください。Account フィールドの MAC アドレスが対象デバイスの MAC アドレスと一致することを確認してください。&lt;br /&gt;
*# &amp;quot;Show password&amp;quot; チェックボックスをクリックしてください。ここで、パスワードを2回入力する必要があります。&lt;br /&gt;
*# パスワードフィールド内のテキストをコピーしてください ({{ic|⌘+a}} {{ic|⌘+c}})。これは実際には XML ファイルです。&lt;br /&gt;
#* テキストをホームディレクトリ内の {{ic|bt_keys.txt}} ファイルにペーストしてください。&lt;br /&gt;
* High Sierra 及びそれ以降の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys &amp;gt; ~/bt_keys.txt}}&lt;br /&gt;
* Sierra 及びそれ以前の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys &amp;gt; ~/bt_keys.txt}}&lt;br /&gt;
&lt;br /&gt;
すると、{{ic|~/.bt_keys.txt}} ファイルには、確立された Bluetooth キーが含まれています。古いバージョンの macOS (High Sierra 及びそれ以前) では、先に進む前にキーの並びを逆にする必要があります。例えば、{{ic|98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm}} は {{ic|MM LL KK JJ GG FF EE DD CC BB AA 2F 54 98}} になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|キーの並びを逆にするには、以下の [[Python]] コードを使用できます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; key = &amp;quot;98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm&amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; &amp;quot; &amp;quot;.join(reversed(key.strip().split()))&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスの場合、1つのデバイスに対して複数のキーが関連付けられています。それらのキーを使用する方法については [[#Bluetooth 5.1 キーの準備]] を見てください。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために、Linux を起動し、[[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth 5.1 キーの準備 ====&lt;br /&gt;
&lt;br /&gt;
[[#Windows の場合]] や [[#macOS の場合]] の章に従っていて Bluetooth 5.1 キーが存在していた場合、それらのキーを Linux にインポートする前に特定の変換をかける必要があります。[[#終わりに]] の章で使うために、要求されたファイルを適切に作成してください。この手順は対象デバイスによって異なり、キーの一部を操作する必要があります。これを行うためのユーティリティは以下で挙げられています。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! デバイス !! 元のキー及び変換 (Windows) !! 元のキー及び変換 (macOS) || キーの保存先ファイル&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
* Logitech MX Master 3&lt;br /&gt;
* Xbox One S Wireless Controller&lt;br /&gt;
|&lt;br /&gt;
* {{ic|IRK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|IdentityResolvingKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|SlaveLongTermKey.Key}} と {{ic|PeripheralLongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|{{ic|ERand}} と {{ic|EDIV}} は {{ic|0}} にする必要あり。&lt;br /&gt;
|&#039;&#039;Random Number&#039;&#039; と &#039;&#039;Encrypted Diversifier&#039;&#039; は {{ic|0}} にする必要あり。&lt;br /&gt;
| {{-}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
* ThinkPad TrackPoint Keyboard II&lt;br /&gt;
* Pebble M350 マウス&lt;br /&gt;
* Logitech G604 Lightspeed マウス&lt;br /&gt;
|&lt;br /&gt;
* {{ic|IRK}} をコピー&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote IRK&#039;&#039; をコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|IdentityResolvingKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Long-term Key&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|ERand}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Random Number&#039;&#039; にコピー&lt;br /&gt;
* Base64 をリトルエンディアンの10進数に変換 (以下の Python コードを参照)。&lt;br /&gt;
| {{ic|LongTermKey.Rand}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|EDIV}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Encrypted Diversifier&#039;&#039; にコピー。&lt;br /&gt;
* Base64 からリトルエンディアンの10進数に変換 (以下の Python コードを参照)。&lt;br /&gt;
| {{ic|LongTermKey.EDiv}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|他のデバイス&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote IRK&#039;&#039; をコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|ERand}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Long-term Key&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Rand}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|EDIV}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Encrypted Diversifier&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
| {{ic|LongTermKey.EDiv}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;|Xbox ワイヤレスコントローラ&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|SlaveLongTermKey.Key}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 値からスペースを取り除くには、[https://www.browserling.com/tools/remove-all-whitespace このオンラインツール]や以下の [[Python]] コードを使用できます:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;quot;&#039;&#039;key_value&#039;&#039;&amp;quot;.replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
* 以下の Python コードはバイトの順番を逆にするだけです:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; ERand=&amp;quot; 63 02 84 B8 5D 40 44 DF   &amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; ERand=list(reversed(ERand.strip().split()))&lt;br /&gt;
}}&lt;br /&gt;
* 以下の Python コードは、一部で必要となる追加の10進数変換を行います:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; int(&amp;quot;&amp;quot;.join(ERand), 16)&lt;br /&gt;
16088054540146049635&lt;br /&gt;
}}&lt;br /&gt;
* 以下の Python コードは base64 から16進数への変換を行います:&lt;br /&gt;
 binascii.hexlify(base64.decodebytes(b&#039;...&#039;)).upper()&lt;br /&gt;
* 以下の Python コードは完全な macOS Encrypted Diversifier の変換を行います:&lt;br /&gt;
 struct.unpack(&#039;&amp;lt;H&#039;, base64.decodebytes(b&#039;...&#039;))&lt;br /&gt;
* 以下の Python コードは完全な macOS Random Number の変換を行います:&lt;br /&gt;
 struct.unpack(&#039;&amp;amp;lt;Q&#039;, base64.decodebytes(b&#039;...&#039;))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
一般的なケースの例としては:&lt;br /&gt;
* {{ic|LTK}} の値 {{ic|48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94}} は、{{ic|LongTermKey.Key}} の値 {{ic|484DAFCD0F9222880A529AF476DA8B94}} となります。&lt;br /&gt;
* {{ic|ERand}} の値 {{ic|63 02 84 B8 5D 40 44 DF}} は、{{ic|Rand}} の値 {{ic|16088054540146049635}} となります。&lt;br /&gt;
* {{ic|EDIV}} の値 {{ic|37520}} は、{{ic|EDiv}} の値 {{ic|37520}} となります。&lt;br /&gt;
&lt;br /&gt;
==== 設定の保存  ====&lt;br /&gt;
&lt;br /&gt;
キーを手に入れたら、ユーザーを root に変更し、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|# cd /var/lib/bluetooth/&#039;&#039;BT-Adapter-MAC-address&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
ここには、ペアリングした Bluetooth 機器ごとのフォルダがあります。Arch とデュアルブートでペアリングしたい各デバイスについて、以下を実行します:&lt;br /&gt;
&lt;br /&gt;
{{bc|# cd &#039;&#039;device-MAC-address&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|この時点で、ペアリング時に MAC アドレスの値を増加させるデバイスを使用している場合、MAC アドレスのディレクトリを、値を増加させたパスへ移動させる必要があります。Windows から MAC アドレスをコピーするか、あるいは、各オクテットが2桁の[[Wikipedia:Hexadecimal|16進数]]であることに注意しながら自分で値を増加させてください。}}&lt;br /&gt;
&lt;br /&gt;
ペアリングキーを持っている場合 (つまり、これは Bluetooth 5.1 デバイスでない)、{{ic|info}} ファイルを編集し、{{ic|[LinkKey]}} 以下のキーを変更します。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=info|2=&lt;br /&gt;
[LinkKey]&lt;br /&gt;
Key=XXXXXXXXXXXXXXX&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|すべての文字が大文字であることを確認する必要があります。スペースはすべて削除してください。}}&lt;br /&gt;
&lt;br /&gt;
複数のキーが存在する場合 (Bluetooth 5.1 の場合)、以下の {{ic|info}} ファイルを編集して、全てのキーをそれぞれの値で置き換えてください。例えば、Xbox One S Wireless Controller の場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=info|2=&lt;br /&gt;
[IdentityResolvingKey]&lt;br /&gt;
Key=&amp;lt;IdentityResolvingKey.Key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[PeripheralLongTermKey]&lt;br /&gt;
Key=&amp;lt;PeripheralLongTermKey.Key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[SlaveLongTermKey]&lt;br /&gt;
Key=&amp;lt;SlaveLongTermKey.Key&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|bluetooth.service}} と {{ic|pulseaudio}} を[[再起動]]してください。({{ic|pulseaudio -k &amp;amp;&amp;amp; pulseaudio --start}} を使ってください。)&lt;br /&gt;
&lt;br /&gt;
これで、デバイスに接続できるはずです。&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluetooth マネージャによっては、デバイスに再接続するために完全な再起動が必要な場合があります。}}&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== アダプタのデフォルト電源状態 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|bluez}} 5.65 以降、BlueZ はデフォルトで、サービスの起動時やサスペンドからの復帰時にすべての Bluetooth アダプタをオンにします。[https://github.com/bluez/bluez/commit/180cf09933b2d8eb03972c8638063429fe5fece5]&lt;br /&gt;
&lt;br /&gt;
アダプタを自動で有効化させたくない場合(例えば、ポータブルデバイスなどでバッテリを節約したい場合)、{{ic|/etc/bluetooth/main.conf}} の {{ic|[Policy]}} セクションで {{ic|1=AutoEnable=false}} を設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/bluetooth/main.conf|2=&lt;br /&gt;
[Policy]&lt;br /&gt;
AutoEnable=false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この設定を行っても、[[#ペアリング]] で説明されているように {{ic|power on}} を実行すれば、アダプタを手動でオンにできます。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に発見可能にする ===&lt;br /&gt;
&lt;br /&gt;
デバイスが常に見えていて、かつ直接接続できる必要がある場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/bluetooth/main.conf|2=&lt;br /&gt;
[General]&lt;br /&gt;
DiscoverableTimeout = 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サスペンドからの復帰 ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、サスペンドからの復帰 が無効になっていないことを確認します。多くの場合、マザーボードからの Bluetooth は USB デバイスです。&lt;br /&gt;
&lt;br /&gt;
bluetooth アダプターのベンダーコードとデバイス ID を確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb {{!}} grep bluetooth -i|&lt;br /&gt;
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
サスペンドからの復帰を有効にするために、ベンダコードとデバイス ID の新しい udev ルールを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules|2=&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;8087&amp;quot;, ATTRS{idProduct}==&amp;quot;0039&amp;quot; RUN+=&amp;quot;/bin/sh -c &#039;echo enabled &amp;gt; /sys$env{DEVPATH}/../power/wakeup;&#039;&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
復帰後に Bluetooth キーボードを自動的に再設定して、例えば異なるキーマップやキーのリピート速度をもたせたりする(詳細は [[Xorg でのキーボード設定#typematic delay と rate の調整]] と [[xmodmap]])には、[[実行可能属性|実行可能]]なスクリプトを作成してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|configure_keyboard.sh|2=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
export DISPLAY=:0&lt;br /&gt;
xset r rate 220 30&lt;br /&gt;
xmodmap /&#039;&#039;your&#039;&#039;/&#039;&#039;path&#039;&#039;/&#039;&#039;to&#039;&#039;/.Xmodmap&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、上記のような追加の udev ルールを作成してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules|2=&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;8087&amp;quot;, ATTRS{idProduct}==&amp;quot;0039&amp;quot; RUN+=&amp;quot;/&#039;&#039;your&#039;&#039;/&#039;&#039;path&#039;&#039;/&#039;&#039;to&#039;&#039;/configure_keyboard.sh&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 実験的な機能を有効化する ===&lt;br /&gt;
&lt;br /&gt;
Bluez スタックは、バグがあるかもしれない新しい機能を D-Bus 実験的オプションおよびカーネル実験的オプションに留めます。実験的な機能は最終的に、安定していると判断され、もはやオプションを必要としなくなるので、どのような実験的な機能が存在するかはバージョンによって異なります (例えば、現在 D-Bus の実験的なインターフェイスを有効化すると、古いヘッドセットのバッテリーレベルを報告できるようになります)。実験的な機能を有効化するには、設定の対応する行をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/bluetooth/main.conf|2=&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# Enables D-Bus experimental interfaces&lt;br /&gt;
# Possible values: true or false&lt;br /&gt;
&#039;&#039;&#039;#Experimental = true&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Enables kernel experimental features, alternatively a list of UUIDs&lt;br /&gt;
# can be given.&lt;br /&gt;
# Possible values: true,false,&amp;lt;UUID List&amp;gt;&lt;br /&gt;
# Possible UUIDS:&lt;br /&gt;
...&lt;br /&gt;
# Defaults to false.&lt;br /&gt;
&#039;&#039;&#039;#KernelExperimental = true&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|bluetooth.service}} を[[編集]]して、{{ic|--experimental}} フラグあるいは {{ic|--kernel}} フラグを追加してください。例えば、以下の[[ドロップインファイル]]のように:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/bluetooth.service.d/override.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
いずれの場合でも、{{ic|bluetooth.service}} を[[再起動]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
通常は、オーディオサーバーと Bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。&lt;br /&gt;
&lt;br /&gt;
Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については [[Bluetooth ヘッドセット]] のページを見てください。&lt;br /&gt;
&lt;br /&gt;
=== PulseAudio ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには {{Pkg|pulseaudio-bluetooth}} パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: {{ic|pulseaudio -k}}。デフォルトの Pulseaudio インストールでは (具体的には、パッケージングされているデフォルトの {{ic|default.pa}} でユーザインスタンスを使用している場合)、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/blob/stable-16.x/src/daemon/default.pa.in#L84-93]&lt;br /&gt;
&lt;br /&gt;
システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー（通常は {{ic|pulse}}) が {{ic|lp}} グループに属しており、PulseAudio 設定に Bluetooth モジュールをロードしていることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pulse/system.pa|2=&lt;br /&gt;
...&lt;br /&gt;
load-module module-bluetooth-policy&lt;br /&gt;
load-module module-bluetooth-discover&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは任意ですが、Bluetooth デバイスの接続時にすべてのオーディオをそのデバイスに自動で切り替えたい場合、{{ic|load-module module-switch-on-connect}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== PipeWire ===&lt;br /&gt;
&lt;br /&gt;
v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。&lt;br /&gt;
&lt;br /&gt;
=== ALSA ===&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluez5 は [[ALSA]] の直接統合を中止し、 [[PulseAudio]] のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従ってください。}}&lt;br /&gt;
&lt;br /&gt;
まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。&lt;br /&gt;
&lt;br /&gt;
次に、 {{AUR|bluez-alsa-git}} をインストールし、 {{ic|bluealsa}} サービスを開始(そして、有効に) し、ユーザーを {{ic|audio}} グループに追加します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します({{ic|&#039;&#039;XX:XX:XX:XX:XX:XX&#039;&#039;}} と {{ic|&#039;&#039;FILE.wav&#039;&#039;}} の部分は置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ aplay -D bluealsa:SRV=org.bluealsa,DEV=&#039;&#039;XX:XX:XX:XX:XX:XX&#039;&#039;,PROFILE=a2dp &#039;&#039;FILE.wav&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
最後に、 {{ic|~/.asoundrc}} に次の行を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.asoundrc|&lt;br /&gt;
defaults.bluealsa {&lt;br /&gt;
    service &amp;quot;org.bluealsa&amp;quot;&lt;br /&gt;
    device &amp;quot;XX:XX:XX:XX:XX:XX&amp;quot;&lt;br /&gt;
    profile &amp;quot;a2dp&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで、 {{ic|bluealsa}} デバイスを使って Bluetooth オーディオデバイスに接続できるようになります。ボリューム管理は {{ic|alsamixer}} とオプション {{ic|-D bluealsa}} を使って通常行われます。&lt;br /&gt;
&lt;br /&gt;
== Bluetooth シリアル ==&lt;br /&gt;
&lt;br /&gt;
Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います:&lt;br /&gt;
&lt;br /&gt;
[[#ペアリング|上記]]で説明したように、 {{ic|bluetoothctl}} を使って Bluetooth デバイスを&#039;&#039;&#039;ペアリング&#039;&#039;&#039;します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|bluez-deprecated-tools}} をインストールします。新しいツールにはない機能があります。&lt;br /&gt;
&lt;br /&gt;
ペアになっているデバイスの MAC アドレスを tty 端末にバインドします:&lt;br /&gt;
&lt;br /&gt;
 # rfcomm bind rfcomm0 &#039;&#039;MAC_address_of_Bluetooth_device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、シリアル通信用に {{ic|/dev/rfcomm0}} を開くことができます:&lt;br /&gt;
&lt;br /&gt;
 $ picocom /dev/rfcomm0 -b 115200&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Replace hciconfig with newer commands.}}&lt;br /&gt;
&lt;br /&gt;
=== 一般的なトラブルシューティング ===&lt;br /&gt;
&lt;br /&gt;
==== デバッグ ====&lt;br /&gt;
&lt;br /&gt;
デバッグするには、最初に {{ic|bluetooth.service}} を[[停止]]します。&lt;br /&gt;
&lt;br /&gt;
そして {{ic|-d}} パラメーターを付けて開始します。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/bluetooth/bluetoothd -n -d&lt;br /&gt;
&lt;br /&gt;
別のオプションとして、 {{ic|btmon}} ツールが有ります。&lt;br /&gt;
&lt;br /&gt;
==== 非推奨の BlueZ ツール ====&lt;br /&gt;
&lt;br /&gt;
8つの BlueZ ツールは[https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=b1eb2c4cd057624312e0412f6c4be000f7fc3617 非推奨となり]、{{Pkg|bluez-utils}} から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。{{Pkg|bluez-deprecated-tools}} パッケージが非推奨となったツールを提供します。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 非推奨のツール&lt;br /&gt;
! あり得る代替&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/gatttool.1.en.html gatttool] || btgatt-client, [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt D-Bus Gatt API]{{Dead link|2023|10|29|status=404}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hciattach.1.en.html hciattach] || btattach&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hciconfig.1.en.html hciconfig] || btmgmt (そして bluetoothctl?)&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez-hcidump/hcidump.1.en.html hcidump] || btmon (そして btsnoop)&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hcitool.1.en.html hcitool] || なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API]{{Dead link|2023|10|29|status=404}} が利用可能&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/rfcomm.1.en.html rfcomm]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API]{{Dead link|2023|10|29|status=404}} の実装?&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/ciptool.1.en.html ciptool]&lt;br /&gt;
|-&lt;br /&gt;
|[https://manpages.debian.org/latest/bluez/sdptool.1.en.html sdptool]&lt;br /&gt;
| なし、機能が、異なる D-Bus オブジェクトに散らばっている模様: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile]{{Dead link|2023|10|29|status=404}}、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising]{{Dead link|2023|10|29|status=404}}、そして [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device]{{Dead link|2023|10|29|status=404}} と [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter]{{Dead link|2023|10|29|status=404}} の UUID の配列。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== サービスの問題 ===&lt;br /&gt;
&lt;br /&gt;
==== systemd: Condition check resulted in Bluetooth service being skipped ====&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} は {{ic|/sys/class/bluetooth}} ディレクトリが存在することのみを要求します。このディレクトリは {{ic|bluetooth}} カーネルモジュールによって作成されるはずです。このカーネルモジュールは、{{ic|systemd-udev}} が動作している Bluetooth ハードウェアデバイスを発見した場合にのみ、{{ic|systemd-udev}} により自動的にロードされます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys/class/bluetooth}} が存在しない場合、{{ic|lsmod}} コマンドを使って、Bluetooth カーネルモジュールがロードされているかどうかを確認してください。Bluetooth デバイスがあるにも関わらずロードされていない場合、[[カーネルモジュール#手動でモジュールを扱う|Bluetooth モジュールをロード]]し、{{ic|bluetooth.service}} を[[再起動]]することで、手動で起動できます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bluetooth}} モジュールをロードする際に、対応するカーネル Bluetooth ドライバもロードする必要があります。{{ic|btusb}} が最も可能性がありますが、{{ic|btrtl,btintel,btbcm,bnep,btusb}} などの可能性もあります。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} の[[ユニットステータス]]を確認して、このサービスが起動しているかどうかを確認してください。&lt;br /&gt;
&lt;br /&gt;
[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853207 Debian Bug report logs - #853207] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} の起動に成功したが、まだ Bluetooth を使えないことがあります (例: {{ic|scan on}} の時に {{ic|bluetoothctl}} が {{ic|org.Bluez.Error.NotReady}} のようなメッセージを発する)。この場合、コンピュータを再起動し、次のことをダブルチェックしてください: {{ic|/sys/class/bluetooth}} ディレクトリが存在するか; {{ic|lsmod}} の出力に正しい Bluetooth モジュールが含まれているか; [[journal]] のログを確認するなど。{{ic|systemd-udev}} は、また手動の変更をせずとも Bluetooth ハードウェアを自動的に認識するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth が suspend-to-idle 中のデバイスを即座に立ち上げてしまう ====&lt;br /&gt;
&lt;br /&gt;
[[サスペンドとハイバネート|suspend-to-idle/S2idle/S0ix/Modern Standby]] する能力のあるシステムにおいては、Bluetooth コントローラがスリープ中も有効化されたままになります。通常、これにより、Bluetooth デバイスが接続されていると、システムが[https://bugzilla.kernel.org/show_bug.cgi?id=200039 スリープに移行した直後にスリープが解除されてしまいます]。&lt;br /&gt;
&lt;br /&gt;
これを防ぐには、スリープに移行する前に Bluetooth を完全に無効化できます。{{Pkg|bluez-utils}} をインストールし、以下のファイルを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/bluetooth-disable-before-sleep.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Disable Bluetooth before going to sleep&lt;br /&gt;
Before=sleep.target&lt;br /&gt;
Before=suspend.target&lt;br /&gt;
Before=hybrid-sleep.target&lt;br /&gt;
Before=suspend-then-hibernate.target&lt;br /&gt;
StopWhenUnneeded=yes&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/bin/bluetoothctl power off&lt;br /&gt;
ExecStop=/usr/bin/bluetoothctl power on&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=sleep.target&lt;br /&gt;
WantedBy=suspend.target&lt;br /&gt;
WantedBy=hybrid-sleep.target&lt;br /&gt;
WantedBy=suspend-then-hibernate.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このサービスを[[有効化]]し、スリープに移行した時に Bluetooth デバイスが切断されることや、スリープからの復帰時に Bluetooth が再び接続されることを確認してください。&lt;br /&gt;
&lt;br /&gt;
この回避策を使用すると、[[#サスペンドからの復帰|Bluetooth マウス/キーボードを使ってシステムをスリープから復帰させること]]ができなくなります。&lt;br /&gt;
&lt;br /&gt;
==== ヘッドレス/サーバのシステムでログアウト後に Bluetooth がオフになる ====&lt;br /&gt;
&lt;br /&gt;
様々な原因が考えられます:&lt;br /&gt;
&lt;br /&gt;
* [[PulseAudio]] と [[PipeWire]] は両方ともデフォルトでユーザサービスとして動作します。よって、最後のセッションが終了するとこれらのサービスは終了されます。この問題を解決するには、対象のユーザに対して [[systemd/ユーザー#systemd のユーザーインスタンスを自動起動|Lingering (残留)]] を有効化してください。&lt;br /&gt;
* さらに、[[WirePlumber]] を [[PipeWire]] と共に実行している場合 (これはよくある環境です)、WirePlumber は &amp;quot;logind-monitor&amp;quot; を実行します。これは、Bluetooth をログイン時に有効化し、ログアウト時に無効化します。問題の解決方法は [[WirePlumber#ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アダプタの問題 ===&lt;br /&gt;
&lt;br /&gt;
==== hcitool scan: Device not found ====&lt;br /&gt;
&lt;br /&gt;
* 一部のラップトップ (例: Dell Studio 15、Lenovo Thinkpad X1) では、Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/udev/hid2hci&lt;br /&gt;
&lt;br /&gt;
* デバイスが表示されず、かつマシンに Windows オペレーティングシステムがある場合、Windows から bluetooth アダプターを有効にして見てください。&lt;br /&gt;
&lt;br /&gt;
* 場合によっては次のコマンドで問題が解決するかもしれません:&lt;br /&gt;
&lt;br /&gt;
 # bluetoothctl power on&lt;br /&gt;
&lt;br /&gt;
==== bluetoothctl: No default controller available ====&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード Bluetooth コントローラにはバグがあります。バグがこの問題の原因であるか調べるには、{{ic|journalctl {{!}} grep hci}} を実行してください。このコマンドの出力に &amp;quot;command tx timeout&amp;quot; や &amp;quot;Reading Intel version command failed&amp;quot; のようなエントリが存在する場合、PC の電源を切り、電源ケーブルを物理的に外して数秒間放置してください。これにより、コントローラにファームウェアを再ロードさせます (通常の再起動では再ロードしません)。[https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1859592 こちら]のバグレポートを参照してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが [[rfkill]] によってブロックされていないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
また、一部の Intel カード (8260 など) は Bluetooth サービスによって正しく認識されないかもしれません。{{Pkg|bluez-utils}} の代わりに非推奨の {{Pkg|bluez-deprecated-tools}} を使うことでこの問題が解決したというケースが報告されています。&lt;br /&gt;
&lt;br /&gt;
また、これは省電力機能が原因かもしれません。その場合、{{ic|1=btusb.enable_autosuspend=n}} [[カーネルパラメータ#設定|カーネルパラメータ]]により解決できる可能性があります。[https://bugzilla.redhat.com/show_bug.cgi?id=1573562 Red Hat Bugzilla – Bug 1573562] も参照してください。&lt;br /&gt;
&lt;br /&gt;
時々、{{ic|btusb}} をオプション無しでアンロード・ロードすればコントローラを元に戻せることがあります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r btusb&lt;br /&gt;
 # modprobe btusb&lt;br /&gt;
&lt;br /&gt;
また、ドングルが [[#CSR ドングル 0a12:0001|CSR クローン]]である場合にもこの問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
==== rfkill unblock: Do not unblock ====&lt;br /&gt;
&lt;br /&gt;
デバイスがソフトブロックされていて [[ConnMan]] を動作させている場合、次を試してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 $ connmanctl enable bluetooth&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth USB ドングル ====&lt;br /&gt;
&lt;br /&gt;
USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|journalctl -f}} を root として実行する(もしくは {{ic|/var/log/messages.log}} を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci を見てください)。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
Feb 20 15:00:24 hostname kernel: [ 2661.349823] usb 4-1: new full-speed USB device number 3 using uhci_hcd&lt;br /&gt;
Feb 20 15:00:24 hostname bluetoothd[4568]: HCI dev 0 registered&lt;br /&gt;
Feb 20 15:00:24 hostname bluetoothd[4568]: Listening for HCI events on hci0&lt;br /&gt;
Feb 20 15:00:25 hostname bluetoothd[4568]: HCI dev 0 up&lt;br /&gt;
Feb 20 15:00:25 hostname bluetoothd[4568]: Adapter /org/bluez/4568/hci0 has been enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最初の2行しか表示されていなかった場合、デバイスは見つかっていますが、そのデバイスを立ち上げる必要があります。&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|# btmgmt|&lt;br /&gt;
[mgmt]# info&lt;br /&gt;
Index list with 1 item&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr &lt;br /&gt;
	&#039;&#039;&#039;current settings:&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn &lt;br /&gt;
	name Mozart&lt;br /&gt;
	short name &lt;br /&gt;
&lt;br /&gt;
[mgmt]# select hci0&lt;br /&gt;
Selected index 0&lt;br /&gt;
&lt;br /&gt;
[hci0]# power up&lt;br /&gt;
hci0 Set Powered complete, settings: &#039;&#039;&#039;powered&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
&lt;br /&gt;
[hci0]# info&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr &lt;br /&gt;
	&#039;&#039;&#039;current settings: powered&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
または&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[bluetooth]# show&lt;br /&gt;
Controller 00:1A:7D:DA:71:10 (public)&lt;br /&gt;
	Name: Mozart&lt;br /&gt;
	Alias: Mozart&lt;br /&gt;
	Class: 0x0000095c&lt;br /&gt;
	&#039;&#039;&#039;Powered: no&#039;&#039;&#039;&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
[CHG] Controller 00:1A:7D:DA:71:10 Class: 0x001c0104&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller 00:1A:7D:DA:71:10 &#039;&#039;&#039;Powered: yes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# show&lt;br /&gt;
Controller 00:1A:7D:DA:71:10 (public)&lt;br /&gt;
	Name: Mozart&lt;br /&gt;
	Alias: Mozart&lt;br /&gt;
	Class: 0x001c0104&lt;br /&gt;
	&#039;&#039;&#039;Powered: yes&#039;&#039;&#039;&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://www.bluetooth.com/specifications/assigned-numbers/host-controller-interface/ 公式の仕様表]に従って、Bluetooth のバージョンが HCI のバージョンにマップされていることを確認できます。例えば、先の出力では、HCI &#039;&#039;&#039;version 6&#039;&#039;&#039; が Bluetooth version 4.0 です。&lt;br /&gt;
&lt;br /&gt;
デバイスが検出されているか確認するために {{ic|bluez-utils}} に含まれている {{ic|hcitool}} を使うことができます。次のコマンドで利用可能なデバイスとその識別子・MAC アドレスのリストを表示することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ btmgmt info|&lt;br /&gt;
Index list with 1 item&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 &#039;&#039;&#039;version 6&#039;&#039;&#039; manufacturer 10 class 0x1c0104&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr&lt;br /&gt;
	current settings: powered connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
デバイスに関するもっと詳細な情報は、非推奨の {{ic|hciconfig}} を使うことで取得できます。({{AUR|bluez-utils-compat}})&lt;br /&gt;
&lt;br /&gt;
{{hc|$ hciconfig -a hci0|&lt;br /&gt;
hci0:   Type: USB&lt;br /&gt;
        BD Address: 00:1B:DC:0F:DB:40 ACL MTU: 310:10 SCO MTU: 64:8&lt;br /&gt;
        UP RUNNING PSCAN ISCAN&lt;br /&gt;
        RX bytes:1226 acl:0 sco:0 events:27 errors:0&lt;br /&gt;
        TX bytes:351 acl:0 sco:0 commands:26 errors:0&lt;br /&gt;
        Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80&lt;br /&gt;
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3&lt;br /&gt;
        Link policy: RSWITCH HOLD SNIFF PARK&lt;br /&gt;
        Link mode: SLAVE ACCEPT&lt;br /&gt;
        Name: &#039;BlueZ (0)&#039;&lt;br /&gt;
        Class: 0x000100&lt;br /&gt;
        Service Classes: Unspecified&lt;br /&gt;
        Device Class: Computer, Uncategorized&lt;br /&gt;
        HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c&lt;br /&gt;
        Manufacturer: Cambridge Silicon Radio (10)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== ドングルから短距離にいるときにオーディオデバイスがおかしくなる =====&lt;br /&gt;
&lt;br /&gt;
他のデバイスと同一の USB ホストを共有している場合、[https://bbs.archlinux.org/viewtopic.php?pid=1440161#p1440161 オーディオデバイスとの通信に干渉] する可能性があります。オーディオデバイスがバスに接続されている唯一のデバイスであることを確認してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 004: ID 048d:1345 Integrated Technology Express, Inc. Multi Cardreader&lt;br /&gt;
Bus 001 Device 003: ID 0424:a700 Standard Microsystems Corp. 2 Port Hub&lt;br /&gt;
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== CSR ドングル 0a12:0001 =====&lt;br /&gt;
&lt;br /&gt;
デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)}} にはリグレッションのバグがあり、現在、カーネルバージョン 5.17 及び &amp;lt; 6.0 でしか動作しません。詳細は、[https://bugzilla.kernel.org/show_bug.cgi?id=60824 Kernel Bug 60824] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== Logitech Bluetooth USB ドングル ====&lt;br /&gt;
&lt;br /&gt;
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。&lt;br /&gt;
&lt;br /&gt;
USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます ([https://ubuntuforums.org/showthread.php?t=1332197 議論])。&lt;br /&gt;
&lt;br /&gt;
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。&lt;br /&gt;
&lt;br /&gt;
==== Foxconn / Hon Hai / Lite-On の Broadcom デバイス ====&lt;br /&gt;
&lt;br /&gt;
一部のデバイスでは、起動時にファームウェアを書き込む必要があります。&lt;br /&gt;
&lt;br /&gt;
一部のファームウェアは、[[AUR]] で [https://aur.archlinux.org/packages?K=broadcom broadcom] と検索すると入手できます。特出すべきパッケージは {{AUR|broadcom-bt-firmware}} です。これは、[https://github.com/winterheart/broadcom-bt-firmware/blob/master/DEVICES.md 様々なカード]用のファイルを提供します。&lt;br /&gt;
&lt;br /&gt;
または、[https://github.com/jessesung/hex2hcd hex2hcd] ({{Pkg|bluez-utils}} でインストールされます) を使ってファームウェアを Microsoft Windows の &#039;&#039;.hex&#039;&#039; ファイルから &#039;&#039;.hcd&#039;&#039; ファイルに変換することもできます。&lt;br /&gt;
&lt;br /&gt;
正しい &#039;&#039;.hex&#039;&#039; ファイルを取得するために、&#039;&#039;lsusb&#039;&#039; でデバイスの vendor:product コードを検索してください。例:&lt;br /&gt;
&lt;br /&gt;
 Bus 002 Device 004: ID &#039;&#039;&#039;04ca:2006&#039;&#039;&#039; Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 Bus 004 Device 004: Id &#039;&#039;&#039;0489:e031&#039;&#039;&#039; Foxconn / Hon Hai&lt;br /&gt;
&lt;br /&gt;
もしくは、Windows (仮想マシンでもかまいません) を起動して Device Manager ユーティリティからファームウェアの名前を取得してください。デバイスのモデルを知りたいのに &#039;&#039;lsusb&#039;&#039; で表示されない場合、&#039;&#039;lsusb -v&#039;&#039; の {{ic|iProduct}} でわかることがあります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;.hex&#039;&#039; ファイルはダウンロードした Windows ドライバーから抽出することができます。Windows を実行する必要はありません。適切なドライバーをダウンロードしてください (例えば、[http://www.fujitsupc.com/downloads/mobile/BLUETOOTH_WIDCOMM_V6.5.0.3100_WIN7-32_FPC46-1771-01.EXE Bluetooth Widcomm]{{Dead link|2023|09|16|status=domain name not resolved}})。フォーマットにも依りますが、ファイルの展開には{{Pkg|unrar}} か {{Pkg|cabextract}} が必要である場合があります。多数の &#039;&#039;.hex&#039;&#039; ファイルの中から必要なファイルを見つけるには、{{ic|Win32/bcbtums-win7x86-brcm.inf}} ファイルの中身を確認して {{ic|[RAMUSB&#039;&#039;&#039;E031&#039;&#039;&#039;.CopyList]}} を検索してください。{{ic|E031}} はあなたの使っているデバイスの product コード (大文字) に置き換えて下さい (&#039;&#039;lsusb&#039;&#039; で確認できる2番目の16進数)。その下に、必要な &#039;&#039;.hex&#039;&#039; ファイルの名前が書かれているはずです。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;.hcd&#039;&#039; ファイルを手に入れたら、{{ic|/lib/firmware/brcm/BCM.hcd}} にコピーしてください - このファイル名は [[dmesg]] からわかります。あなたのマシンでは異なっている可能性があるため &#039;&#039;dmesg&#039;&#039; の出力で確認してください。そして &#039;&#039;btusb&#039;&#039; モジュールをリロードしてください:&lt;br /&gt;
&lt;br /&gt;
 # rmmod btusb&lt;br /&gt;
 # modprobe btusb&lt;br /&gt;
&lt;br /&gt;
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。&lt;br /&gt;
&lt;br /&gt;
==== Intel の複合 WiFi と Bluetooth カード ====&lt;br /&gt;
&lt;br /&gt;
[[ネットワーク設定/ワイヤレス#Bluetooth の共存]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== Windows とのデュアルブート環境における Mediatek MT7921 や MT7961 ====&lt;br /&gt;
&lt;br /&gt;
デュアルブートシステムでは、Bluetooth のファームウェアバージョンが Windows と Linux とで異なる場合、Windows を起動した後に Bluetooth アダプタが動作しなくなります。&lt;br /&gt;
&lt;br /&gt;
これを防ぐ最も良い方法は、各 OS 用の Bluetooth ドライバ (特にファームウェア) を最新にすることです。&lt;br /&gt;
&lt;br /&gt;
Windows 用の最新バージョンのドライバ (またはファームウェア) を見つけられない場合、最新のファームウェアファイル {{ic|/usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz}} を Arch Linux からコピーし、Windows へ展開することができます (例えば、{{ic|C:\WINDOWS\system32\DRIVERS\}}。Windows でのファームウェアファイルへのパスはデバイスマネージャから確認できます)。&lt;br /&gt;
&lt;br /&gt;
==== サスペンド/復帰後にアダプタが消える ====&lt;br /&gt;
&lt;br /&gt;
まず、アダプタのベンダーと製品 ID を見つけてください。例:&lt;br /&gt;
&lt;br /&gt;
First, find vendor and product ID of the adapter. For example:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb -tv|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M&lt;br /&gt;
    ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
    ...&lt;br /&gt;
    |__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M&lt;br /&gt;
        ID 8087:0025 Intel Corp. &lt;br /&gt;
    |__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M&lt;br /&gt;
        ID 8087:0025 Intel Corp. &lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。&lt;br /&gt;
&lt;br /&gt;
次に、 {{pkg|usb_modeswitch}} を使用してアダプタをリセットします:&lt;br /&gt;
&lt;br /&gt;
 # usb_modeswitch -R -v &#039;&#039;vendor_ID&#039;&#039; -p &#039;&#039;product_ID&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ペアリングと接続の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== コンピュータが表示されない ====&lt;br /&gt;
&lt;br /&gt;
携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
 # bluetoothctl discoverable on&lt;br /&gt;
&lt;br /&gt;
discoverable モードがオンになっていることを確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl show|&lt;br /&gt;
	Powered: yes&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/bluetooth/main.conf}} の {{ic|PairableTimeout}} と {{ic|DiscoverableTimeout}} を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
まだコンピュータが表示されない場合、以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 # Default device class. Only the major and minor device class bits are&lt;br /&gt;
 # considered.&lt;br /&gt;
 #Class = 0x000100 # Computer Type (from default config)&lt;br /&gt;
 Class = 0x100100 # (Object-Transfer Service &amp;amp; Computer Type)&lt;br /&gt;
&lt;br /&gt;
{{Note|場合によっては、{{ic|main.conf}} 内の {{ic|Class}} はデバイスの初期化後に上書きされます。なので、{{ic|hciconfig hci0 class 100100}} のようにクラスを直接設定してください。}}&lt;br /&gt;
&lt;br /&gt;
あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。LG TV(そして、一部の他の機器)はオーディオデバイスから発見可能です。なので、{{ic|000414}} (soundbar クラス)を使用することでそのようなデバイスを発見できるようにできます。&lt;br /&gt;
&lt;br /&gt;
Bluetooth デバイス/サービスのクラスを生成するには https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html を見てください。&lt;br /&gt;
&lt;br /&gt;
==== デバイスを接続した数秒後に切断してしまう ====&lt;br /&gt;
&lt;br /&gt;
デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合:&lt;br /&gt;
&lt;br /&gt;
 bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)&lt;br /&gt;
 bluetoothd: connect error: Connection refused (111)&lt;br /&gt;
&lt;br /&gt;
おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (例: Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。この問題を解決するには [[#デュアルブートペアリング]] の指示に従ってください。&lt;br /&gt;
&lt;br /&gt;
==== スキャンしてもデバイスが表示されない ====&lt;br /&gt;
&lt;br /&gt;
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: [[Logitech MX Master]])。{{ic|transport le}} を使ってスキャンすることができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[bluetooth]# menu scan&lt;br /&gt;
[bluetooth]# transport le&lt;br /&gt;
[bluetooth]# back&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
[bluetooth]# devices&lt;br /&gt;
...&lt;br /&gt;
Device XX:XX:XX:XX:XX:XX DA V2 X &amp;lt;---- 低消費電力なデバイス&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
もう一つの方法は、{{aur|bluez-utils-compat}} をインストールし、{{ic|bluetooth.service}} を[[開始]]し、以下を実行することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[NEW] Controller (MAC) myhostname [default]&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
[CHG] Controller (MAC) Class: 0x0c010c&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller (MAC) Powered: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
[CHG] Controller (MAC) Discovering: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のターミナルで:&lt;br /&gt;
&lt;br /&gt;
 # hcitool lescan&lt;br /&gt;
&lt;br /&gt;
デバイスが表示されるまで待機してから hcitool を {{ic|Ctrl+c}} で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。&lt;br /&gt;
&lt;br /&gt;
==== Intel Corp. AX200 Bluetooth で BLE デバイスが見つからない ====&lt;br /&gt;
&lt;br /&gt;
どうやら、このデバイスでは BLE のパッシブスキャンが壊れているようです。詳細は[https://community.intel.com/t5/Wireless/AX200-Passive-BLE-scan-linux/m-p/1227456 上流のバグレポート]を見てください。&lt;br /&gt;
&lt;br /&gt;
==== スリープ後に再接続できない ====&lt;br /&gt;
&lt;br /&gt;
スリープ後や、コンピュータがスリープから復帰した後に、デバイスが自動的に再接続されないことがあります。&lt;br /&gt;
&lt;br /&gt;
この時、ログに以下のエラーが記録されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
bluetoothd[487]: Authentication attempt without agent&lt;br /&gt;
bluetoothd[487]: Access denied: org.bluez.Error.Rejected&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、デバイスが &#039;&#039;trusted&#039;&#039; としてマークされていないことが原因です。[[#ペアリング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== デバイス固有の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth マウスのラグ / 接続断 / 応答なし ====&lt;br /&gt;
&lt;br /&gt;
[[Bluetooth マウス#トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== オーディオデバイスが br-connection-profile-unavailable で接続に失敗する ====&lt;br /&gt;
&lt;br /&gt;
PipeWire (pulseaudio-bluetooth ではない) が使用されているが、PipeWire のインスタンスが実行されていない場合、bluetooth オーディオデバイスは接続に失敗します。PipeWire デーモンを開始するには、{{ic|pipewire.service}} [[ユーザーユニット]]を[[開始]]するか、何らかの音声を再生してください。その後、オーディオデバイスをもう一度接続してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ヘッドホンとマウスの干渉 ====&lt;br /&gt;
&lt;br /&gt;
Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい:&lt;br /&gt;
&lt;br /&gt;
 # hciconfig hci0 lm ACCEPT,MASTER&lt;br /&gt;
 # hciconfig hci0 lp HOLD,SNIFF,PARK&lt;br /&gt;
&lt;br /&gt;
==== TP-LINK UB400 と Xbox のコントローラが接続/切断を繰り返す ====&lt;br /&gt;
&lt;br /&gt;
以下の設定を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/bluetooth/main.conf|2=&lt;br /&gt;
...&lt;br /&gt;
[General]&lt;br /&gt;
JustWorksRepairing = always&lt;br /&gt;
FastConnectable = true&lt;br /&gt;
Class = 0x000100&lt;br /&gt;
...&lt;br /&gt;
[GATT]&lt;br /&gt;
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55&lt;br /&gt;
AutoEnable=true&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、{{ic|bluetooth.service}} を[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
関連する [https://github.com/atar-axis/xpadneo/issues/166 xpadneo に関する議論]を見ることができますが、xpadneo のドライバは必要ありません。&lt;br /&gt;
&lt;br /&gt;
=== ファイル転送の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== gnome-bluetooth ====&lt;br /&gt;
&lt;br /&gt;
bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Bluetooth OBEX start failed: Invalid path&lt;br /&gt;
 Bluetooth FTP start failed: Invalid path&lt;br /&gt;
&lt;br /&gt;
[[XDG ユーザーディレクトリ]]が存在することを確認してください。&lt;br /&gt;
&lt;br /&gt;
==== シンボリックリンクのせいで、転送されたファイルを受信できない ====&lt;br /&gt;
&lt;br /&gt;
有効な Bluetooth 接続でファイルの受信に失敗する場合、問題はファイルの転送パス内のシンボリックリンクである場合があります。ジャーナルに以下のようなログが現れます:&lt;br /&gt;
&lt;br /&gt;
 Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)&lt;br /&gt;
&lt;br /&gt;
エラーメッセージに表示されれたパス内にシンボリックリンクが含まれている場合、obexd はデフォルトで[https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/obexd/plugins/filesystem.c#n90 それを拒否します]。この挙動は、[[ドロップインファイル]]を {{ic|obex.service}} [[systemd/ユーザー|ユーザサービス]]に対して使うことにより初期化時に上書きできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/obex.service.d/10-symlink.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/lib/bluetooth/obexd --symlinks&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、ユーザの &#039;&#039;systemd&#039;&#039; マネージャの設定を[[リロード]]し、{{ic|obex.service}} ユーザユニットを[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://averylarsen.com/2019/12/20/keeping-bluetooth-devices-paired-between-linux-and-windows/ Keeping Bluetooth devices paired between Linux and Windows]&lt;br /&gt;
* [https://nullroute.eu.org/~grawity/bluetooth-key-sharing.html Bluetooth link keys on dual-boot systems]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bluetooth|2023-11-03|791392}}&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bluetooth&amp;diff=41193</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bluetooth&amp;diff=41193"/>
		<updated>2025-12-06T13:06:27Z</updated>

		<summary type="html">&lt;p&gt;N: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bluetooth]]&lt;br /&gt;
[[de:Bluetooth]]&lt;br /&gt;
[[en:Bluetooth]]&lt;br /&gt;
[[es:Bluetooth]]&lt;br /&gt;
[[ru:Bluetooth]]&lt;br /&gt;
[[zh-hans:Bluetooth]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bluetooth マウス}}&lt;br /&gt;
{{Related|Bluetooth キーボード}}&lt;br /&gt;
{{Related|Bluetooth ヘッドセット}}&lt;br /&gt;
{{Related|Blueman}}&lt;br /&gt;
{{Related|ObexFTP}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Wikipedia:ja:Bluetooth|Bluetooth]] は携帯電話やコンピュータなどの電子デバイス用の近距離無線通信規格です。Linux においては、Bluetooth プロトコルスタックの実装として [http://www.bluez.org/ BlueZ] が標準的に使われています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
# Bluetooth プロトコロスタックを提供する、{{Pkg|bluez}} パッケージを[[インストール]]します。&lt;br /&gt;
# {{ic|bluetoothctl}} ユーティリティを提供する、{{Pkg|bluez-utils}} を[[インストール]]します。{{Pkg|bluez-deprecated-tools}} を[[インストール]]して、[[#非推奨の BlueZ ツール|非推奨の BlueZ ツール]] を追加します。&lt;br /&gt;
# 一般的な Bluetooth ドライバは、{{ic|btusb}} カーネルモジュールです。このモジュールがロードされているかどうかを[[カーネルモジュール#情報を取得|確認]]してください。もしロードされていなければ、[[カーネルモジュール#手動でモジュールを扱う|モジュールをロード]]してください。&lt;br /&gt;
# {{ic|bluetooth.service}} を[[起動/有効化]]します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* デフォルトでは bluetooth デーモンは {{ic|lp}} [[ユーザーとグループ#システムグループ|グループ]]のメンバーのユーザーだけに bnep0 デバイスを提供します。bluetooth テザリングに接続するときはユーザーをグループに追加しておいてください。必要なグループは {{ic|/etc/dbus-1/system.d/bluetooth.conf}} ファイルで変更することができます。&lt;br /&gt;
* Bluetooth アダプターには Wi-Fi カードがバンドルされているものもあります (例: [https://www.intel.com/content/www/us/en/wireless-products/centrino-advanced-n-6235.html Intel Centrino]{{Dead link|2023|09|16|status=404}})。これらの Bluetooth アダプターをカーネルから見えるようにするには、まず Wi-Fi カードを有効にする必要があります (大体はラップトップ上のキーボードショートカットを使う)。&lt;br /&gt;
* Bluetooth カードによってはネットワークアダプタと衝突することがあります (例: Broadcom)。したがって、ネットワークサービスを起動する前に Bluetooth デバイスを接続するようにしてください。&lt;br /&gt;
* hcitool や hciconfig などのツールは上流では非推奨となっており、{{Pkg|bluez-utils}} にはもはや含まれていません。アップデートされないことが決まっているため、スクリプトの中で使用している場合は使わないように書き換えることを推奨します。それでも使いたい場合は {{Pkg|bluez-deprecated-tools}} をインストールしてください。詳しい情報は {{Bug|53110}} や [https://lore.kernel.org/linux-bluetooth/20170104133401.3636-1-luiz.dentz@gmail.com/ Bluez メーリングリスト] を参照。&lt;br /&gt;
* 2024年から、{{Pkg|bluez-obex}}と{{Pkg|bluez-mesh}}は{{Pkg|bluez}}から分離されました。よって、Bluetooth越しにファイルを転送したい場合は、{{Pkg|bluez-obex}}をインストールし、ユーザーサービス {{ic|obex.service}} を有効化する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
=== フロントエンド ===&lt;br /&gt;
&lt;br /&gt;
==== コンソール ====&lt;br /&gt;
&lt;br /&gt;
* {{App|bluetoothctl|シェルからデバイスをペアリングすることは、最も単純で信頼性の高いオプションの一つです。|http://www.bluez.org/|{{Pkg|bluez-utils}}}}&lt;br /&gt;
* {{App|bluetuith|ターミナルユーザインターフェイスによる Bluetooth マネージャを提供します。OBEX ファイル転送とマウスのサポート付きで、デバイス/アダプタを簡単に管理できます。|https://www.github.com/darkhz/bluetuith|{{AUR|bluetuith}}}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|bluetoothctl コマンドを自動化するには、{{ic|echo -e &amp;quot;&#039;&#039;command1&#039;&#039;\n&#039;&#039;command2&#039;&#039;\n&amp;quot; {{!}} bluetoothctl}} または {{ic|bluetoothctl -- &#039;&#039;command&#039;&#039;}} を使用します。}}&lt;br /&gt;
&lt;br /&gt;
==== グラフィカル ====&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Bluetooth をカスタマイズするためのグラフィカルインターフェイスが利用可能です。&lt;br /&gt;
&lt;br /&gt;
* {{App|GNOME Bluetooth|[[GNOME]] の Bluetooth ツール。&lt;br /&gt;
** {{Pkg|gnome-bluetooth-3.0}} バックエンドを提供 ({{Pkg|gnome-bluetooth}} はレガシーです)&lt;br /&gt;
** {{Pkg|gnome-shell}} ステータスモニターアプレットを提供&lt;br /&gt;
** {{Pkg|gnome-control-center}} は設定用のフロントエンド GUI を提供しており、アクティビティ概要で  Bluetooth と入力するか、 {{ic|gnome-control-center bluetooth}} コマンドでアクセスすることができます。&lt;br /&gt;
** また、{{ic|bluetooth-sendto}} コマンドを直接起動して、リモートデバイスにファイルを送信することも可能です。&lt;br /&gt;
** {{AUR|nautilus-bluetooth}} は Nautilus の右クリックメニューに &amp;quot;Bluetoothで送信&amp;quot; エントリを追加します。&lt;br /&gt;
** ファイルを受信するには、Bluetooth 設定パネルを開きます。Bluetooth パネルが開いている間のみ受信できます。&lt;br /&gt;
** Thunar のファイルプロパティメニューの &#039;&#039;送信先&#039;&#039; メニューに Bluetooth エントリを追加するには、説明 [https://docs.xfce.org/xfce/thunar/send-to ここ] を参照してください。(設定が必要なコマンドは {{ic|bluetooth-sendto %F}} です)&lt;br /&gt;
|https://wiki.gnome.org/Projects/GnomeBluetooth|}}&lt;br /&gt;
* {{App|Bluedevil|[[KDE]] の Bluetooth ツール。 Dolphin やシステムトレイに Bluetooth のアイコンが表示されていない場合は、システムトレイオプションで有効にするか、ウィジェットを追加してください。アイコンをクリックすることで、Bluedevil の設定や Bluetooth デバイスの検出が可能です。KDE システム設定からもインターフェースが利用できます。|https://invent.kde.org/plasma/bluedevil|{{Pkg|bluedevil}}}}&lt;br /&gt;
* {{App|Blueberry|GNOME Bluetooth から Linux Mint でスピンオフした &#039;&#039;Blueberry&#039;&#039; は全てのデスクトップ環境で動作します。Obex Object Push によるファイル受信をサポートしていません。|https://github.com/linuxmint/blueberry|{{Pkg|blueberry}}}}&lt;br /&gt;
* {{App|[[Blueman]]|フル機能の Bluetooth マネージャー|https://github.com/blueman-project/blueman|{{Pkg|blueman}}}}&lt;br /&gt;
* {{App|[[ObexFTP]]|OBEX 対応のデバイスとの間でファイルを転送するツール。|http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp|{{AUR|obexftp}}}}&lt;br /&gt;
&lt;br /&gt;
== ペアリング ==&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluetooth デバイスを使用する前に、[[rfkill]] でブロックされていないことを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
このセクションでは、&#039;&#039;bluetoothctl&#039;&#039; CLI を使って &#039;&#039;bluez5&#039;&#039; を直接設定する方法を説明しています。これは、代替のフロントエンドツール(例えば GNOME Bluetooth)を使用している場合は必要ないかもしれません。&lt;br /&gt;
&lt;br /&gt;
正確な手順は、利用するデバイスとその入力機能によります。以下は {{ic|bluetoothctl}} を使ってデバイスをペアリングする一般的な説明です。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetoothctl}} 対話コマンドを実行してください。{{ic|help}} と入力することで利用できるコマンドのリストを表示できます。&lt;br /&gt;
&lt;br /&gt;
# (任意) {{ic|select &#039;&#039;MAC Address&#039;&#039;}} と入力してデフォルトのコントローラを選択してください。&lt;br /&gt;
# (任意) デバイスがオフになっている場合、{{ic|power on}} と入力してコントローラへの電源供給をオンにしてください。デバイスはデフォルトでオンになっています ([[#アダプタのデフォルト電源状態]])。&lt;br /&gt;
# {{ic|devices}} と入力して、ペアリングしたいデバイスの MAC アドレスを取得してください。&lt;br /&gt;
# デバイスが表示されないときは {{ic|scan on}} コマンドでデバイス検出モードにしてください。&lt;br /&gt;
# {{ic|agent on}} でエージェントをオンにするか、特定のエージェントを選択してください: {{ic|agent}} の後にタブキーを2回押すと、利用可能なエージェントのリストが表示されるはずです。Bluetooth エージェントとは、Bluetooth の &#039;ペアリングコード&#039; を管理するもののことです。エージェントは、&#039;ペアリングコード&#039;の受信に応答したり、&#039;ペアリングコード&#039;を送信したりできます。ほとんどの場合、{{ic|default-agent}} を使うのが適切なはずです。[https://askubuntu.com/questions/763939/bluetoothctl-what-is-a-bluetooth-agent]&lt;br /&gt;
# {{ic|pair &#039;&#039;MAC Address&#039;&#039;}} と入力することでペアリングを実行します (タブ補完が使えます)。&lt;br /&gt;
# PIN がないデバイスを使う場合は、手動でデバイスを信頼する必要があるかもしれません。{{ic|trust &#039;&#039;MAC Address&#039;&#039;}} と入力してこれを行なって下さい。デバイスを信頼するには {{ic|trust &#039;&#039;MAC_address&#039;&#039;}} と入力してください。&lt;br /&gt;
# {{ic|connect &#039;&#039;MAC_address&#039;&#039;}} を使って接続を確立してください。&lt;br /&gt;
&lt;br /&gt;
セッションの例は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ bluetoothctl|&lt;br /&gt;
[NEW] Controller 00:10:20:30:40:50 &#039;&#039;hostname&#039;&#039; [default]&lt;br /&gt;
[bluetooth]# agent KeyboardOnly&lt;br /&gt;
Agent registered&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# default-agent&lt;br /&gt;
Default agent request successful&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller 00:10:20:30:40:50 Powered: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
[CHG] Controller 00:10:20:30:40:50 Discovering: yes&lt;br /&gt;
[NEW] Device 00:12:34:56:78:90 &#039;&#039;device name&#039;&#039;&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# pair 00:12:34:56:78:90&lt;br /&gt;
Attempting to pair with 00:12:34:56:78:90&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: no&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
Request PIN code&lt;br /&gt;
[agent] Enter PIN code: 1234&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: no&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# connect 00:12:34:56:78:90&lt;br /&gt;
Attempting to connect to 00:12:34:56:78:90&lt;br /&gt;
[CHG] Device 00:12:34:56:78:90 Connected: yes&lt;br /&gt;
Connection successful&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== デュアルブートペアリング ===&lt;br /&gt;
&lt;br /&gt;
デュアルブート環境でデバイスをペアリングするには、Linux の方でペアリングキーを変更して Windows または macOS で使用されているペアリングキーと同じにする必要があります。&lt;br /&gt;
&lt;br /&gt;
このページでは、これを手動で行う方法のみを説明しています。この手順を自動化するには、[https://github.com/x2es/bt-dualboot bt-dualboot プロジェクト]や関連するリポジトリを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 設定方法 ====&lt;br /&gt;
&lt;br /&gt;
これを行うには、まず Arch Linux 上でデバイスのペアリングを行います。その後、もう一方の OS を再起動し、デバイスをペアリングします。ここでペアリング・キーを取り出す必要がありますが、まず Bluetooth デバイスの電源を切り、接続を試みないようにします。&lt;br /&gt;
&lt;br /&gt;
{{Note|([[Logitech MX Master]] や Logitech 604 Lightspeed などの) 一部の Logitech デバイスは、デバイスが新しいシステムとペアリングするたびに MAC アドレスの値を1つ増加させます。プロセスの最後にこれに対処するために、このケースに該当するかどうかを確認する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
==== Windows の場合 ====&lt;br /&gt;
&lt;br /&gt;
===== Windows での展開 =====&lt;br /&gt;
&lt;br /&gt;
まず、Windows を起動してください。&lt;br /&gt;
&lt;br /&gt;
リンクキーを含むレジストリキーは、[https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/local-accounts#system SYSTEM アカウント]でしかアクセスできないため、ログインすることができません。そのため、{{ic|regedit.exe}} を {{ic|SYSTEM}} として実行するには、Windows Sysinternals 公式サイトにある Microsoft の [https://docs.microsoft.com/en-us/sysinternals/downloads/psexec PsExec] ツールが必要になります。&lt;br /&gt;
&lt;br /&gt;
[https://download.sysinternals.com/files/PSTools.zip PsTools] をダウンロードし、{{ic|PsExec64.exe}} を解凍します。&lt;br /&gt;
&lt;br /&gt;
[https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands#command-shell-overview コマンドシェル] の管理者インスタンスで、解凍した EXE の場所からレジストリエディタを起動してください:&lt;br /&gt;
&lt;br /&gt;
 .\PsExec64.exe -s -i regedit.exe&lt;br /&gt;
&lt;br /&gt;
レジストリエディタで、以下のレジストリキーに移動します:&lt;br /&gt;
&lt;br /&gt;
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
&lt;br /&gt;
このキーの中に各 Bluetooth アダプターの MAC アドレス別のキーがあります。複数のキーがあり、どれを使えばいいかわからない場合は、[https://www.addictivetips.com/windows-tips/find-bluetooth-mac-address-windows-10/ このガイド]に従って、目的の Bluetooth アダプタの MAC アドレスを検索してください。&lt;br /&gt;
&lt;br /&gt;
目的のデバイスアダプタキーの中に、ペアリングされたデバイスのそれぞれに対してキーが、MAC アドレスと関連付けられて存在しています。&lt;br /&gt;
&lt;br /&gt;
インストール間で共有したい各ペアデバイスについて、キー全体を右クリックし、&#039;&#039;.reg&#039;&#039; ファイルとしてエクスポートしてください。これはテキストファイルで、このファイルからキーをコピーできます。&lt;br /&gt;
&lt;br /&gt;
このファイルにバイナリキーが1つだけ存在する場合、Bluetooth 5.1 デバイスではなく、そのペアリングキーが必要なもの全てであるということになります。&lt;br /&gt;
&lt;br /&gt;
ペアリングしたデバイスに複数のキー ({{ic|LTK}} や {{ic|IRK}} など) が存在する場合、これは Bluetooth 5.1 デバイスで&#039;&#039;ある&#039;&#039;ということになります。これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために、Linux を起動して [[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
===== Linux での展開 =====&lt;br /&gt;
&lt;br /&gt;
{{Note|Windows パーティションが Bitlocker で暗号化されている場合、Linux から chntpw を使ってアクセスすることはできません。}}&lt;br /&gt;
&lt;br /&gt;
Arch をリブートしてください。{{Pkg|chntpw}} をインストールして、Windows システムドライブをマウントします。&lt;br /&gt;
&lt;br /&gt;
 $ cd &#039;&#039;/path/to/windows/system&#039;&#039;/Windows/System32/config&lt;br /&gt;
 $ chntpw -e SYSTEM&lt;br /&gt;
{{Note|CurrentControlSet の代わりに ControlSet00X（X は任意の数字）と表示されることがあります。ls コマンドで確認してください。}}&lt;br /&gt;
{{ic|chntpw}} 環境の中で以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; cd CurrentControlSet\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
もしくは&lt;br /&gt;
 &amp;gt; cd ControlSet00X\Services\BTHPORT\Parameters\Keys&lt;br /&gt;
&lt;br /&gt;
次に、Bluetooth アダプタの MAC アドレスを取得し、そのフォルダを入力します。&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; ls&lt;br /&gt;
 &amp;gt; cd &#039;&#039;your-device&#039;s-mac-address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ペアリングしているデバイスにも同じことをします。Bluetooth 5.1 デバイスで&#039;&#039;ない&#039;&#039;場合、ペアリングキーしか表示されません:&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;gt; ls|&lt;br /&gt;
Node has 0 subkeys and 1 values&lt;br /&gt;
size  type        value name    [value if type DWORD]&lt;br /&gt;
16    REG_BINARY &amp;lt;123456789876&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスである場合、{{ic|hex}} を通して、デバイスのキーを取得します。&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;gt; hex 123456789876|&lt;br /&gt;
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (いくつかの他の文字)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
”XX&amp;quot; はペアリング・キーです。どのキーがどの MAC アドレスにマッピングされているか、メモしておいてください。&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスで&#039;&#039;ある&#039;&#039;場合、1つのデバイスに対応するキーが複数表示されます。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
Node has 0 subkeys and 8 values&lt;br /&gt;
  size     type              value name             [value if type DWORD]&lt;br /&gt;
    16  3 REG_BINARY         &amp;lt;LTK&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;KeyLength&amp;gt;               16 [0x10]&lt;br /&gt;
     8  b REG_QWORD          &amp;lt;ERand&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;EDIV&amp;gt;                 37520 [0x9290]&lt;br /&gt;
    16  3 REG_BINARY         &amp;lt;IRK&amp;gt;&lt;br /&gt;
     8  b REG_QWORD          &amp;lt;Address&amp;gt;&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;AddressType&amp;gt;              1 [0x1]&lt;br /&gt;
     4  4 REG_DWORD          &amp;lt;AuthReq&amp;gt;                 45 [0x2d]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これらのキーを使う方法は [[#Bluetooth 5.1 キーの準備]] を見てください。必要な値を得るには {{ic|hex &#039;&#039;value_name&#039;&#039;}} を使います。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために [[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
==== macOS の場合 ====&lt;br /&gt;
&lt;br /&gt;
macOS を起動し:&lt;br /&gt;
&lt;br /&gt;
* macOS Monterey 及びそれ以降の場合:&lt;br /&gt;
*# Keychain Access を開き、Bluetooth と検索してください。&lt;br /&gt;
*# 日付順でソートしてください。&lt;br /&gt;
*# 対象のデバイスを最近取り除いて再接続した場合、キーを変更日時順でソートして、最新のものを選べばよいです。キーはおそらく MobileBluetooth (古い Bluetooth デバイスの場合) という名前か、UUID (Bluetooth 5.1 以降) だけです。&lt;br /&gt;
*# 対象のエントリをダブルクリックしてください。Account フィールドの MAC アドレスが対象デバイスの MAC アドレスと一致することを確認してください。&lt;br /&gt;
*# &amp;quot;Show password&amp;quot; チェックボックスをクリックしてください。ここで、パスワードを2回入力する必要があります。&lt;br /&gt;
*# パスワードフィールド内のテキストをコピーしてください ({{ic|⌘+a}} {{ic|⌘+c}})。これは実際には XML ファイルです。&lt;br /&gt;
#* テキストをホームディレクトリ内の {{ic|bt_keys.txt}} ファイルにペーストしてください。&lt;br /&gt;
* High Sierra 及びそれ以降の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys &amp;gt; ~/bt_keys.txt}}&lt;br /&gt;
* Sierra 及びそれ以前の場合、次のコマンドをターミナルで実行してください: {{bc|# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys &amp;gt; ~/bt_keys.txt}}&lt;br /&gt;
&lt;br /&gt;
すると、{{ic|~/.bt_keys.txt}} ファイルには、確立された Bluetooth キーが含まれています。古いバージョンの macOS (High Sierra 及びそれ以前) では、先に進む前にキーの並びを逆にする必要があります。例えば、{{ic|98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm}} は {{ic|MM LL KK JJ GG FF EE DD CC BB AA 2F 54 98}} になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|キーの並びを逆にするには、以下の [[Python]] コードを使用できます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; key = &amp;quot;98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm&amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; &amp;quot; &amp;quot;.join(reversed(key.strip().split()))&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bluetooth 5.1 デバイスの場合、1つのデバイスに対して複数のキーが関連付けられています。それらのキーを使用する方法については [[#Bluetooth 5.1 キーの準備]] を見てください。&lt;br /&gt;
&lt;br /&gt;
最後に、キーを Linux 環境にインポートするために、Linux を起動し、[[#終わりに]] へ進んでください。&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth 5.1 キーの準備 ====&lt;br /&gt;
&lt;br /&gt;
[[#Windows の場合]] や [[#macOS の場合]] の章に従っていて Bluetooth 5.1 キーが存在していた場合、それらのキーを Linux にインポートする前に特定の変換をかける必要があります。[[#終わりに]] の章で使うために、要求されたファイルを適切に作成してください。この手順は対象デバイスによって異なり、キーの一部を操作する必要があります。これを行うためのユーティリティは以下で挙げられています。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! デバイス !! 元のキー及び変換 (Windows) !! 元のキー及び変換 (macOS) || キーの保存先ファイル&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
* Logitech MX Master 3&lt;br /&gt;
* Xbox One S Wireless Controller&lt;br /&gt;
|&lt;br /&gt;
* {{ic|IRK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|IdentityResolvingKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|SlaveLongTermKey.Key}} と {{ic|PeripheralLongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|{{ic|ERand}} と {{ic|EDIV}} は {{ic|0}} にする必要あり。&lt;br /&gt;
|&#039;&#039;Random Number&#039;&#039; と &#039;&#039;Encrypted Diversifier&#039;&#039; は {{ic|0}} にする必要あり。&lt;br /&gt;
| {{-}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
* ThinkPad TrackPoint Keyboard II&lt;br /&gt;
* Pebble M350 マウス&lt;br /&gt;
* Logitech G604 Lightspeed マウス&lt;br /&gt;
|&lt;br /&gt;
* {{ic|IRK}} をコピー&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote IRK&#039;&#039; をコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|IdentityResolvingKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Long-term Key&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|ERand}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Random Number&#039;&#039; にコピー&lt;br /&gt;
* Base64 をリトルエンディアンの10進数に変換 (以下の Python コードを参照)。&lt;br /&gt;
| {{ic|LongTermKey.Rand}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|EDIV}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Encrypted Diversifier&#039;&#039; にコピー。&lt;br /&gt;
* Base64 からリトルエンディアンの10進数に変換 (以下の Python コードを参照)。&lt;br /&gt;
| {{ic|LongTermKey.EDiv}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|他のデバイス&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote IRK&#039;&#039; をコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Key}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|ERand}} をコピー。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
* 数値全体を10進数に変換。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Long-term Key&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
| {{ic|LongTermKey.Rand}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* {{ic|EDIV}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
|&lt;br /&gt;
* &#039;&#039;Remote Encryption&#039;&#039; を &#039;&#039;Encrypted Diversifier&#039;&#039; にコピー。&lt;br /&gt;
* Base64 から16進数に変換。&lt;br /&gt;
* バイトの順番を逆に。&lt;br /&gt;
| {{ic|LongTermKey.EDiv}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;|Xbox ワイヤレスコントローラ&lt;br /&gt;
|&lt;br /&gt;
* {{ic|LTK}} をコピー。&lt;br /&gt;
* 16進数の桁間のスペースを除去。&lt;br /&gt;
| {{Grey|?}}&lt;br /&gt;
| {{ic|SlaveLongTermKey.Key}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 値からスペースを取り除くには、[https://www.browserling.com/tools/remove-all-whitespace このオンラインツール]や以下の [[Python]] コードを使用できます:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;quot;&#039;&#039;key_value&#039;&#039;&amp;quot;.replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
* 以下の Python コードはバイトの順番を逆にするだけです:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; ERand=&amp;quot; 63 02 84 B8 5D 40 44 DF   &amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; ERand=list(reversed(ERand.strip().split()))&lt;br /&gt;
}}&lt;br /&gt;
* 以下の Python コードは、一部で必要となる追加の10進数変換を行います:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; int(&amp;quot;&amp;quot;.join(ERand), 16)&lt;br /&gt;
16088054540146049635&lt;br /&gt;
}}&lt;br /&gt;
* 以下の Python コードは base64 から16進数への変換を行います:&lt;br /&gt;
 binascii.hexlify(base64.decodebytes(b&#039;...&#039;)).upper()&lt;br /&gt;
* 以下の Python コードは完全な macOS Encrypted Diversifier の変換を行います:&lt;br /&gt;
 struct.unpack(&#039;&amp;lt;H&#039;, base64.decodebytes(b&#039;...&#039;))&lt;br /&gt;
* 以下の Python コードは完全な macOS Random Number の変換を行います:&lt;br /&gt;
 struct.unpack(&#039;&amp;amp;lt;Q&#039;, base64.decodebytes(b&#039;...&#039;))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
一般的なケースの例としては:&lt;br /&gt;
* {{ic|LTK}} の値 {{ic|48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94}} は、{{ic|LongTermKey.Key}} の値 {{ic|484DAFCD0F9222880A529AF476DA8B94}} となります。&lt;br /&gt;
* {{ic|ERand}} の値 {{ic|63 02 84 B8 5D 40 44 DF}} は、{{ic|Rand}} の値 {{ic|16088054540146049635}} となります。&lt;br /&gt;
* {{ic|EDIV}} の値 {{ic|37520}} は、{{ic|EDiv}} の値 {{ic|37520}} となります。&lt;br /&gt;
&lt;br /&gt;
==== 設定の保存  ====&lt;br /&gt;
&lt;br /&gt;
キーを手に入れたら、ユーザーを root に変更し、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|# cd /var/lib/bluetooth/&#039;&#039;BT-Adapter-MAC-address&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
ここには、ペアリングした Bluetooth 機器ごとのフォルダがあります。Arch とデュアルブートでペアリングしたい各デバイスについて、以下を実行します:&lt;br /&gt;
&lt;br /&gt;
{{bc|# cd &#039;&#039;device-MAC-address&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|この時点で、ペアリング時に MAC アドレスの値を増加させるデバイスを使用している場合、MAC アドレスのディレクトリを、値を増加させたパスへ移動させる必要があります。Windows から MAC アドレスをコピーするか、あるいは、各オクテットが2桁の[[Wikipedia:Hexadecimal|16進数]]であることに注意しながら自分で値を増加させてください。}}&lt;br /&gt;
&lt;br /&gt;
ペアリングキーを持っている場合 (つまり、これは Bluetooth 5.1 デバイスでない)、{{ic|info}} ファイルを編集し、{{ic|[LinkKey]}} 以下のキーを変更します。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=info|2=&lt;br /&gt;
[LinkKey]&lt;br /&gt;
Key=XXXXXXXXXXXXXXX&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|すべての文字が大文字であることを確認する必要があります。スペースはすべて削除してください。}}&lt;br /&gt;
&lt;br /&gt;
複数のキーが存在する場合 (Bluetooth 5.1 の場合)、以下の {{ic|info}} ファイルを編集して、全てのキーをそれぞれの値で置き換えてください。例えば、Xbox One S Wireless Controller の場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=info|2=&lt;br /&gt;
[IdentityResolvingKey]&lt;br /&gt;
Key=&amp;lt;IdentityResolvingKey.Key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[PeripheralLongTermKey]&lt;br /&gt;
Key=&amp;lt;PeripheralLongTermKey.Key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[SlaveLongTermKey]&lt;br /&gt;
Key=&amp;lt;SlaveLongTermKey.Key&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|bluetooth.service}} と {{ic|pulseaudio}} を[[再起動]]してください。({{ic|pulseaudio -k &amp;amp;&amp;amp; pulseaudio --start}} を使ってください。)&lt;br /&gt;
&lt;br /&gt;
これで、デバイスに接続できるはずです。&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluetooth マネージャによっては、デバイスに再接続するために完全な再起動が必要な場合があります。}}&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== アダプタのデフォルト電源状態 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|bluez}} 5.65 以降、BlueZ はデフォルトで、サービスの起動時やサスペンドからの復帰時にすべての Bluetooth アダプタをオンにします。[https://github.com/bluez/bluez/commit/180cf09933b2d8eb03972c8638063429fe5fece5]&lt;br /&gt;
&lt;br /&gt;
アダプタを自動で有効化させたくない場合(例えば、ポータブルデバイスなどでバッテリを節約したい場合)、{{ic|/etc/bluetooth/main.conf}} の {{ic|[Policy]}} セクションで {{ic|1=AutoEnable=false}} を設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/bluetooth/main.conf|2=&lt;br /&gt;
[Policy]&lt;br /&gt;
AutoEnable=false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この設定を行っても、[[#ペアリング]] で説明されているように {{ic|power on}} を実行すれば、アダプタを手動でオンにできます。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に発見可能にする ===&lt;br /&gt;
&lt;br /&gt;
デバイスが常に見えていて、かつ直接接続できる必要がある場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/bluetooth/main.conf|2=&lt;br /&gt;
[General]&lt;br /&gt;
DiscoverableTimeout = 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サスペンドからの復帰 ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth キーボードやマウスなどをサスペンドから起動できるようにする。まず、bios の設定を確認し、サスペンドからの復帰 が無効になっていないことを確認します。多くの場合、マザーボードからの Bluetooth は USB デバイスです。&lt;br /&gt;
&lt;br /&gt;
bluetooth アダプターのベンダーコードとデバイス ID を確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb {{!}} grep bluetooth -i|&lt;br /&gt;
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
サスペンドからの復帰を有効にするために、ベンダコードとデバイス ID の新しい udev ルールを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules|2=&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;8087&amp;quot;, ATTRS{idProduct}==&amp;quot;0039&amp;quot; RUN+=&amp;quot;/bin/sh -c &#039;echo enabled &amp;gt; /sys$env{DEVPATH}/../power/wakeup;&#039;&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
復帰後に Bluetooth キーボードを自動的に再設定して、例えば異なるキーマップやキーのリピート速度をもたせたりする(詳細は [[Xorg でのキーボード設定#typematic delay と rate の調整]] と [[xmodmap]])には、[[実行可能属性|実行可能]]なスクリプトを作成してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|configure_keyboard.sh|2=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
export DISPLAY=:0&lt;br /&gt;
xset r rate 220 30&lt;br /&gt;
xmodmap /&#039;&#039;your&#039;&#039;/&#039;&#039;path&#039;&#039;/&#039;&#039;to&#039;&#039;/.Xmodmap&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、上記のような追加の udev ルールを作成してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules|2=&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;8087&amp;quot;, ATTRS{idProduct}==&amp;quot;0039&amp;quot; RUN+=&amp;quot;/&#039;&#039;your&#039;&#039;/&#039;&#039;path&#039;&#039;/&#039;&#039;to&#039;&#039;/configure_keyboard.sh&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 実験的な機能を有効化する ===&lt;br /&gt;
&lt;br /&gt;
Bluez スタックは、バグがあるかもしれない新しい機能を D-Bus 実験的オプションおよびカーネル実験的オプションに留めます。実験的な機能は最終的に、安定していると判断され、もはやオプションを必要としなくなるので、どのような実験的な機能が存在するかはバージョンによって異なります (例えば、現在 D-Bus の実験的なインターフェイスを有効化すると、古いヘッドセットのバッテリーレベルを報告できるようになります)。実験的な機能を有効化するには、設定の対応する行をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/bluetooth/main.conf|2=&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# Enables D-Bus experimental interfaces&lt;br /&gt;
# Possible values: true or false&lt;br /&gt;
&#039;&#039;&#039;#Experimental = true&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Enables kernel experimental features, alternatively a list of UUIDs&lt;br /&gt;
# can be given.&lt;br /&gt;
# Possible values: true,false,&amp;lt;UUID List&amp;gt;&lt;br /&gt;
# Possible UUIDS:&lt;br /&gt;
...&lt;br /&gt;
# Defaults to false.&lt;br /&gt;
&#039;&#039;&#039;#KernelExperimental = true&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|bluetooth.service}} を[[編集]]して、{{ic|--experimental}} フラグあるいは {{ic|--kernel}} フラグを追加してください。例えば、以下の[[ドロップインファイル]]のように:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/bluetooth.service.d/override.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
いずれの場合でも、{{ic|bluetooth.service}} を[[再起動]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
通常は、オーディオサーバーと Bluetooth を統合するために追加の手順を実行する必要があります。これについては、以下のセクションで説明します。&lt;br /&gt;
&lt;br /&gt;
Bluetooth オーディオや Bluetooth ヘッドセットなどの情報については [[Bluetooth ヘッドセット]] のページを見てください。&lt;br /&gt;
&lt;br /&gt;
=== PulseAudio ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth ヘッドフォンやスピーカーのようなオーディオ機器を使うには {{Pkg|pulseaudio-bluetooth}} パッケージのインストールが必要です。インストールを反映させるために、pulseaudio を再起動してください: {{ic|pulseaudio -k}}。デフォルトの Pulseaudio インストールでは (具体的には、パッケージングされているデフォルトの {{ic|default.pa}} でユーザインスタンスを使用している場合)、即座に Bluetooth デバイスからスピーカーにオーディオをストリーミングできるはずです。[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/blob/stable-16.x/src/daemon/default.pa.in#L84-93]&lt;br /&gt;
&lt;br /&gt;
システム全体の PulseAudio 設定がある場合は、デーモンを実行しているユーザー（通常は {{ic|pulse}}) が {{ic|lp}} グループに属しており、PulseAudio 設定に Bluetooth モジュールをロードしていることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pulse/system.pa|2=&lt;br /&gt;
...&lt;br /&gt;
load-module module-bluetooth-policy&lt;br /&gt;
load-module module-bluetooth-discover&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは任意ですが、Bluetooth デバイスの接続時にすべてのオーディオをそのデバイスに自動で切り替えたい場合、{{ic|load-module module-switch-on-connect}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== PipeWire ===&lt;br /&gt;
&lt;br /&gt;
v0.3.19 以降の PipeWire はデフォルトで Bluetooth をサポートしています。&lt;br /&gt;
&lt;br /&gt;
=== ALSA ===&lt;br /&gt;
&lt;br /&gt;
{{Note|Bluez5 は [[ALSA]] の直接統合を中止し、 [[PulseAudio]] のみをサポートします。 PulseAudio を使用できない場合、または使用しない場合は、次の手順に従ってください。}}&lt;br /&gt;
&lt;br /&gt;
まず、 Bluetooth オーディオデバイスが正しくペアリングされ、システムに接続されていることを確認します。&lt;br /&gt;
&lt;br /&gt;
次に、 {{AUR|bluez-alsa-git}} をインストールし、 {{ic|bluealsa}} サービスを開始(そして、有効に) し、ユーザーを {{ic|audio}} グループに追加します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドを実行して、すべてが意図したとおりに動作しているかどうかを確認します({{ic|&#039;&#039;XX:XX:XX:XX:XX:XX&#039;&#039;}} と {{ic|&#039;&#039;FILE.wav&#039;&#039;}} の部分は置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ aplay -D bluealsa:SRV=org.bluealsa,DEV=&#039;&#039;XX:XX:XX:XX:XX:XX&#039;&#039;,PROFILE=a2dp &#039;&#039;FILE.wav&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
最後に、 {{ic|~/.asoundrc}} に次の行を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.asoundrc|&lt;br /&gt;
defaults.bluealsa {&lt;br /&gt;
    service &amp;quot;org.bluealsa&amp;quot;&lt;br /&gt;
    device &amp;quot;XX:XX:XX:XX:XX:XX&amp;quot;&lt;br /&gt;
    profile &amp;quot;a2dp&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これで、 {{ic|bluealsa}} デバイスを使って Bluetooth オーディオデバイスに接続できるようになります。ボリューム管理は {{ic|alsamixer}} とオプション {{ic|-D bluealsa}} を使って通常行われます。&lt;br /&gt;
&lt;br /&gt;
== Bluetooth シリアル ==&lt;br /&gt;
&lt;br /&gt;
Bluetooth-to-Serial modules (HC-05、HC-06) で Bluetooth シリアル通信が機能するようにするには、次の手順に従います:&lt;br /&gt;
&lt;br /&gt;
[[#ペアリング|上記]]で説明したように、 {{ic|bluetoothctl}} を使って Bluetooth デバイスを&#039;&#039;&#039;ペアリング&#039;&#039;&#039;します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|bluez-deprecated-tools}} をインストールします。新しいツールにはない機能があります。&lt;br /&gt;
&lt;br /&gt;
ペアになっているデバイスの MAC アドレスを tty 端末にバインドします:&lt;br /&gt;
&lt;br /&gt;
 # rfcomm bind rfcomm0 &#039;&#039;MAC_address_of_Bluetooth_device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、シリアル通信用に {{ic|/dev/rfcomm0}} を開くことができます:&lt;br /&gt;
&lt;br /&gt;
 $ picocom /dev/rfcomm0 -b 115200&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Replace hciconfig with newer commands.}}&lt;br /&gt;
&lt;br /&gt;
=== 一般的なトラブルシューティング ===&lt;br /&gt;
&lt;br /&gt;
==== デバッグ ====&lt;br /&gt;
&lt;br /&gt;
デバッグするには、最初に {{ic|bluetooth.service}} を[[停止]]します。&lt;br /&gt;
&lt;br /&gt;
そして {{ic|-d}} パラメーターを付けて開始します。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/bluetooth/bluetoothd -n -d&lt;br /&gt;
&lt;br /&gt;
別のオプションとして、 {{ic|btmon}} ツールが有ります。&lt;br /&gt;
&lt;br /&gt;
==== 非推奨の BlueZ ツール ====&lt;br /&gt;
&lt;br /&gt;
8つの BlueZ ツールは[https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=b1eb2c4cd057624312e0412f6c4be000f7fc3617 非推奨となり]、{{Pkg|bluez-utils}} から削除されましたが、それらのすべてが新しいツールに取って代わられたわけではありません。{{Pkg|bluez-deprecated-tools}} パッケージが非推奨となったツールを提供します。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 非推奨のツール&lt;br /&gt;
! あり得る代替&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/gatttool.1.en.html gatttool] || btgatt-client, [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt D-Bus Gatt API]{{Dead link|2023|10|29|status=404}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hciattach.1.en.html hciattach] || btattach&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hciconfig.1.en.html hciconfig] || btmgmt (そして bluetoothctl?)&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez-hcidump/hcidump.1.en.html hcidump] || btmon (そして btsnoop)&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/hcitool.1.en.html hcitool] || なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt D-Bus Device API]{{Dead link|2023|10|29|status=404}} が利用可能&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/rfcomm.1.en.html rfcomm]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | なし、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt D-Bus Profile1 API]{{Dead link|2023|10|29|status=404}} の実装?&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/latest/bluez/ciptool.1.en.html ciptool]&lt;br /&gt;
|-&lt;br /&gt;
|[https://manpages.debian.org/latest/bluez/sdptool.1.en.html sdptool]&lt;br /&gt;
| なし、機能が、異なる D-Bus オブジェクトに散らばっている模様: [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/profile-api.txt Profile]{{Dead link|2023|10|29|status=404}}、[https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/advertising-api.txt Advertising]{{Dead link|2023|10|29|status=404}}、そして [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt device]{{Dead link|2023|10|29|status=404}} と [https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt adapter]{{Dead link|2023|10|29|status=404}} の UUID の配列。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== サービスの問題 ===&lt;br /&gt;
&lt;br /&gt;
==== systemd: Condition check resulted in Bluetooth service being skipped ====&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} は {{ic|/sys/class/bluetooth}} ディレクトリが存在することのみを要求します。このディレクトリは {{ic|bluetooth}} カーネルモジュールによって作成されるはずです。このカーネルモジュールは、{{ic|systemd-udev}} が動作している Bluetooth ハードウェアデバイスを発見した場合にのみ、{{ic|systemd-udev}} により自動的にロードされます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys/class/bluetooth}} が存在しない場合、{{ic|lsmod}} コマンドを使って、Bluetooth カーネルモジュールがロードされているかどうかを確認してください。Bluetooth デバイスがあるにも関わらずロードされていない場合、[[カーネルモジュール#手動でモジュールを扱う|Bluetooth モジュールをロード]]し、{{ic|bluetooth.service}} を[[再起動]]することで、手動で起動できます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bluetooth}} モジュールをロードする際に、対応するカーネル Bluetooth ドライバもロードする必要があります。{{ic|btusb}} が最も可能性がありますが、{{ic|btrtl,btintel,btbcm,bnep,btusb}} などの可能性もあります。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} の[[ユニットステータス]]を確認して、このサービスが起動しているかどうかを確認してください。&lt;br /&gt;
&lt;br /&gt;
[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853207 Debian Bug report logs - #853207] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|bluetooth.service}} の起動に成功したが、まだ Bluetooth を使えないことがあります (例: {{ic|scan on}} の時に {{ic|bluetoothctl}} が {{ic|org.Bluez.Error.NotReady}} のようなメッセージを発する)。この場合、コンピュータを再起動し、次のことをダブルチェックしてください: {{ic|/sys/class/bluetooth}} ディレクトリが存在するか; {{ic|lsmod}} の出力に正しい Bluetooth モジュールが含まれているか; [[journal]] のログを確認するなど。{{ic|systemd-udev}} は、また手動の変更をせずとも Bluetooth ハードウェアを自動的に認識するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth が suspend-to-idle 中のデバイスを即座に立ち上げてしまう ====&lt;br /&gt;
&lt;br /&gt;
[[サスペンドとハイバネート|suspend-to-idle/S2idle/S0ix/Modern Standby]] する能力のあるシステムにおいては、Bluetooth コントローラがスリープ中も有効化されたままになります。通常、これにより、Bluetooth デバイスが接続されていると、システムが[https://bugzilla.kernel.org/show_bug.cgi?id=200039 スリープに移行した直後にスリープが解除されてしまいます]。&lt;br /&gt;
&lt;br /&gt;
これを防ぐには、スリープに移行する前に Bluetooth を完全に無効化できます。{{Pkg|bluez-utils}} をインストールし、以下のファイルを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/bluetooth-disable-before-sleep.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Disable Bluetooth before going to sleep&lt;br /&gt;
Before=sleep.target&lt;br /&gt;
Before=suspend.target&lt;br /&gt;
Before=hybrid-sleep.target&lt;br /&gt;
Before=suspend-then-hibernate.target&lt;br /&gt;
StopWhenUnneeded=yes&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/bin/bluetoothctl power off&lt;br /&gt;
ExecStop=/usr/bin/bluetoothctl power on&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=sleep.target&lt;br /&gt;
WantedBy=suspend.target&lt;br /&gt;
WantedBy=hybrid-sleep.target&lt;br /&gt;
WantedBy=suspend-then-hibernate.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このサービスを[[有効化]]し、スリープに移行した時に Bluetooth デバイスが切断されることや、スリープからの復帰時に Bluetooth が再び接続されることを確認してください。&lt;br /&gt;
&lt;br /&gt;
この回避策を使用すると、[[#サスペンドからの復帰|Bluetooth マウス/キーボードを使ってシステムをスリープから復帰させること]]ができなくなります。&lt;br /&gt;
&lt;br /&gt;
==== ヘッドレス/サーバのシステムでログアウト後に Bluetooth がオフになる ====&lt;br /&gt;
&lt;br /&gt;
様々な原因が考えられます:&lt;br /&gt;
&lt;br /&gt;
* [[PulseAudio]] と [[PipeWire]] は両方ともデフォルトでユーザサービスとして動作します。よって、最後のセッションが終了するとこれらのサービスは終了されます。この問題を解決するには、対象のユーザに対して [[systemd/ユーザー#systemd のユーザーインスタンスを自動起動|Lingering (残留)]] を有効化してください。&lt;br /&gt;
* さらに、[[WirePlumber]] を [[PipeWire]] と共に実行している場合 (これはよくある環境です)、WirePlumber は &amp;quot;logind-monitor&amp;quot; を実行します。これは、Bluetooth をログイン時に有効化し、ログアウト時に無効化します。問題の解決方法は [[WirePlumber#ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アダプタの問題 ===&lt;br /&gt;
&lt;br /&gt;
==== hcitool scan: Device not found ====&lt;br /&gt;
&lt;br /&gt;
* 一部のラップトップ (例: Dell Studio 15、Lenovo Thinkpad X1) では、Bluetooth モードを HID から HCI に切り替える必要があります。{{Pkg|bluez-hid2hci}} パッケージをインストールすれば、[[udev]] が自動的に切り替えを行うはずです。また、次のコマンドを実行して手動で HCI に切り替えることもできます:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/udev/hid2hci&lt;br /&gt;
&lt;br /&gt;
* デバイスが表示されず、かつマシンに Windows オペレーティングシステムがある場合、Windows から bluetooth アダプターを有効にして見てください。&lt;br /&gt;
&lt;br /&gt;
* 場合によっては次のコマンドで問題が解決するかもしれません:&lt;br /&gt;
&lt;br /&gt;
 # bluetoothctl power on&lt;br /&gt;
&lt;br /&gt;
==== bluetoothctl: No default controller available ====&lt;br /&gt;
&lt;br /&gt;
一部のマザーボード Bluetooth コントローラにはバグがあります。バグがこの問題の原因であるか調べるには、{{ic|journalctl {{!}} grep hci}} を実行してください。このコマンドの出力に &amp;quot;command tx timeout&amp;quot; や &amp;quot;Reading Intel version command failed&amp;quot; のようなエントリが存在する場合、PC の電源を切り、電源ケーブルを物理的に外して数秒間放置してください。これにより、コントローラにファームウェアを再ロードさせます (通常の再起動では再ロードしません)。[https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1859592 こちら]のバグレポートを参照してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが [[rfkill]] によってブロックされていないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
また、一部の Intel カード (8260 など) は Bluetooth サービスによって正しく認識されないかもしれません。{{Pkg|bluez-utils}} の代わりに非推奨の {{Pkg|bluez-deprecated-tools}} を使うことでこの問題が解決したというケースが報告されています。&lt;br /&gt;
&lt;br /&gt;
また、これは省電力機能が原因かもしれません。その場合、{{ic|1=btusb.enable_autosuspend=n}} [[カーネルパラメータ#設定|カーネルパラメータ]]により解決できる可能性があります。[https://bugzilla.redhat.com/show_bug.cgi?id=1573562 Red Hat Bugzilla – Bug 1573562] も参照してください。&lt;br /&gt;
&lt;br /&gt;
時々、{{ic|btusb}} をオプション無しでアンロード・ロードすればコントローラを元に戻せることがあります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r btusb&lt;br /&gt;
 # modprobe btusb&lt;br /&gt;
&lt;br /&gt;
また、ドングルが [[#CSR ドングル 0a12:0001|CSR クローン]]である場合にもこの問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
==== rfkill unblock: Do not unblock ====&lt;br /&gt;
&lt;br /&gt;
デバイスがソフトブロックされていて [[ConnMan]] を動作させている場合、次を試してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 $ connmanctl enable bluetooth&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth USB ドングル ====&lt;br /&gt;
&lt;br /&gt;
USB ドングルを使う場合は、Bluetooth ドングルが認識されているか確認してください。USB ドングルを挿入する時に {{ic|journalctl -f}} を root として実行する(もしくは {{ic|/var/log/messages.log}} を調査する)ことで、そのことを確認できます。以下のような見た目であるはずです(hci を見てください)。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
Feb 20 15:00:24 hostname kernel: [ 2661.349823] usb 4-1: new full-speed USB device number 3 using uhci_hcd&lt;br /&gt;
Feb 20 15:00:24 hostname bluetoothd[4568]: HCI dev 0 registered&lt;br /&gt;
Feb 20 15:00:24 hostname bluetoothd[4568]: Listening for HCI events on hci0&lt;br /&gt;
Feb 20 15:00:25 hostname bluetoothd[4568]: HCI dev 0 up&lt;br /&gt;
Feb 20 15:00:25 hostname bluetoothd[4568]: Adapter /org/bluez/4568/hci0 has been enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最初の2行しか表示されていなかった場合、デバイスは見つかっていますが、そのデバイスを立ち上げる必要があります。&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
{{hc|# btmgmt|&lt;br /&gt;
[mgmt]# info&lt;br /&gt;
Index list with 1 item&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr &lt;br /&gt;
	&#039;&#039;&#039;current settings:&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn &lt;br /&gt;
	name Mozart&lt;br /&gt;
	short name &lt;br /&gt;
&lt;br /&gt;
[mgmt]# select hci0&lt;br /&gt;
Selected index 0&lt;br /&gt;
&lt;br /&gt;
[hci0]# power up&lt;br /&gt;
hci0 Set Powered complete, settings: &#039;&#039;&#039;powered&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
&lt;br /&gt;
[hci0]# info&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr &lt;br /&gt;
	&#039;&#039;&#039;current settings: powered&#039;&#039;&#039; connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
または&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[bluetooth]# show&lt;br /&gt;
Controller 00:1A:7D:DA:71:10 (public)&lt;br /&gt;
	Name: Mozart&lt;br /&gt;
	Alias: Mozart&lt;br /&gt;
	Class: 0x0000095c&lt;br /&gt;
	&#039;&#039;&#039;Powered: no&#039;&#039;&#039;&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
[CHG] Controller 00:1A:7D:DA:71:10 Class: 0x001c0104&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller 00:1A:7D:DA:71:10 &#039;&#039;&#039;Powered: yes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# show&lt;br /&gt;
Controller 00:1A:7D:DA:71:10 (public)&lt;br /&gt;
	Name: Mozart&lt;br /&gt;
	Alias: Mozart&lt;br /&gt;
	Class: 0x001c0104&lt;br /&gt;
	&#039;&#039;&#039;Powered: yes&#039;&#039;&#039;&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://www.bluetooth.com/specifications/assigned-numbers/host-controller-interface/ 公式の仕様表]に従って、Bluetooth のバージョンが HCI のバージョンにマップされていることを確認できます。例えば、先の出力では、HCI &#039;&#039;&#039;version 6&#039;&#039;&#039; が Bluetooth version 4.0 です。&lt;br /&gt;
&lt;br /&gt;
デバイスが検出されているか確認するために {{ic|bluez-utils}} に含まれている {{ic|hcitool}} を使うことができます。次のコマンドで利用可能なデバイスとその識別子・MAC アドレスのリストを表示することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ btmgmt info|&lt;br /&gt;
Index list with 1 item&lt;br /&gt;
hci0:	Primary controller&lt;br /&gt;
	addr 00:1A:7D:DA:71:10 &#039;&#039;&#039;version 6&#039;&#039;&#039; manufacturer 10 class 0x1c0104&lt;br /&gt;
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr&lt;br /&gt;
	current settings: powered connectable discoverable bondable ssp br/edr le secure-conn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
デバイスに関するもっと詳細な情報は、非推奨の {{ic|hciconfig}} を使うことで取得できます。({{AUR|bluez-utils-compat}})&lt;br /&gt;
&lt;br /&gt;
{{hc|$ hciconfig -a hci0|&lt;br /&gt;
hci0:   Type: USB&lt;br /&gt;
        BD Address: 00:1B:DC:0F:DB:40 ACL MTU: 310:10 SCO MTU: 64:8&lt;br /&gt;
        UP RUNNING PSCAN ISCAN&lt;br /&gt;
        RX bytes:1226 acl:0 sco:0 events:27 errors:0&lt;br /&gt;
        TX bytes:351 acl:0 sco:0 commands:26 errors:0&lt;br /&gt;
        Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80&lt;br /&gt;
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3&lt;br /&gt;
        Link policy: RSWITCH HOLD SNIFF PARK&lt;br /&gt;
        Link mode: SLAVE ACCEPT&lt;br /&gt;
        Name: &#039;BlueZ (0)&#039;&lt;br /&gt;
        Class: 0x000100&lt;br /&gt;
        Service Classes: Unspecified&lt;br /&gt;
        Device Class: Computer, Uncategorized&lt;br /&gt;
        HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c&lt;br /&gt;
        Manufacturer: Cambridge Silicon Radio (10)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== ドングルから短距離にいるときにオーディオデバイスがおかしくなる =====&lt;br /&gt;
&lt;br /&gt;
他のデバイスと同一の USB ホストを共有している場合、[https://bbs.archlinux.org/viewtopic.php?pid=1440161#p1440161 オーディオデバイスとの通信に干渉] する可能性があります。オーディオデバイスがバスに接続されている唯一のデバイスであることを確認してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
Bus 001 Device 004: ID 048d:1345 Integrated Technology Express, Inc. Multi Cardreader&lt;br /&gt;
Bus 001 Device 003: ID 0424:a700 Standard Microsystems Corp. 2 Port Hub&lt;br /&gt;
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== CSR ドングル 0a12:0001 =====&lt;br /&gt;
&lt;br /&gt;
デバイス {{ic|ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)}} にはリグレッションのバグがあり、現在、カーネルバージョン 5.17 及び &amp;lt; 6.0 でしか動作しません。詳細は、[https://bugzilla.kernel.org/show_bug.cgi?id=60824 Kernel Bug 60824] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== Logitech Bluetooth USB ドングル ====&lt;br /&gt;
&lt;br /&gt;
Logitech のドングルには Embedded と HCI という二つのモードで動作するものがあります (例: Logitech MX5000)。embedded モードではドングルは USB デバイスをエミュレートするので PC は普通の USB マウス・キーボードを使っていると認識します。&lt;br /&gt;
&lt;br /&gt;
USB BT ミニレシーバの小さな赤いボタンを押すと他のモードが有効になります。BT ドングルの赤いボタンを押しながらコンピュータに接続してください。ボタンを押して3-5秒で、Bluetooth アイコンがシステムトレイに表示されます ([https://ubuntuforums.org/showthread.php?t=1332197 議論])。&lt;br /&gt;
&lt;br /&gt;
また、{{Pkg|bluez-hid2hci}} パッケージをインストールすることもできます。Logitech のドングルを接続すると自動的に切り替えます。&lt;br /&gt;
&lt;br /&gt;
==== Foxconn / Hon Hai / Lite-On の Broadcom デバイス ====&lt;br /&gt;
&lt;br /&gt;
一部のデバイスでは、起動時にファームウェアを書き込む必要があります。&lt;br /&gt;
&lt;br /&gt;
一部のファームウェアは、[[AUR]] で [https://aur.archlinux.org/packages?K=broadcom broadcom] と検索すると入手できます。特出すべきパッケージは {{AUR|broadcom-bt-firmware}} です。これは、[https://github.com/winterheart/broadcom-bt-firmware/blob/master/DEVICES.md 様々なカード]用のファイルを提供します。&lt;br /&gt;
&lt;br /&gt;
または、[https://github.com/jessesung/hex2hcd hex2hcd] ({{Pkg|bluez-utils}} でインストールされます) を使ってファームウェアを Microsoft Windows の &#039;&#039;.hex&#039;&#039; ファイルから &#039;&#039;.hcd&#039;&#039; ファイルに変換することもできます。&lt;br /&gt;
&lt;br /&gt;
正しい &#039;&#039;.hex&#039;&#039; ファイルを取得するために、&#039;&#039;lsusb&#039;&#039; でデバイスの vendor:product コードを検索してください。例:&lt;br /&gt;
&lt;br /&gt;
 Bus 002 Device 004: ID &#039;&#039;&#039;04ca:2006&#039;&#039;&#039; Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 Bus 004 Device 004: Id &#039;&#039;&#039;0489:e031&#039;&#039;&#039; Foxconn / Hon Hai&lt;br /&gt;
&lt;br /&gt;
もしくは、Windows (仮想マシンでもかまいません) を起動して Device Manager ユーティリティからファームウェアの名前を取得してください。デバイスのモデルを知りたいのに &#039;&#039;lsusb&#039;&#039; で表示されない場合、&#039;&#039;lsusb -v&#039;&#039; の {{ic|iProduct}} でわかることがあります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;.hex&#039;&#039; ファイルはダウンロードした Windows ドライバーから抽出することができます。Windows を実行する必要はありません。適切なドライバーをダウンロードしてください (例えば、[http://www.fujitsupc.com/downloads/mobile/BLUETOOTH_WIDCOMM_V6.5.0.3100_WIN7-32_FPC46-1771-01.EXE Bluetooth Widcomm]{{Dead link|2023|09|16|status=domain name not resolved}})。フォーマットにも依りますが、ファイルの展開には{{Pkg|unrar}} か {{Pkg|cabextract}} が必要である場合があります。多数の &#039;&#039;.hex&#039;&#039; ファイルの中から必要なファイルを見つけるには、{{ic|Win32/bcbtums-win7x86-brcm.inf}} ファイルの中身を確認して {{ic|[RAMUSB&#039;&#039;&#039;E031&#039;&#039;&#039;.CopyList]}} を検索してください。{{ic|E031}} はあなたの使っているデバイスの product コード (大文字) に置き換えて下さい (&#039;&#039;lsusb&#039;&#039; で確認できる2番目の16進数)。その下に、必要な &#039;&#039;.hex&#039;&#039; ファイルの名前が書かれているはずです。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;.hcd&#039;&#039; ファイルを手に入れたら、{{ic|/lib/firmware/brcm/BCM.hcd}} にコピーしてください - このファイル名は [[dmesg]] からわかります。あなたのマシンでは異なっている可能性があるため &#039;&#039;dmesg&#039;&#039; の出力で確認してください。そして &#039;&#039;btusb&#039;&#039; モジュールをリロードしてください:&lt;br /&gt;
&lt;br /&gt;
 # rmmod btusb&lt;br /&gt;
 # modprobe btusb&lt;br /&gt;
&lt;br /&gt;
これでデバイスが使えるようになるはずです。以上の設定を永続化させる方法は [https://bbs.archlinux.org/viewtopic.php?id=162688 BBS#162688] を参照。&lt;br /&gt;
&lt;br /&gt;
==== Intel の複合 WiFi と Bluetooth カード ====&lt;br /&gt;
&lt;br /&gt;
[[ネットワーク設定/ワイヤレス#Bluetooth の共存]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== Windows とのデュアルブート環境における Mediatek MT7921 や MT7961 ====&lt;br /&gt;
&lt;br /&gt;
デュアルブートシステムでは、Bluetooth のファームウェアバージョンが Windows と Linux とで異なる場合、Windows を起動した後に Bluetooth アダプタが動作しなくなります。&lt;br /&gt;
&lt;br /&gt;
これを防ぐ最も良い方法は、各 OS 用の Bluetooth ドライバ (特にファームウェア) を最新にすることです。&lt;br /&gt;
&lt;br /&gt;
Windows 用の最新バージョンのドライバ (またはファームウェア) を見つけられない場合、最新のファームウェアファイル {{ic|/usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz}} を Arch Linux からコピーし、Windows へ展開することができます (例えば、{{ic|C:\WINDOWS\system32\DRIVERS\}}。Windows でのファームウェアファイルへのパスはデバイスマネージャから確認できます)。&lt;br /&gt;
&lt;br /&gt;
==== サスペンド/復帰後にアダプタが消える ====&lt;br /&gt;
&lt;br /&gt;
まず、アダプタのベンダーと製品 ID を見つけてください。例:&lt;br /&gt;
&lt;br /&gt;
First, find vendor and product ID of the adapter. For example:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb -tv|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M&lt;br /&gt;
    ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
    ...&lt;br /&gt;
    |__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M&lt;br /&gt;
        ID 8087:0025 Intel Corp. &lt;br /&gt;
    |__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M&lt;br /&gt;
        ID 8087:0025 Intel Corp. &lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
この場合、ベンダー ID は 8087 で、製品 ID は 0025 です。&lt;br /&gt;
&lt;br /&gt;
次に、 {{pkg|usb_modeswitch}} を使用してアダプタをリセットします:&lt;br /&gt;
&lt;br /&gt;
 # usb_modeswitch -R -v &#039;&#039;vendor_ID&#039;&#039; -p &#039;&#039;product_ID&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ペアリングと接続の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== コンピュータが表示されない ====&lt;br /&gt;
&lt;br /&gt;
携帯からコンピュータが表示されないときは、discoverable モードを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
 # bluetoothctl discoverable on&lt;br /&gt;
&lt;br /&gt;
discoverable モードがオンになっていることを確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl show|&lt;br /&gt;
	Powered: yes&lt;br /&gt;
	Discoverable: yes&lt;br /&gt;
	Pairable: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/bluetooth/main.conf}} の {{ic|PairableTimeout}} と {{ic|DiscoverableTimeout}} を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
まだコンピュータが表示されない場合、以下のように {{ic|/etc/bluetooth/main.conf}} 内のデバイスクラスを変更してみて下さい:&lt;br /&gt;
&lt;br /&gt;
 # Default device class. Only the major and minor device class bits are&lt;br /&gt;
 # considered.&lt;br /&gt;
 #Class = 0x000100 # Computer Type (from default config)&lt;br /&gt;
 Class = 0x100100 # (Object-Transfer Service &amp;amp; Computer Type)&lt;br /&gt;
&lt;br /&gt;
{{Note|場合によっては、{{ic|main.conf}} 内の {{ic|Class}} はデバイスの初期化後に上書きされます。なので、{{ic|hciconfig hci0 class 100100}} のようにクラスを直接設定してください。}}&lt;br /&gt;
&lt;br /&gt;
あるユーザは、携帯からコンピュータを見られるようにするためにはこうするしか無いと報告しています。LG TV(そして、一部の他の機器)はオーディオデバイスから発見可能です。なので、{{ic|000414}} (soundbar クラス)を使用することでそのようなデバイスを発見できるようにできます。&lt;br /&gt;
&lt;br /&gt;
Bluetooth デバイス/サービスのクラスを生成するには https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html を見てください。&lt;br /&gt;
&lt;br /&gt;
==== デバイスを接続した数秒後に切断してしまう ====&lt;br /&gt;
&lt;br /&gt;
デバイスを接続したすぐ後に切断が発生し、ジャーナルの出力に以下のようなメッセージが確認できる場合:&lt;br /&gt;
&lt;br /&gt;
 bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)&lt;br /&gt;
 bluetoothd: connect error: Connection refused (111)&lt;br /&gt;
&lt;br /&gt;
おそらく別のオペレーティングシステムで同一の Bluetooth アダプタを使ってデバイスがペアリングされていることが原因です (例: デュアルブート)。一部のデバイスは同一の MAC アドレス (例: Bluetooth アダプタ) に対して複数のペアリングを関連付けた場合に対処できません。この問題を解決するには [[#デュアルブートペアリング]] の指示に従ってください。&lt;br /&gt;
&lt;br /&gt;
==== スキャンしてもデバイスが表示されない ====&lt;br /&gt;
&lt;br /&gt;
Bluetooth Low Energy を使用しているデバイスは bluetoothctl でスキャンしても表示されないことがあります (例: [[Logitech MX Master]])。{{ic|transport le}} を使ってスキャンすることができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[bluetooth]# menu scan&lt;br /&gt;
[bluetooth]# transport le&lt;br /&gt;
[bluetooth]# back&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
[bluetooth]# devices&lt;br /&gt;
...&lt;br /&gt;
Device XX:XX:XX:XX:XX:XX DA V2 X &amp;lt;---- 低消費電力なデバイス&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
もう一つの方法は、{{aur|bluez-utils-compat}} をインストールし、{{ic|bluetooth.service}} を[[開始]]し、以下を実行することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|# bluetoothctl|&lt;br /&gt;
[NEW] Controller (MAC) myhostname [default]&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# power on&lt;br /&gt;
[CHG] Controller (MAC) Class: 0x0c010c&lt;br /&gt;
Changing power on succeeded&lt;br /&gt;
[CHG] Controller (MAC) Powered: yes&lt;br /&gt;
&lt;br /&gt;
[bluetooth]# scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
[CHG] Controller (MAC) Discovering: yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のターミナルで:&lt;br /&gt;
&lt;br /&gt;
 # hcitool lescan&lt;br /&gt;
&lt;br /&gt;
デバイスが表示されるまで待機してから hcitool を {{ic|Ctrl+c}} で閉じてください。bluetoothctl からデバイスが認識されたら通常通りにペアリングできます。&lt;br /&gt;
&lt;br /&gt;
==== Intel Corp. AX200 Bluetooth で BLE デバイスが見つからない ====&lt;br /&gt;
&lt;br /&gt;
どうやら、このデバイスでは BLE のパッシブスキャンが壊れているようです。詳細は[https://community.intel.com/t5/Wireless/AX200-Passive-BLE-scan-linux/m-p/1227456 上流のバグレポート]を見てください。&lt;br /&gt;
&lt;br /&gt;
==== スリープ後に再接続できない ====&lt;br /&gt;
&lt;br /&gt;
スリープ後や、コンピュータがスリープから復帰した後に、デバイスが自動的に再接続されないことがあります。&lt;br /&gt;
&lt;br /&gt;
この時、ログに以下のエラーが記録されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
bluetoothd[487]: Authentication attempt without agent&lt;br /&gt;
bluetoothd[487]: Access denied: org.bluez.Error.Rejected&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、デバイスが &#039;&#039;trusted&#039;&#039; としてマークされていないことが原因です。[[#ペアリング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== デバイス固有の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth マウスのラグ / 接続断 / 応答なし ====&lt;br /&gt;
&lt;br /&gt;
[[Bluetooth マウス#トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== オーディオデバイスが br-connection-profile-unavailable で接続に失敗する ====&lt;br /&gt;
&lt;br /&gt;
PipeWire (pulseaudio-bluetooth ではない) が使用されているが、PipeWire のインスタンスが実行されていない場合、bluetooth オーディオデバイスは接続に失敗します。PipeWire デーモンを開始するには、{{ic|pipewire.service}} [[ユーザーユニット]]を[[開始]]するか、何らかの音声を再生してください。その後、オーディオデバイスをもう一度接続してみてください。&lt;br /&gt;
&lt;br /&gt;
==== ヘッドホンとマウスの干渉 ====&lt;br /&gt;
&lt;br /&gt;
Bluetooth マウスとキーボードを同時に使用しているときに音声が途切れる場合は #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215 で参照されているように、次を試してくみてださい:&lt;br /&gt;
&lt;br /&gt;
 # hciconfig hci0 lm ACCEPT,MASTER&lt;br /&gt;
 # hciconfig hci0 lp HOLD,SNIFF,PARK&lt;br /&gt;
&lt;br /&gt;
==== TP-LINK UB400 と Xbox のコントローラが接続/切断を繰り返す ====&lt;br /&gt;
&lt;br /&gt;
以下の設定を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/bluetooth/main.conf|2=&lt;br /&gt;
...&lt;br /&gt;
[General]&lt;br /&gt;
JustWorksRepairing = always&lt;br /&gt;
FastConnectable = true&lt;br /&gt;
Class = 0x000100&lt;br /&gt;
...&lt;br /&gt;
[GATT]&lt;br /&gt;
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55&lt;br /&gt;
AutoEnable=true&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、{{ic|bluetooth.service}} を[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
関連する [https://github.com/atar-axis/xpadneo/issues/166 xpadneo に関する議論]を見ることができますが、xpadneo のドライバは必要ありません。&lt;br /&gt;
&lt;br /&gt;
=== ファイル転送の問題 ===&lt;br /&gt;
&lt;br /&gt;
==== gnome-bluetooth ====&lt;br /&gt;
&lt;br /&gt;
bluetooth-properties でファイルの受信を有効にしようとしたときに以下のメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Bluetooth OBEX start failed: Invalid path&lt;br /&gt;
 Bluetooth FTP start failed: Invalid path&lt;br /&gt;
&lt;br /&gt;
[[XDG ユーザーディレクトリ]]が存在することを確認してください。&lt;br /&gt;
&lt;br /&gt;
==== シンボリックリンクのせいで、転送されたファイルを受信できない ====&lt;br /&gt;
&lt;br /&gt;
有効な Bluetooth 接続でファイルの受信に失敗する場合、問題はファイルの転送パス内のシンボリックリンクである場合があります。ジャーナルに以下のようなログが現れます:&lt;br /&gt;
&lt;br /&gt;
 Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)&lt;br /&gt;
&lt;br /&gt;
エラーメッセージに表示されれたパス内にシンボリックリンクが含まれている場合、obexd はデフォルトで[https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/obexd/plugins/filesystem.c#n90 それを拒否します]。この挙動は、[[ドロップインファイル]]を {{ic|obex.service}} [[systemd/ユーザー|ユーザサービス]]に対して使うことにより初期化時に上書きできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/obex.service.d/10-symlink.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/lib/bluetooth/obexd --symlinks&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、ユーザの &#039;&#039;systemd&#039;&#039; マネージャの設定を[[リロード]]し、{{ic|obex.service}} ユーザユニットを[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://averylarsen.com/2019/12/20/keeping-bluetooth-devices-paired-between-linux-and-windows/ Keeping Bluetooth devices paired between Linux and Windows]&lt;br /&gt;
* [https://nullroute.eu.org/~grawity/bluetooth-key-sharing.html Bluetooth link keys on dual-boot systems]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bluetooth|2023-11-03|791392}}&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Vulkan&amp;diff=41186</id>
		<title>Vulkan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Vulkan&amp;diff=41186"/>
		<updated>2025-12-04T08:58:17Z</updated>

		<summary type="html">&lt;p&gt;N: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:グラフィックス]]&lt;br /&gt;
[[Category:開発]]&lt;br /&gt;
[[en:Vulkan]]&lt;br /&gt;
[[pt:Vulkan]]&lt;br /&gt;
[[ru:Vulkan]]&lt;br /&gt;
[[zh-hans:Vulkan]]&lt;br /&gt;
[[Wikipedia:ja:Vulkan]] より:&lt;br /&gt;
:Vulkanは、低オーバーヘッドのクロスプラットフォーム3DグラフィックスおよびコンピュートAPIです。2016年に初めてリリースされ、[[OpenGL]] の後継として登場しました。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.khronos.org/vulkan/ Khronos] のウェブサイトを参照してください。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|[[ハイブリッドグラフィック]] ([[NVIDIA Optimus]]/AMD Dynamic Switchable Graphics) の場合:&lt;br /&gt;
* Vulkan は [[Bumblebee]] で公式ではサポートされていません。[https://github.com/Bumblebee-Project/Bumblebee/issues/769] を見てください。しかし、{{Pkg|primus_vk}} により動作します。&lt;br /&gt;
* Radeon の Vulkan ドライバーは [[PRIME]] をサポートしています。[https://www.phoronix.com/scan.php?page&amp;amp;#61;news_item&amp;amp;px&amp;amp;#61;RADV-PRIME-Lands] を参照。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Vulkan アプリを実行するには {{pkg|vulkan-icd-loader}} と (32ビットのアプリケーションを実行したい場合は {{pkg|lib32-vulkan-icd-loader}} も)、使用しているグラフィックカードの Vulkan ドライバーを[[インストール]]する必要があります:&lt;br /&gt;
&lt;br /&gt;
* [[AMD]]: {{Pkg|vulkan-radeon}} (または {{Pkg|lib32-vulkan-radeon}})&lt;br /&gt;
* [[Intel]]: {{Pkg|vulkan-intel}} (または {{Pkg|lib32-vulkan-intel}})&lt;br /&gt;
* [[NVIDIA]]: 二種類の実装があります:&lt;br /&gt;
** {{Pkg|nvidia-utils}}(または {{Pkg|lib32-nvidia-utils}}) - NVIDIA製(プロプライエタリ)&lt;br /&gt;
** {{Pkg|vulkan-nouveau}}(または {{Pkg|lib32-vulkan-nouveau}}) - NVK(Mesaプロジェクトの一部){{Note|NVKを有効にするには、追加のシステム設定が必要です。詳細については、[[Nouveau#Using the Mesa NVK Vulkan Driver]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
以下はソフトウェアラスタライザーで、Vulkanサポートを提供しないデバイスで使用することができます。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Lavapipe&#039;&#039;&#039;: {{Pkg|vulkan-swrast}}(または {{Pkg|lib32-vulkan-swrast}})&lt;br /&gt;
* &#039;&#039;&#039;SwiftShader&#039;&#039;&#039;: {{AUR|swiftshader-git}}&lt;br /&gt;
&lt;br /&gt;
Vulkan アプリケーション開発には、{{Pkg|vulkan-headers}} を[[インストール]]し、オプションで {{Pkg|vulkan-validation-layers}}、{{AUR|vulkan-man-pages}}、および {{Pkg|vulkan-tools}} をインストールできます(vulkaninfo や vkcube ツールが含まれています)&lt;br /&gt;
&lt;br /&gt;
== 検証 ==&lt;br /&gt;
&lt;br /&gt;
システムに現在インストールされている Vulkan 実装を確認するには、次のコマンドを使用します。&lt;br /&gt;
&lt;br /&gt;
 $ ls /usr/share/vulkan/icd.d/&lt;br /&gt;
&lt;br /&gt;
Vulkan がハードウェアで動作していることを確認するには、{{Pkg|vulkan-tools}} を[[インストール]]し、{{ic|vulkaninfo}} を使って関連情報をシステムから抜き出します。グラフックスカードの情報を手に入れれば、Vulkan が動作していることを知ることができます。&lt;br /&gt;
&lt;br /&gt;
 $ vulkaninfo&lt;br /&gt;
&lt;br /&gt;
さらなる情報は https://linuxconfig.org/install-and-test-vulkan-on-linux で見ることができます。&lt;br /&gt;
&lt;br /&gt;
== 切り替え ==&lt;br /&gt;
&lt;br /&gt;
=== デバイス間の切り替え ===&lt;br /&gt;
&lt;br /&gt;
複数の GPU を搭載したシステムでは、特定の GPU の使用を強制する必要がある場合があります。これを動作させるには、{{Pkg|vulkan-mesa-layers}} が必要です。{{ic|MESA_VK_DEVICE_SELECT}} を {{ic|&#039;&#039;vendorID:deviceID&#039;&#039;}} に設定することで、希望する GPU を選択できます。&lt;br /&gt;
&lt;br /&gt;
候補を一覧表示するには、以下のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 $ MESA_VK_DEVICE_SELECT=list vulkaninfo&lt;br /&gt;
&lt;br /&gt;
指定した値の末尾に {{ic|!}} を付けることで、この動作を強制することができます。詳細については、[https://docs.mesa3d.org/envvars.html#vulkan-mesa-device-select-layer-environment-variables Vulkan mesa device select layer environment variables] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== AMD ドライバを切り替える ===&lt;br /&gt;
&lt;br /&gt;
AMD のシステム上では、一度に複数の Vulkan ドライバをインストールすることができます。なので、それらを切り替えたい場合があります。&lt;br /&gt;
&lt;br /&gt;
==== 環境変数で選択する ====&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法は AMDVLK クローズドドライバの選択をサポートしません。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|amdvlk}} 2021.Q3.4 以降、新しい切り替えロジックが実装されました。これにより、AMDVLK がデフォルトとなり、以下のいずれかを行う必要があります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=AMD_VULKAN_ICD=RADV}} を設定し、AMDVLK のデフォルトから他のものに切り替える。&lt;br /&gt;
* あるいは、グローバルに {{ic|1=DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1}} を設定し、以下の ICD ローダの方法を再有効化する。&lt;br /&gt;
&lt;br /&gt;
{{ic|1=DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1}} が設定されると、{{ic|VK_ICD_FILENAMES}} 環境変数を設定することによりドライバを選択することができます。例えば、[[Steam]] を RADV ドライバで実行するようにするには:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam&lt;br /&gt;
&lt;br /&gt;
32 ビットのゲームのクラッシュを回避するために、32 ビット版と 64 ビットを環境変数に割り当てることができます。&lt;br /&gt;
&lt;br /&gt;
==== AMD Vulkan Prefixes で選択する ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/AndrewShark/amd-vulkan-prefixes AMD Vulkan Prefixes] は3つの Vulkan 実装を切り替えるためのスクリプトです。{{AUR|amd-vulkan-prefixes}} を[[インストール]]し、アプリケーションの前にお望みの接頭辞を付けてください。提供される実行ファイルは {{ic|vk_radv}}、{{ic|vk_amdvlk}}、そして {{ic|vk_pro}} です。例えば、AMDVLK クローズドドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ vk_pro &#039;&#039;command&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== ソフトウェアレンダリング ==&lt;br /&gt;
&lt;br /&gt;
ソフトウェア Vulkan ラスタライザーとして知られる lavapipe をインストールすることができます。例えば、ハードウェアの問題をデバッグするために使用します: {{Pkg|vulkan-swrast}} (または32ビット版の {{Pkg|lib32-vulkan-swrast}})&lt;br /&gt;
&lt;br /&gt;
以下の例は、必要な環境変数を設定して、Vulkan と [[OpenGL#Mesa|OpenGL]] の完全なソフトウェアレンダリングを強制するために &#039;&#039;vulkaninfo&#039;&#039; を実行する方法を示しています ({{ic|1=__GLX_VENDOR_LIBRARY_NAME=mesa}} により、コマンドが [[PRIME]] ユーザーにも動作するようになります):&lt;br /&gt;
&lt;br /&gt;
 $ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json vulkaninfo&lt;br /&gt;
&lt;br /&gt;
== Vulkan ハードウェアデータベース ==&lt;br /&gt;
&lt;br /&gt;
[https://vulkan.gpuinfo.org/ Vulkan Hardware Database] には、ユーザーが報告した GPU/ドライバーの組み合わせが提供されています。独自の情報を指定するには、{{AUR|vulkan-caps-viewer-wayland}} または {{AUR|vulkan-caps-viewer-x11}} を使用します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA - vulkanが動作しない、または初期化できない ===&lt;br /&gt;
&lt;br /&gt;
==== 環境変数 ====&lt;br /&gt;
&lt;br /&gt;
無効または矛盾する[[環境変数]]の値が原因で、Vulkan が失敗することがあります。不適切な値は、複数の GPU が搭載されたマシンで意図した GPU ではなく別の GPU を使用する原因となることもあります。環境変数を適切に設定することで、[https://bbs.archlinux.org/viewtopic.php?pid=2152232#p2152232 必要ないときにセカンダリ GPU を電源オフにする]のにも役立ちます。&lt;br /&gt;
&lt;br /&gt;
==== GPU の切り替え ====&lt;br /&gt;
&lt;br /&gt;
マシンに複数の GPU が搭載されていて、Vulkan がそのうちの1つを認識できない場合、その GPU が BIOS/UEFI やカーネルで無効にされていないことを確認してください。GPU 間の切り替え方法の概要については [[NVIDIA Optimus]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
現在の状態を確認するための例コマンド({{aur|optimus-manager-git}} を使用):&lt;br /&gt;
&lt;br /&gt;
{{hc|$ optimus-manager --status|&lt;br /&gt;
Optimus Manager (Client) version 1.4&lt;br /&gt;
&lt;br /&gt;
Current GPU mode : nvidia&lt;br /&gt;
GPU mode requested for next login : no change&lt;br /&gt;
GPU at startup : integrated&lt;br /&gt;
Temporary config path: no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== GSPファームウェア ====&lt;br /&gt;
&lt;br /&gt;
[https://download.nvidia.com/XFree86/Linux-x86_64/555.42.02/README/gsp.html GSP ファームウェア]は、2024年6月にリリースされた NVIDIA ドライバのバージョン555以降、デフォルトで有効になっており、[https://bbs.archlinux.org/viewtopic.php?pid=2181317 Vulkan の失敗やシステムクラッシュを含むさまざまな問題]の原因として知られています。&lt;br /&gt;
&lt;br /&gt;
これを無効にするには、{{ic|1=NVreg_EnableGpuFirmware=0}} [[モジュールパラメータ]]を{{ic|nvidia}}カーネルモジュールに設定します。これは独自の NVIDIA ドライバでのみ機能します:オープンソースドライバから切り替える場合は[[NVIDIA#インストール]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
必要に応じて [[initramfs の再生成]] を行うことを忘れないでください。この新しいカーネルモジュールオプションを有効にするには、再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== No device for the display GPU found. Are the intel-mesa drivers installed? ===&lt;br /&gt;
&lt;br /&gt;
環境変数 VK_ICD_FILENAMES に intel_icd と primus_vk_wrapper の両方のセットしてみてください。&lt;br /&gt;
&lt;br /&gt;
 export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/primus_vk_wrapper.json&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - vulkaninfo 後に ERROR_INITIALIZATION_FAILED ===&lt;br /&gt;
&lt;br /&gt;
GCN1 または GCN2 ファミリの AMD カードで {{ic|vulkaninfo}} を実行した後、次のようなエラーメッセージが表示された場合:&lt;br /&gt;
{{bc|ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h:240:vkEnumerateInstanceExtensionProperties failed with ERROR_INITIALIZATION_FAILED}}&lt;br /&gt;
次に、このモデルのグラフィックス カードのサポートが正しく有効になっているかどうかを確認します ([[AMDGPU#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]])&lt;br /&gt;
&lt;br /&gt;
GPU ドライバーが正しくロードされているかどうかを確認する方法の 1 つは、{{ic|lspci -k}} です。このコマンドを実行した後、GPU のカーネル ドライバーを確認してください。{{ic|amdgpu}} である必要があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -k|&lt;br /&gt;
...&lt;br /&gt;
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]&lt;br /&gt;
	Subsystem: Gigabyte Technology Co., Ltd Device 226c&lt;br /&gt;
	Kernel driver in use: amdgpu&lt;br /&gt;
	Kernel modules: radeon, amdgpu&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題に関するいくつかのフォーラム スレッド: [https://bbs.archlinux.org/viewtopic.php?id=254015] [https://bbs.archlinux.org/viewtopic.php?id=253843]&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - DirectX Vulkan ゲームのプレイ中にがハングする ===&lt;br /&gt;
&lt;br /&gt;
DirectX Vulkan を使用して一部のゲームをプレイすると、Radeon-Vulkan がドライバーや GPU のハングを引き起こすようです。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
kernel: [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!&lt;br /&gt;
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx_0.0.0 timeout, signaled ..., emitted ...&lt;br /&gt;
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process ... pid ... thread dxvk-submit pid&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
AMDVLK に切り替えるか有効にすると、問題が解決されるようです。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - DirectX Vulkan ゲームでクラッシュする ===&lt;br /&gt;
&lt;br /&gt;
AMDVLK は複数のユーザーによるクラッシュを引き起こすと報告されています ([https://bbs.archlinux.org/viewtopic.php?id=284118 BBS#284118]、[https://bbs.archlinux.org/viewtopic.php? id=283008 BBS#283008]、[https://bbs.archlinux.org/viewtopic.php?id=274737 BBS#274737]): Radeon-Vulkan ドライバーに切り替えるか有効にすると、問題が解決します。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - Vulkan アプリケーションの起動が遅い ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|cuda}} をインストールすると、例えば Chromium などの Vulkan アプリケーションの起動が遅いことがあります。これは、{{Pkg|nvidia-utils}} が Vulkan ドライバを提供しており、Vulkan が最初に nvidia ドライバを試み、その後に radeon ドライバを試すためです。これを解決するには、[[環境変数]] {{ic|VK_DRIVER_FILES}} を {{ic|/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json}} に設定します。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - Found no drivers! ===&lt;br /&gt;
&lt;br /&gt;
{{ic|Found no drivers!}} に遭遇した場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ vulkaninfo|&lt;br /&gt;
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0.  Skipping ICD.&lt;br /&gt;
ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers!&lt;br /&gt;
Cannot create Vulkan instance.&lt;br /&gt;
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.&lt;br /&gt;
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools-1.3.269/vulkaninfo/./vulkaninfo.h:688:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
AMD は定期的に [https://www.phoronix.com/news/AMDVLK-2021.Q2.6 pre-Polaris] および [https://www.phoronix.com/news/Mesa-24.0-Faster-RADV-Vega Vega] のサポートを終了しています。もしあなたの GPU のサポートが{{Pkg|amdvlk}} から削除された場合は、[[アンインストール]] して、{{Pkg|vulkan-radeon}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
=== Bcachefs ルートで32ビットアプリケーションがドライバを見つけられない ===&lt;br /&gt;
&lt;br /&gt;
Bcachefs には32ビットプログラムとの互換性の問題があり、このファイルシステムをルートとして使用している場合、Vulkan ICD ローダーがドライバを見つけることができなくなります([[Bcachefs#32-bit programs cannot see directory contents]])&lt;br /&gt;
&lt;br /&gt;
この問題は、検索されるパスの1つに別のファイルシステムをマウントし、そのデータをコピーすることで回避できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|マウントされたファイルシステムはそのディレクトリをオーバーレイし、元の内容を Pacman やあなたが読み書きできないようにします。{{ic|/usr/share/vulkan}} 上にマウントしないでください。パッケージの変更や更新はマウントされたファイルシステム内のファイルのみを変更するため、アンマウント時に破損を引き起こす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /usr/local/share/vulkan&lt;br /&gt;
 # mount -t tmpfs foo /usr/local/share/vulkan&lt;br /&gt;
 # cp -r /usr/share/vulkan/* /usr/local/share/vulkan&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Vulkan&amp;diff=41185</id>
		<title>Vulkan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Vulkan&amp;diff=41185"/>
		<updated>2025-12-04T08:57:07Z</updated>

		<summary type="html">&lt;p&gt;N: /* インストール */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:グラフィックス]]&lt;br /&gt;
[[Category:開発]]&lt;br /&gt;
[[en:Vulkan]]&lt;br /&gt;
[[pt:Vulkan]]&lt;br /&gt;
[[ru:Vulkan]]&lt;br /&gt;
[[zh-hans:Vulkan]]&lt;br /&gt;
[[Wikipedia:ja:Vulkan]] より:&lt;br /&gt;
:Vulkanは、低オーバーヘッドのクロスプラットフォーム3DグラフィックスおよびコンピュートAPIです。2016年に初めてリリースされ、[[OpenGL]] の後継として登場しました。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.khronos.org/vulkan/ Khronos] のウェブサイトを参照してください。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Note|[[ハイブリッドグラフィック]] ([[NVIDIA Optimus]]/AMD Dynamic Switchable Graphics) の場合:&lt;br /&gt;
* Vulkan は [[Bumblebee]] で公式ではサポートされていません。[https://github.com/Bumblebee-Project/Bumblebee/issues/769] を見てください。しかし、{{Pkg|primus_vk}} により動作します。&lt;br /&gt;
* Radeon の Vulkan ドライバーは [[PRIME]] をサポートしています。[https://www.phoronix.com/scan.php?page&amp;amp;#61;news_item&amp;amp;px&amp;amp;#61;RADV-PRIME-Lands] を参照。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Vulkan アプリを実行するには {{pkg|vulkan-icd-loader}} と (32ビットのアプリケーションを実行したい場合は {{pkg|lib32-vulkan-icd-loader}} も)、使用しているグラフィックカードの Vulkan ドライバーを[[インストール]]する必要があります:&lt;br /&gt;
&lt;br /&gt;
* [[AMD]]: {{Pkg|vulkan-radeon}} (または {{Pkg|lib32-vulkan-radeon}})&lt;br /&gt;
* [[Intel]]: {{Pkg|vulkan-intel}} (または {{Pkg|lib32-vulkan-intel}})&lt;br /&gt;
* [[NVIDIA]]: 二種類の実装があります。&lt;br /&gt;
** {{Pkg|nvidia-utils}}(または {{Pkg|lib32-nvidia-utils}}) - NVIDIA製(プロプライエタリ)&lt;br /&gt;
** {{Pkg|vulkan-nouveau}}(または {{Pkg|lib32-vulkan-nouveau}}) - NVK(Mesaプロジェクトの一部){{Note|NVKを有効にするには、追加のシステム設定が必要です。詳細については、[[Nouveau#Using the Mesa NVK Vulkan Driver]] をご覧ください。}}&lt;br /&gt;
&lt;br /&gt;
以下はソフトウェアラスタライザーで、Vulkanサポートを提供しないデバイスで使用することができます。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Lavapipe&#039;&#039;&#039;: {{Pkg|vulkan-swrast}}(または {{Pkg|lib32-vulkan-swrast}})&lt;br /&gt;
* &#039;&#039;&#039;SwiftShader&#039;&#039;&#039;: {{AUR|swiftshader-git}}&lt;br /&gt;
&lt;br /&gt;
Vulkan アプリケーション開発には、{{Pkg|vulkan-headers}} を[[インストール]]し、オプションで {{Pkg|vulkan-validation-layers}}、{{AUR|vulkan-man-pages}}、および {{Pkg|vulkan-tools}} をインストールできます(vulkaninfo や vkcube ツールが含まれています)&lt;br /&gt;
&lt;br /&gt;
== 検証 ==&lt;br /&gt;
&lt;br /&gt;
システムに現在インストールされている Vulkan 実装を確認するには、次のコマンドを使用します。&lt;br /&gt;
&lt;br /&gt;
 $ ls /usr/share/vulkan/icd.d/&lt;br /&gt;
&lt;br /&gt;
Vulkan がハードウェアで動作していることを確認するには、{{Pkg|vulkan-tools}} を[[インストール]]し、{{ic|vulkaninfo}} を使って関連情報をシステムから抜き出します。グラフックスカードの情報を手に入れれば、Vulkan が動作していることを知ることができます。&lt;br /&gt;
&lt;br /&gt;
 $ vulkaninfo&lt;br /&gt;
&lt;br /&gt;
さらなる情報は https://linuxconfig.org/install-and-test-vulkan-on-linux で見ることができます。&lt;br /&gt;
&lt;br /&gt;
== 切り替え ==&lt;br /&gt;
&lt;br /&gt;
=== デバイス間の切り替え ===&lt;br /&gt;
&lt;br /&gt;
複数の GPU を搭載したシステムでは、特定の GPU の使用を強制する必要がある場合があります。これを動作させるには、{{Pkg|vulkan-mesa-layers}} が必要です。{{ic|MESA_VK_DEVICE_SELECT}} を {{ic|&#039;&#039;vendorID:deviceID&#039;&#039;}} に設定することで、希望する GPU を選択できます。&lt;br /&gt;
&lt;br /&gt;
候補を一覧表示するには、以下のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 $ MESA_VK_DEVICE_SELECT=list vulkaninfo&lt;br /&gt;
&lt;br /&gt;
指定した値の末尾に {{ic|!}} を付けることで、この動作を強制することができます。詳細については、[https://docs.mesa3d.org/envvars.html#vulkan-mesa-device-select-layer-environment-variables Vulkan mesa device select layer environment variables] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== AMD ドライバを切り替える ===&lt;br /&gt;
&lt;br /&gt;
AMD のシステム上では、一度に複数の Vulkan ドライバをインストールすることができます。なので、それらを切り替えたい場合があります。&lt;br /&gt;
&lt;br /&gt;
==== 環境変数で選択する ====&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法は AMDVLK クローズドドライバの選択をサポートしません。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|amdvlk}} 2021.Q3.4 以降、新しい切り替えロジックが実装されました。これにより、AMDVLK がデフォルトとなり、以下のいずれかを行う必要があります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=AMD_VULKAN_ICD=RADV}} を設定し、AMDVLK のデフォルトから他のものに切り替える。&lt;br /&gt;
* あるいは、グローバルに {{ic|1=DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1}} を設定し、以下の ICD ローダの方法を再有効化する。&lt;br /&gt;
&lt;br /&gt;
{{ic|1=DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1}} が設定されると、{{ic|VK_ICD_FILENAMES}} 環境変数を設定することによりドライバを選択することができます。例えば、[[Steam]] を RADV ドライバで実行するようにするには:&lt;br /&gt;
&lt;br /&gt;
 $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam&lt;br /&gt;
&lt;br /&gt;
32 ビットのゲームのクラッシュを回避するために、32 ビット版と 64 ビットを環境変数に割り当てることができます。&lt;br /&gt;
&lt;br /&gt;
==== AMD Vulkan Prefixes で選択する ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/AndrewShark/amd-vulkan-prefixes AMD Vulkan Prefixes] は3つの Vulkan 実装を切り替えるためのスクリプトです。{{AUR|amd-vulkan-prefixes}} を[[インストール]]し、アプリケーションの前にお望みの接頭辞を付けてください。提供される実行ファイルは {{ic|vk_radv}}、{{ic|vk_amdvlk}}、そして {{ic|vk_pro}} です。例えば、AMDVLK クローズドドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ vk_pro &#039;&#039;command&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== ソフトウェアレンダリング ==&lt;br /&gt;
&lt;br /&gt;
ソフトウェア Vulkan ラスタライザーとして知られる lavapipe をインストールすることができます。例えば、ハードウェアの問題をデバッグするために使用します: {{Pkg|vulkan-swrast}} (または32ビット版の {{Pkg|lib32-vulkan-swrast}})&lt;br /&gt;
&lt;br /&gt;
以下の例は、必要な環境変数を設定して、Vulkan と [[OpenGL#Mesa|OpenGL]] の完全なソフトウェアレンダリングを強制するために &#039;&#039;vulkaninfo&#039;&#039; を実行する方法を示しています ({{ic|1=__GLX_VENDOR_LIBRARY_NAME=mesa}} により、コマンドが [[PRIME]] ユーザーにも動作するようになります):&lt;br /&gt;
&lt;br /&gt;
 $ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json vulkaninfo&lt;br /&gt;
&lt;br /&gt;
== Vulkan ハードウェアデータベース ==&lt;br /&gt;
&lt;br /&gt;
[https://vulkan.gpuinfo.org/ Vulkan Hardware Database] には、ユーザーが報告した GPU/ドライバーの組み合わせが提供されています。独自の情報を指定するには、{{AUR|vulkan-caps-viewer-wayland}} または {{AUR|vulkan-caps-viewer-x11}} を使用します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA - vulkanが動作しない、または初期化できない ===&lt;br /&gt;
&lt;br /&gt;
==== 環境変数 ====&lt;br /&gt;
&lt;br /&gt;
無効または矛盾する[[環境変数]]の値が原因で、Vulkan が失敗することがあります。不適切な値は、複数の GPU が搭載されたマシンで意図した GPU ではなく別の GPU を使用する原因となることもあります。環境変数を適切に設定することで、[https://bbs.archlinux.org/viewtopic.php?pid=2152232#p2152232 必要ないときにセカンダリ GPU を電源オフにする]のにも役立ちます。&lt;br /&gt;
&lt;br /&gt;
==== GPU の切り替え ====&lt;br /&gt;
&lt;br /&gt;
マシンに複数の GPU が搭載されていて、Vulkan がそのうちの1つを認識できない場合、その GPU が BIOS/UEFI やカーネルで無効にされていないことを確認してください。GPU 間の切り替え方法の概要については [[NVIDIA Optimus]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
現在の状態を確認するための例コマンド({{aur|optimus-manager-git}} を使用):&lt;br /&gt;
&lt;br /&gt;
{{hc|$ optimus-manager --status|&lt;br /&gt;
Optimus Manager (Client) version 1.4&lt;br /&gt;
&lt;br /&gt;
Current GPU mode : nvidia&lt;br /&gt;
GPU mode requested for next login : no change&lt;br /&gt;
GPU at startup : integrated&lt;br /&gt;
Temporary config path: no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== GSPファームウェア ====&lt;br /&gt;
&lt;br /&gt;
[https://download.nvidia.com/XFree86/Linux-x86_64/555.42.02/README/gsp.html GSP ファームウェア]は、2024年6月にリリースされた NVIDIA ドライバのバージョン555以降、デフォルトで有効になっており、[https://bbs.archlinux.org/viewtopic.php?pid=2181317 Vulkan の失敗やシステムクラッシュを含むさまざまな問題]の原因として知られています。&lt;br /&gt;
&lt;br /&gt;
これを無効にするには、{{ic|1=NVreg_EnableGpuFirmware=0}} [[モジュールパラメータ]]を{{ic|nvidia}}カーネルモジュールに設定します。これは独自の NVIDIA ドライバでのみ機能します:オープンソースドライバから切り替える場合は[[NVIDIA#インストール]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
必要に応じて [[initramfs の再生成]] を行うことを忘れないでください。この新しいカーネルモジュールオプションを有効にするには、再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== No device for the display GPU found. Are the intel-mesa drivers installed? ===&lt;br /&gt;
&lt;br /&gt;
環境変数 VK_ICD_FILENAMES に intel_icd と primus_vk_wrapper の両方のセットしてみてください。&lt;br /&gt;
&lt;br /&gt;
 export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/primus_vk_wrapper.json&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - vulkaninfo 後に ERROR_INITIALIZATION_FAILED ===&lt;br /&gt;
&lt;br /&gt;
GCN1 または GCN2 ファミリの AMD カードで {{ic|vulkaninfo}} を実行した後、次のようなエラーメッセージが表示された場合:&lt;br /&gt;
{{bc|ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h:240:vkEnumerateInstanceExtensionProperties failed with ERROR_INITIALIZATION_FAILED}}&lt;br /&gt;
次に、このモデルのグラフィックス カードのサポートが正しく有効になっているかどうかを確認します ([[AMDGPU#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]])&lt;br /&gt;
&lt;br /&gt;
GPU ドライバーが正しくロードされているかどうかを確認する方法の 1 つは、{{ic|lspci -k}} です。このコマンドを実行した後、GPU のカーネル ドライバーを確認してください。{{ic|amdgpu}} である必要があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -k|&lt;br /&gt;
...&lt;br /&gt;
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]&lt;br /&gt;
	Subsystem: Gigabyte Technology Co., Ltd Device 226c&lt;br /&gt;
	Kernel driver in use: amdgpu&lt;br /&gt;
	Kernel modules: radeon, amdgpu&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題に関するいくつかのフォーラム スレッド: [https://bbs.archlinux.org/viewtopic.php?id=254015] [https://bbs.archlinux.org/viewtopic.php?id=253843]&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - DirectX Vulkan ゲームのプレイ中にがハングする ===&lt;br /&gt;
&lt;br /&gt;
DirectX Vulkan を使用して一部のゲームをプレイすると、Radeon-Vulkan がドライバーや GPU のハングを引き起こすようです。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
kernel: [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!&lt;br /&gt;
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx_0.0.0 timeout, signaled ..., emitted ...&lt;br /&gt;
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process ... pid ... thread dxvk-submit pid&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
AMDVLK に切り替えるか有効にすると、問題が解決されるようです。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - DirectX Vulkan ゲームでクラッシュする ===&lt;br /&gt;
&lt;br /&gt;
AMDVLK は複数のユーザーによるクラッシュを引き起こすと報告されています ([https://bbs.archlinux.org/viewtopic.php?id=284118 BBS#284118]、[https://bbs.archlinux.org/viewtopic.php? id=283008 BBS#283008]、[https://bbs.archlinux.org/viewtopic.php?id=274737 BBS#274737]): Radeon-Vulkan ドライバーに切り替えるか有効にすると、問題が解決します。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - Vulkan アプリケーションの起動が遅い ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|cuda}} をインストールすると、例えば Chromium などの Vulkan アプリケーションの起動が遅いことがあります。これは、{{Pkg|nvidia-utils}} が Vulkan ドライバを提供しており、Vulkan が最初に nvidia ドライバを試み、その後に radeon ドライバを試すためです。これを解決するには、[[環境変数]] {{ic|VK_DRIVER_FILES}} を {{ic|/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json}} に設定します。&lt;br /&gt;
&lt;br /&gt;
=== AMDGPU - Found no drivers! ===&lt;br /&gt;
&lt;br /&gt;
{{ic|Found no drivers!}} に遭遇した場合:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ vulkaninfo|&lt;br /&gt;
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0.  Skipping ICD.&lt;br /&gt;
ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers!&lt;br /&gt;
Cannot create Vulkan instance.&lt;br /&gt;
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.&lt;br /&gt;
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools-1.3.269/vulkaninfo/./vulkaninfo.h:688:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
AMD は定期的に [https://www.phoronix.com/news/AMDVLK-2021.Q2.6 pre-Polaris] および [https://www.phoronix.com/news/Mesa-24.0-Faster-RADV-Vega Vega] のサポートを終了しています。もしあなたの GPU のサポートが{{Pkg|amdvlk}} から削除された場合は、[[アンインストール]] して、{{Pkg|vulkan-radeon}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
=== Bcachefs ルートで32ビットアプリケーションがドライバを見つけられない ===&lt;br /&gt;
&lt;br /&gt;
Bcachefs には32ビットプログラムとの互換性の問題があり、このファイルシステムをルートとして使用している場合、Vulkan ICD ローダーがドライバを見つけることができなくなります([[Bcachefs#32-bit programs cannot see directory contents]])&lt;br /&gt;
&lt;br /&gt;
この問題は、検索されるパスの1つに別のファイルシステムをマウントし、そのデータをコピーすることで回避できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|マウントされたファイルシステムはそのディレクトリをオーバーレイし、元の内容を Pacman やあなたが読み書きできないようにします。{{ic|/usr/share/vulkan}} 上にマウントしないでください。パッケージの変更や更新はマウントされたファイルシステム内のファイルのみを変更するため、アンマウント時に破損を引き起こす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /usr/local/share/vulkan&lt;br /&gt;
 # mount -t tmpfs foo /usr/local/share/vulkan&lt;br /&gt;
 # cp -r /usr/share/vulkan/* /usr/local/share/vulkan&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=AMDGPU&amp;diff=41173</id>
		<title>AMDGPU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=AMDGPU&amp;diff=41173"/>
		<updated>2025-11-30T09:15:14Z</updated>

		<summary type="html">&lt;p&gt;N: /* インストール */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:グラフィックス]]&lt;br /&gt;
[[Category:X サーバー]]&lt;br /&gt;
[[de:AMDGPU]]&lt;br /&gt;
[[en:AMDGPU]]&lt;br /&gt;
[[zh-hans:AMDGPU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ATI}}&lt;br /&gt;
{{Related|Xorg}}&lt;br /&gt;
{{Related|Vulkan}}&lt;br /&gt;
{{Related|AMDGPU PRO}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:AMDGPU|AMDGPU]] は [[wikipedia:ja:Graphics_Core_Next|Graphics Core Next]] ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。&lt;br /&gt;
&lt;br /&gt;
== 適切なドライバーの選択 ==&lt;br /&gt;
&lt;br /&gt;
お持ちのカードに応じて、[[Xorg#AMD]] で適切なドライバーを見つけてください。このドライバは [https://www.x.org/wiki/RadeonFeature/ Southern Islands] (GCN 1。2012年リリース。) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。&lt;br /&gt;
&lt;br /&gt;
サポートされない GPU については、オープンソースの [[ATI]] ドライバを使用できます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|mesa}} パッケージを[[インストール]]してください。これには、3D アクセラレーションのための DRI ドライバーと、[[#ビデオアクセラレーション|動画デコードのアクセラレーション]]のための VA-API/VDPAU ドライバの両方が含まれています。&lt;br /&gt;
&lt;br /&gt;
* 32ビットアプリケーションのサポートに関しては、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} パッケージもインストールしてください。&lt;br /&gt;
* ([[Xorg]] での 2D アクセラレーションを提供する) DDX ドライバに関しては、{{Pkg|xf86-video-amdgpu}} パッケージをインストールすることで利用可能です。デフォルトの modesetting ドライバが存在するため、このパッケージは必要ありません。&lt;br /&gt;
* [[Vulkan]]をサポートするには、{{Pkg|vulkan-radeon}} (32ビットアプリケーションの場合は {{Pkg|lib32-vulkan-radeon}}) をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== 試験的 ===&lt;br /&gt;
&lt;br /&gt;
一部のユーザーにとっては、mesa の上流の試験的ビルドを使用する価値があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
{{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。&lt;br /&gt;
&lt;br /&gt;
* 32 ビットアプリケーションのサポートに関しては、&#039;&#039;mesa-git&#039;&#039; リポジトリ、または [[AUR]] から {{AUR|lib32-mesa-git}} もインストールしてください。&lt;br /&gt;
* ([[Xorg]] で 2D アクセラレーションを提供する) DDX ドライバに関しては、{{AUR|xf86-video-amdgpu-git}} パッケージをインストールしてください。&lt;br /&gt;
* &#039;&#039;mesa-git&#039;&#039; リポジトリを使用する [[Vulkan]] サポートに関しては、&#039;&#039;vulkan-radeon-git&#039;&#039; パッケージをインストールしてください。任意で、32 ビットアプリケーションをサポートするために &#039;&#039;lib32-vulkan-radeon-git&#039;&#039; パッケージもインストールしてください。AUR から {{AUR|mesa-git}} をビルドする場合、これは必要ないはずです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{AUR|mesa-git}} パッケージのコンパイルを行いたくない場合は、[[非公式ユーザーリポジトリ#mesa-git|mesa-git]] 非公式リポジトリを使用できます。}}&lt;br /&gt;
&lt;br /&gt;
=== Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化 ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル#公式サポートカーネル|公式サポートカーネル]]では、Southern Islands (GCN 1。2012年リリース。) 及び Sea Islands (GCN 2。2013年リリース。) のカードの AMDGPU サポートが有効化されています。{{ic|amdgpu}} カーネルドライバは [[ATI|radeon]] ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは {{ic|lspci -k}} で確認できます。以下のように出力されるはずです:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -k -d ::03xx|&lt;br /&gt;
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]&lt;br /&gt;
	Subsystem: Gigabyte Technology Co., Ltd Device 226c&lt;br /&gt;
	Kernel driver in use: amdgpu&lt;br /&gt;
	Kernel modules: radeon, amdgpu&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|amdgpu}} ドライバが使用されていない場合、次のセクションの指示に従ってください。&lt;br /&gt;
&lt;br /&gt;
==== amdgpu ドライバをロード ====&lt;br /&gt;
&lt;br /&gt;
{{ic|amdgpu}} モジュールと {{ic|radeon}} モジュールの両方の[[モジュールパラメータ]]は {{ic|1=cik_support=}} と {{ic|1=si_support=}} です。&lt;br /&gt;
&lt;br /&gt;
これらは、カーネルパラメータまたは &#039;&#039;modprobe&#039;&#039; 設定ファイルで設定する必要があり、カードの GCN バージョンによって異なります。&lt;br /&gt;
&lt;br /&gt;
どのカーネルカードを使用しているか不確かな場合は、両方のパラメータを使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[dmesg]] は、使用すべき正しい方のカーネルパラメータを示してくれる場合があります: {{ic|1=[..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override}}}}&lt;br /&gt;
&lt;br /&gt;
===== カーネルコマンドラインでモジュールパラメータを設定 =====&lt;br /&gt;
&lt;br /&gt;
次のいずれかの[[カーネルパラメータ]]を設定してください:&lt;br /&gt;
&lt;br /&gt;
* Southern Islands (SI): {{ic|1=radeon.si_support=0 amdgpu.si_support=1}}&lt;br /&gt;
* Sea Islands (CIK): {{ic|1=radeon.cik_support=0 amdgpu.cik_support=1}}&lt;br /&gt;
&lt;br /&gt;
さらに、統合 Sea Island (GCN 1.1) カードと AMD A10 APU を使用する場合、正しくブートさせるには Radeon Dynamic Power Management を無効化しておく必要がある場合があります。この機能には、グラフィックコアのクロックを動的に調整することで、APU の温度を下げ、静音性を高める目的があります。しかし、この機能のせいで再起動の無限ループに陥ることがあります。無効化するには、上記の手順に従い、{{ic|1=radeon.dpm=0}} をブートオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
==== 正しいモジュール順序を指定 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。&lt;br /&gt;
&lt;br /&gt;
===== カーネルモジュールパラメータを設定 =====&lt;br /&gt;
&lt;br /&gt;
Southern Islands (SI) の場合は {{ic|1=si_support=1}} [[カーネルモジュールパラメータ]]を、Sea Islands (CIK) の場合は {{ic|1=cik_support=1}} を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/amdgpu.conf|2=&lt;br /&gt;
options amdgpu si_support=1&lt;br /&gt;
options amdgpu cik_support=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/radeon.conf|2=&lt;br /&gt;
options radeon si_support=0&lt;br /&gt;
options radeon cik_support=0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|modconf}} が {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列にあることを確認し、[[Initramfs を再生成する|initramfs を再生成]]してください。&lt;br /&gt;
&lt;br /&gt;
===== amdgpu ドライバをサポートするカーネルをコンパイル =====&lt;br /&gt;
&lt;br /&gt;
[[カーネル]]をビルド/コンパイルする場合、{{ic|1=CONFIG_DRM_AMDGPU_SI=Y}} と {{ic|1=CONFIG_DRM_AMDGPU_CIK=Y}} の一方/両方を config で設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== ACO コンパイラ ===&lt;br /&gt;
&lt;br /&gt;
[https://steamcommunity.com/games/221410/announcements/detail/1602634609636894200 ACO コンパイラ]はオープンソースのシェーダコンパイラであり、[https://llvm.org/ LLVM コンパイラ]や [https://github.com/GPUOpen-Drivers/AMDVLK AMDVLK ドライバ]、[[wikipedia:ja:Microsoft Windows 10|Windows 10]] に直接対抗するために [[wikipedia:ja:Valve Corporation|Valve Corporation]] によって作成・開発されています。LLVM と AMDVLK よりも短いコンパイル時間と、ゲームでのより良いパフォーマンスを提供します。&lt;br /&gt;
&lt;br /&gt;
いくつかのベンチマークは [https://gist.github.com/pendingchaos/aba1e4c238cf039d17089f29a8c6aa63 GitHub] や Phoronix [https://www.phoronix.com/scan.php?page=article&amp;amp;item=radv-aco-llvm&amp;amp;num=1 (1)] [https://www.phoronix.com/scan.php?page=article&amp;amp;item=radv-aco-gcn10&amp;amp;num=1 (2)] [https://www.phoronix.com/scan.php?page=article&amp;amp;item=mesa20radv-aco-amdvlk&amp;amp;num=1 (3)] で見られます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|mesa}} バージョン [https://docs.mesa3d.org/relnotes/20.2.0.html#new-features 20.2] から、ACO はデフォルトのシェーダコンパイラとなっています。&lt;br /&gt;
&lt;br /&gt;
== ロード ==&lt;br /&gt;
&lt;br /&gt;
{{ic|amdgpu}} カーネルモジュールはシステムの起動時に自動的にロードされることになっています。&lt;br /&gt;
&lt;br /&gt;
ロードされない場合:&lt;br /&gt;
&lt;br /&gt;
* 必要な場合は [[#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]]していることを確認してください。&lt;br /&gt;
* 最新の {{Pkg|linux-firmware-amdgpu}} パッケージがインストールされていることを確認してください。このドライバは、正しくブートするために各モデルの最新のファームウェアを必要とします。&lt;br /&gt;
* [[カーネルパラメータ]]に {{ic|nomodeset}} や {{ic|1=vga=}} を指定して&#039;&#039;&#039;いない&#039;&#039;&#039;ことを確認してください。{{ic|amdgpu}} は [[KMS]] を必要とするからです。&lt;br /&gt;
* [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合、[[カーネルモード設定#KMS の早期開始]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== Xorg の設定 ==&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] は自動的にドライバをロードし、モニタの EDID を使ってネイティブの解像度を設定してくれます。設定が必要になるのは、ドライバをチューニングする場合のみです。&lt;br /&gt;
&lt;br /&gt;
手動で設定したい場合、{{ic|/etc/X11/xorg.conf.d/20-amdgpu.conf}} を作成して、以下を記述してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2=&lt;br /&gt;
Section &amp;quot;OutputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;AMD&amp;quot;&lt;br /&gt;
     MatchDriver &amp;quot;amdgpu&amp;quot;&lt;br /&gt;
     Driver &amp;quot;amdgpu&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このセクションを使って、機能を有効化したりドライバの設定を調整したりできます。ドライバオプションを設定する前に、まず {{man|4|amdgpu}} を見てください。&lt;br /&gt;
&lt;br /&gt;
=== TearFree レンダリング ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TearFree&#039;&#039; は、ハードウェアのページフリッピング機構を使ってティアリング防止を制御します。デフォルトでは、TearFree は、回転された出力、RandR 変換が適用された出力、RandR 1.4 スレーブ出力に対してオンになり、それら以外ではオフになります。{{ic|true}} か {{ic|false}} を指定することで、常にオンにしたり、常にオフにしたりもできます。&lt;br /&gt;
&lt;br /&gt;
 Option &amp;quot;TearFree&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[xrandr]] を使用して TearFree を一時的に有効にすることもできます:&lt;br /&gt;
&lt;br /&gt;
 $ xrandr --output &#039;&#039;output&#039;&#039; --set TearFree on&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;output&#039;&#039;}} は {{ic|DisplayPort-0}} や {{ic|HDMI-A-0}} のような形式である必要があります。この値は {{ic|xrandr -q}} で取得できます。&lt;br /&gt;
&lt;br /&gt;
=== DRI レベル ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;DRI&#039;&#039; は、有効にする DRI の最大レベルを設定します。有効な値は、DRI2 の場合は &#039;&#039;2&#039;&#039;、 DRI3 の場合は &#039;&#039;3&#039;&#039; です。 [[Xorg]] バージョンが 1.18.3 以降の場合、DRI3 のデフォルトは &#039;&#039;3&#039;&#039; です。それ以外の場合、 DRI2 が使用されます:&lt;br /&gt;
&lt;br /&gt;
 Option &amp;quot;DRI&amp;quot; &amp;quot;3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 可変リフレッシュレート ===&lt;br /&gt;
&lt;br /&gt;
[[可変リフレッシュレート]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 10 ビットカラー ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|10 ビットカラーを有効化すると、多くのアプリケーションでグラフィックの乱れやクラッシュを引き起こす場合があります。これには特に [[Steam/トラブルシューティング#Steam: An X Error occurred|Steam]] が含まれ、X Error によりクラッシュします。}}&lt;br /&gt;
&lt;br /&gt;
新しい AMD カードは 10bpc カラーをサポートしていますが、デフォルトは 24 ビットカラーであり、30 ビットカラーは明示的に有効にする必要があります。アプリケーションがこれもサポートしている場合、これを有効にすると、グラデーションの目に見えるバンディング/グラフィックの乱れを減らすことができます。モニターがサポートしているかどうかを確認するには、[[Xorg#一般|Xorg ログファイル]]で &#039;&#039;EDID&#039;&#039; を検索してください (例:{{ic|/var/log/Xorg.0.log}} または {{ic|~/.local/share/xorg/Xorg.0.log}}):&lt;br /&gt;
&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): EDID for output DisplayPort-0&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): EDID for output DisplayPort-1&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): Manufacturer: DEL  Model: a0ec  Serial#: 123456789&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): Year: 2018  Week: 23&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): EDID Version: 1.4&lt;br /&gt;
 [   336.695] (II) AMDGPU(0): Digital Display Input&lt;br /&gt;
 &#039;&#039;&#039;[   336.695] (II) AMDGPU(0): 10 bits per channel&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
現在有効になっているかどうかを確認するには、&#039;&#039;Depth&#039;&#039; を検索してください:&lt;br /&gt;
&lt;br /&gt;
 [   336.618] (**) AMDGPU(0): Depth 30, (--) framebuffer bpp 32&lt;br /&gt;
 [   336.618] (II) AMDGPU(0): Pixel depth = 30 bits stored in 4 bytes (32 bpp pixmaps)&lt;br /&gt;
&lt;br /&gt;
デフォルトの設定では、24 であると表示されます (24 ビットが 4 バイトに格納されている)。&lt;br /&gt;
&lt;br /&gt;
10ビットが機能するかどうかを確認するには、Xorg を実行している場合は終了し、白黒の縞模様を表示する {{ic|Xorg -retro}} を実行し、{{ic|Ctrl-Alt-F1}} と {{ic|Ctrl-C}} を押して X を終了し、{{ic|Xorg -depth 30 -retro}} を実行してください。これが正常に機能する場合は、10ビットが機能しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|startx}} を介して10ビットで起動するには、{{ic|startx -- -depth 30}} を使用してください。永続的に有効にするには、以下を作成または追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2=&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
	Identifier &amp;quot;asdf&amp;quot;&lt;br /&gt;
	DefaultDepth 30&lt;br /&gt;
EndSection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 出力のレイテンシを減らす ===&lt;br /&gt;
&lt;br /&gt;
レイテンシを最小化したい場合、ページフリッピングや TearFree を無効化できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2=&lt;br /&gt;
Section &amp;quot;OutputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;AMD&amp;quot;&lt;br /&gt;
     MatchDriver &amp;quot;amdgpu&amp;quot;&lt;br /&gt;
     Driver &amp;quot;amdgpu&amp;quot;&lt;br /&gt;
     Option &amp;quot;EnablePageFlip&amp;quot; &amp;quot;off&amp;quot;&lt;br /&gt;
     Option &amp;quot;TearFree&amp;quot; &amp;quot;false&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
レイテンシを更に減らしたい場合は [[ゲーム#DRI の遅延を軽減する]] を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Note|これらのオプションを設定すると、ティアリングや短時間のアーティファクトが発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
== 機能 ==&lt;br /&gt;
&lt;br /&gt;
=== ビデオアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
[[ハードウェアビデオアクセラレーション#AMD/ATI]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== モニタリング ===&lt;br /&gt;
&lt;br /&gt;
GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{Pkg|amdgpu_top}}}}&lt;br /&gt;
* {{App|nvtop|AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}&lt;br /&gt;
* {{App|radeontop|合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。|https://github.com/clbr/radeontop|{{Pkg|radeontop}}}}&lt;br /&gt;
&lt;br /&gt;
==== GUI ====&lt;br /&gt;
&lt;br /&gt;
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{Pkg|amdgpu_top}}}}&lt;br /&gt;
* {{App|AmdGuid|完全に Rust で書かれた、基本的なファンコントロール GUI。|https://github.com/Eraden/amdgpud|{{AUR|amdguid-wayland-bin}}, {{AUR|amdguid-glow-bin}}}}&lt;br /&gt;
* {{App|Radeon Profile|AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。|https://github.com/emerge-e-world/radeon-profile|{{AUR|radeon-profile-git}}}}&lt;br /&gt;
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール。|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
GPU の P-state を確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/pp_od_clk_voltage&lt;br /&gt;
&lt;br /&gt;
GPU をモニタリングするには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info&lt;br /&gt;
&lt;br /&gt;
GPU 使用率を確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/gpu_busy_percent&lt;br /&gt;
&lt;br /&gt;
GPU のクロックを確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/pp_dpm_sclk&lt;br /&gt;
&lt;br /&gt;
GPU 温度を確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input&lt;br /&gt;
&lt;br /&gt;
VRAM のクロックを確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/pp_dpm_mclk&lt;br /&gt;
&lt;br /&gt;
VRAM の使用率を確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/mem_info_vram_used&lt;br /&gt;
&lt;br /&gt;
VRAM のサイズを確認するには、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ cat /sys/class/drm/card0/device/mem_info_vram_total&lt;br /&gt;
&lt;br /&gt;
=== オーバークロック ===&lt;br /&gt;
&lt;br /&gt;
Linux 4.17 以降、以下の機能をブート時に有効化すると、{{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}} を介してグラフィックカードのクロックと電圧を調整できるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ブートパラメータ ====&lt;br /&gt;
&lt;br /&gt;
{{Ic|1=amdgpu.ppfeaturemask=0xffffffff}} [[カーネルパラメータ]] を追加して、sysfs でクロックと電圧を調整するアクセスをアンロックする必要があります。&lt;br /&gt;
&lt;br /&gt;
すべてのビットが定義されているわけではありません。今後、新しい機能が追加されるかもしれません。32ビットすべてを設定すると、不安定な機能が有効化され、画面のチラツキやサスペンドからの復帰に失敗するなどの問題が発生する場合があります。デフォルトの ppfeaturemask と共に PP_OVERDRIVE_MASK ビット (0x4000) を設定すれば十分なはずです。あなたのシステムにおいて適切なパラメータを計算するには、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ printf &#039;amdgpu.ppfeaturemask=0x%x\n&#039; &amp;quot;$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|sysfs では、{{ic|/sys/class/drm/...}} のようなパスはただのシンボリックリンクで、起動するごとに変化するかもしれません。永続的なパスは {{ic|/sys/devices/}} にあります (例: {{ic|/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/}})。信頼性の高い結果を得るには、コマンドを適宜調整してください。}}&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションに関する詳細は、カーネルドキュメントの [https://docs.kernel.org/gpu/amdgpu/thermal.html#pp-od-clk-voltage amdgpu サーマルコントロール]に関する部分を読んでください。&lt;br /&gt;
&lt;br /&gt;
手動オーバークロックを有効にするには、[[#パフォーマンスレベル]] で説明されているように {{ic|manual}} パフォーマンスレベルを選択してください。&lt;br /&gt;
&lt;br /&gt;
例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;s 7 1209 900&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_od_clk_voltage&lt;br /&gt;
&lt;br /&gt;
同じ手順を VRAM に対しても適用できます (例えば、Polaris 5xx シリーズカードでの最大 P-state 2):&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;m 2 1850 850&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_od_clk_voltage&lt;br /&gt;
&lt;br /&gt;
{{Warning|入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!}}&lt;br /&gt;
&lt;br /&gt;
適用するには:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;c&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_od_clk_voltage&lt;br /&gt;
&lt;br /&gt;
機能していることを確認するには、3D の負荷をかけている状態で、クロックと電圧を見てください:&lt;br /&gt;
&lt;br /&gt;
 # watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info&lt;br /&gt;
&lt;br /&gt;
以下でデフォルトの値にリセットできます:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;r&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_od_clk_voltage&lt;br /&gt;
&lt;br /&gt;
例えば、超省電力 P-state における (画面のちらつきやカクつきなどの) 問題を回避した場合などは、ドライバが特定の P-state へ切り替えるのを禁止することも可能です。最も高い VRAM P-state を強制し、GPU 自体は引き続き低いクロックで動作できるようにするには、まず利用可能な最も高い P-state を調べ、それを設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ cat /sys/class/drm/card0/device/pp_dpm_mclk|&lt;br /&gt;
0: 96Mhz *&lt;br /&gt;
1: 456Mhz&lt;br /&gt;
2: 675Mhz&lt;br /&gt;
3: 1000Mhz&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;manual&amp;quot; &amp;gt; /sys/class/drm/card0/device/power_dpm_force_performance_level&lt;br /&gt;
 # echo &amp;quot;3&amp;quot; &amp;gt;  /sys/class/drm/card0/device/pp_dpm_mclk&lt;br /&gt;
&lt;br /&gt;
上位3つの GPU P-state のみを許可するには:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;5 6 7&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_dpm_sclk&lt;br /&gt;
&lt;br /&gt;
GPU の最大電力消費量を設定するには (例えば 50 ワット):&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;&#039;50&#039;&#039;&#039;000000 &amp;gt; /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap&lt;br /&gt;
&lt;br /&gt;
{{Note|上記の手順は Polaris RX 560 カードでテストされました。別の GPU では、異なる挙動やバグが存在するかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
==== アシスト付き ====&lt;br /&gt;
&lt;br /&gt;
GPU を手動でオーバークロックしたくない場合、AMD GPU のオーバークロックやモニタリングをアシストするいくつかのツールがコミュニティによって提供されています。&lt;br /&gt;
&lt;br /&gt;
===== CLI ツール =====&lt;br /&gt;
&lt;br /&gt;
* {{App|amdgpu-clocks|AMD GPU のモニタリングやカスタムの P-state を設定するために使用できるスクリプト。起動時に自動的に設定を適用する systemd サービスもあります。|https://github.com/sibradzic/amdgpu-clocks|{{AUR|amdgpu-clocks-git}}}}&lt;br /&gt;
* {{App|ruby-amdgpu_fan|amdgpu Linux ドライバと対話するための Ruby で書かれた CLI ツール|https://github.com/HarlemSquirrel/amdgpu-fan-rb|{{AUR|ruby-amdgpu_fan}}}}&lt;br /&gt;
&lt;br /&gt;
===== GUI ツール =====&lt;br /&gt;
&lt;br /&gt;
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}&lt;br /&gt;
* {{App|CoreCtrl|アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。|https://gitlab.com/corectrl/corectrl|{{Pkg|corectrl}}}}&lt;br /&gt;
* {{App|LACT|AMD GPU の情報を見るための GTK ツール。{{Pkg|power-profiles-daemon}} と競合します。競合を防ぐには {{ic|amdgpu_dpm}} を後で無効化してください。[https://github.com/ilya-zlobintsev/LACT?tabreadme-ov-file#power-profiles-daemon-note]|https://github.com/ilya-zlobintsev/LACT|{{Pkg|lact}}}}&lt;br /&gt;
* {{App|Radeon Profile|AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。|https://github.com/emerge-e-world/radeon-profile|{{AUR|radeon-profile-git}}}}&lt;br /&gt;
&lt;br /&gt;
==== ブート時のスタートアップ ====&lt;br /&gt;
&lt;br /&gt;
方法としては、一つは systemd ユニットを使うことです。起動時に設定を自動的に適用したい場合、起動時に設定を構成・適用することに関するこの [https://www.reddit.com/r/Amd/comments/agwroj/how_to_overclock_your_amd_gpu_on_linux/ Reddit スレッド]を見てみることを検討してください。&lt;br /&gt;
&lt;br /&gt;
もう一つの方法は udev ルールです。例えば、パフォーマンスレベルを落とす値を設定して電力消費量を削減するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/30-amdgpu-low-power.rules|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;drm&amp;quot;, DRIVERS==&amp;quot;amdgpu&amp;quot;, ATTR{device/power_dpm_force_performance_level}=&amp;quot;low&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パフォーマンスレベル ===&lt;br /&gt;
&lt;br /&gt;
AMDGPU にはいくつかのパフォーマンスレベルがあります。このレベルは power_dpm_force_performance_level ファイルで調整/確認することができます。以下のレベルから選択できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;auto&#039;&#039;&#039;: 現在の条件に合わせて、ドライバー内で最適な電源プロファイルを動的に選択します。&lt;br /&gt;
* &#039;&#039;&#039;low&#039;&#039;&#039;: クロック数は最低のパワーステートに強制されます。&lt;br /&gt;
* &#039;&#039;&#039;high&#039;&#039;&#039;: クロック数は最高のパワーステートに強制されます。&lt;br /&gt;
* &#039;&#039;&#039;manual&#039;&#039;&#039;: ユーザーは、各クロックドメインに対してどのパワーステートを有効化するかを手動で選択することができます ([[#電源プロファイル]]を設定する際に使用します)。&lt;br /&gt;
* &#039;&#039;&#039;profile_standard&#039;&#039;&#039;、&#039;&#039;&#039;profile_min_sclk&#039;&#039;&#039;、&#039;&#039;&#039;profile_min_mclk&#039;&#039;&#039;、&#039;&#039;&#039;profile_peak&#039;&#039;&#039;: クロックとパワーのゲーティングが無効化され、クロックはそれぞれのプロファイルに応じて設定されます。このモードは、特定のワークロードに対してプロファイルする際に推奨されます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行すると、AMDGPU デバイスをパフォーマンスレベル low に設定します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;low&amp;quot; &amp;gt; /sys/class/drm/card0/device/power_dpm_force_performance_level&lt;br /&gt;
&lt;br /&gt;
{{Note|パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は [[#ブート時のスタートアップ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== 電源プロファイル ===&lt;br /&gt;
&lt;br /&gt;
AMDGPU は電源プロファイルによるいくつかの最適化を提供します。最も一般的に使用されるのは、OpenCL を多用するアプリケーションのためのコンピュートモードです。利用可能な電源プロファイルは以下のように一覧表示できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ cat /sys/class/drm/card0/device/pp_power_profile_mode|&lt;br /&gt;
NUM        MODE_NAME     SCLK_UP_HYST   SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL     MCLK_UP_HYST   MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL&lt;br /&gt;
  0   BOOTUP_DEFAULT:        -                -                -                -                -                -&lt;br /&gt;
  1   3D_FULL_SCREEN:        0              100               30                0              100               10&lt;br /&gt;
  2     POWER_SAVING:       10                0               30                -                -                -&lt;br /&gt;
  3            VIDEO:        -                -                -               10               16               31&lt;br /&gt;
  4               VR:        0               11               50                0              100               10&lt;br /&gt;
  5        COMPUTE *:        0                5               30               10               60               25&lt;br /&gt;
  6           CUSTOM:        -                -                -                -                -                -&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|card0}} はマシンの特定の GPU を示します。複数の GPU が搭載されている場合、正しい GPU を選ぶように気をつけてください。}}&lt;br /&gt;
&lt;br /&gt;
特定の電源プロファイルを使用するには、まず GPU のマニュアルコントロールを有効化する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;manual&amp;quot; &amp;gt; /sys/class/drm/card0/device/power_dpm_force_performance_level&lt;br /&gt;
&lt;br /&gt;
その後、電源プロファイルを選択するには、そのプロファイルと関連付けられた NUM の値を書き込みます。例えば、COMPUTE を有効化するには:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;5&amp;quot; &amp;gt; /sys/class/drm/card0/device/pp_power_profile_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|電源プロファイルの変更は起動するたびに適用する必要があります。これを自動化するには [[#ブート時のスタートアップ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== GPU ディスプレイスケーリングを有効化 ===&lt;br /&gt;
&lt;br /&gt;
モニタのネイティブ解像度を使用しない場合、ディスプレイに内蔵されているスケーラを用いずに、GPU 自体のスケーラを使うには、以下を実行してください:&lt;br /&gt;
 $ xrandr --output &#039;&#039;output&#039;&#039; --set &amp;quot;scaling mode&amp;quot; &#039;&#039;scaling_mode&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&amp;quot;scaling mode&amp;quot;}} に利用できる値は: {{ic|None}}, {{ic|Full}}, {{ic|Center}}, {{ic|Full aspect}}。&lt;br /&gt;
&lt;br /&gt;
* 利用可能な出力と設定を表示するには: {{bc|$ xrandr --prop}}&lt;br /&gt;
* 利用可能な全ての出力に {{ic|1=scaling mode = Full aspect}} を設定するには: {{bc|$ for output in $(xrandr --prop {{!}} grep -E -o -i &amp;quot;^[A-Z\-]+-[0-9]+&amp;quot;); do xrandr --output &amp;quot;$output&amp;quot; --set &amp;quot;scaling mode&amp;quot; &amp;quot;Full aspect&amp;quot;; done}}&lt;br /&gt;
&lt;br /&gt;
=== ヘッドレス環境での仮想ディスプレイ ===&lt;br /&gt;
&lt;br /&gt;
AMDGPU はヘッドレス環境向けに、ダミープラグを使用しない、GPU アクセラレートされた仮想モニターを提供しています。これは RDP や {{AUR|sunshine}} といったゲームストリーミングソフトウェアで便利です。&lt;br /&gt;
&lt;br /&gt;
使用する AMD GPU を選択してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -Dd ::03xx|&lt;br /&gt;
&#039;&#039;&#039;1234:56:78.9&#039;&#039;&#039; VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] &#039;&#039;CommercialModelName&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|amdgpu}} に対して {{ic|1=virtual_display=&#039;&#039;1234:56:78.9&#039;&#039;,&#039;&#039;x&#039;&#039;}} [[カーネルモジュールパラメータ]]を追加してください。{{ic|&#039;&#039;1234:56:78.9&#039;&#039;}} の部分は GPU の PCI アドレスで、{{ic|&#039;&#039;x&#039;&#039;}} は公開する crtc (仮想モニター) の番号です。このパラメータを使用すると物理出力は無効化されます。[https://bugzilla.kernel.org/show_bug.cgi?id=203339]&lt;br /&gt;
&lt;br /&gt;
以下のように PCI アドレスをセミコロンで区切ることで、複数の GPU を使用することも可能です:&lt;br /&gt;
&lt;br /&gt;
 amdgpu.virtual_display=1234:56:78.9,&#039;&#039;x&#039;&#039;;9876:54:32.1,&#039;&#039;y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== モジュールパラメータ ===&lt;br /&gt;
&lt;br /&gt;
amdgpu モジュールは、いくつかの設定パラメータ ({{ic|modinfo amdgpu {{!}} grep mask}}) を[https://raw.githubusercontent.com/torvalds/linux/master/drivers/gpu/drm/amd/include/amd_shared.h カーネルのソースコード]でしかドキュメント化していないマスク内に隠しています。&lt;br /&gt;
&lt;br /&gt;
=== Xorg やアプリケーションが起動しない ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;glxgears&#039;&#039; を開いた後に &amp;quot;(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?&amp;quot; エラー。Xorg サーバを開くことはできるが、OpenGL アプリケーションはクラッシュする。&lt;br /&gt;
* &amp;quot;(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver&amp;quot; エラー。Xorg が起動しない。&lt;br /&gt;
&lt;br /&gt;
Xorg でスクリーンの色深度を 16 か 32 に設定すると問題/クラッシュを引き起こします。これを防ぐには、&amp;quot;screen&amp;quot; セクションに以下を追加して標準的なスクリーン色深度である 24 を使う必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/10-screen.conf|&lt;br /&gt;
Section &amp;quot;Screen&amp;quot;&lt;br /&gt;
       Identifier     &amp;quot;Screen&amp;quot;&lt;br /&gt;
       DefaultDepth    24&lt;br /&gt;
       SubSection      &amp;quot;Display&amp;quot;&lt;br /&gt;
               Depth   24&lt;br /&gt;
       EndSubSection&lt;br /&gt;
EndSection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== スクリーンのアーティファクトと周波数の問題 ===&lt;br /&gt;
&lt;br /&gt;
[[ATI#動的電源管理|動的電源管理]]は、(60Hz以上の) 高いリフレッシュレートでモニタを表示させた際にスクリーンのアーティファクトを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://bugs.freedesktop.org/show_bug.cgi?id=96868][https://gitlab.freedesktop.org/drm/amd/-/issues/234]。&lt;br /&gt;
&lt;br /&gt;
回避策[https://bugs.freedesktop.org/show_bug.cgi?id=96868#c13]は、[[#パフォーマンスレベル]] で説明されているようにパフォーマンスレベルを {{ic|high}} あるいは {{ic|low}} に設定することです。&lt;br /&gt;
&lt;br /&gt;
カーネルのバージョンを変更することでもこの問題を解決できる場合があります。例えば、バージョン 6.12.9 では問題は解決されているようです。&lt;br /&gt;
&lt;br /&gt;
==== Chromium でアーティファクト ====&lt;br /&gt;
&lt;br /&gt;
[[Chromium]] でアーティファクトが現れる場合、vulkan ベースのバックエンドの使用を強制すると解決するかもしれません。{{ic|chrome://flags}} を開き、{{ic|#ignore-gpu-blocklist}} と {{ic|#enable-vulkan}} を &#039;&#039;enable&#039;&#039; にしてください。&lt;br /&gt;
&lt;br /&gt;
=== R9 390 シリーズで悪いパフォーマンス/不安定 ===&lt;br /&gt;
&lt;br /&gt;
AMD R9 390 シリーズのグラフィックカードで問題[https://gitlab.freedesktop.org/mesa/mesa/-/issues/1222]が発生する場合、次の[[カーネルパラメータ]]を設定して、radeon ではなく amdgpu ドライバの使用を強制してください: {{ic|1=radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1 amdgpu.dc=1}}&lt;br /&gt;
&lt;br /&gt;
これがうまく行かない場合、DPM を無効化すると解決するかもしれません。次を[[カーネルパラメータ]]に追加してください: {{ic|1=radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;[drm] IP block:gmc_v8_0 is hung!&amp;quot; カーネルエラーでフリーズ ===&lt;br /&gt;
&lt;br /&gt;
GPU が大量の処理を行っている最中にフリーズやカーネルのクラッシュが発生して、&amp;quot;[drm] IP block:gmc_v8_0 is hung!&amp;quot; カーネルエラーが発生する場合 [https://gitlab.freedesktop.org/drm/amd/issues/226]、回避策は [[カーネルパラメータ]] {{ic|1=amdgpu.vm_update_mode=3}} を設定して GPUVM ページテーブルの更新を CPU を用いて行うように強制することです。デメリットはここにリストされています: [https://gitlab.freedesktop.org/drm/amd/-/issues/226#note_308665]。&lt;br /&gt;
&lt;br /&gt;
=== 画面が白く/灰色に点滅する ===&lt;br /&gt;
&lt;br /&gt;
解像度を変更したり外部モニタに接続したりしたときに、画面がちらつく、あるいは白くなったままになる場合、[[カーネルパラメータ]] {{ic|1=amdgpu.sg_display=0}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ ===&lt;br /&gt;
&lt;br /&gt;
[[ATI#動的電源管理|動的電源管理]]は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://gitlab.freedesktop.org/drm/amd/-/issues/716]。回避策は、[[#パフォーマンスレベル]] で説明されているようにパフォーマンスレベルを {{ic|high}} に設定することです。。&lt;br /&gt;
&lt;br /&gt;
=== WebRenderer (Firefox) の破損 ===&lt;br /&gt;
&lt;br /&gt;
[[:en:Firefox/Tweaks#WebRender|WebRenderer]] がユーザによって強制的に有効化されている場合、アーティファクトやその他の異常が発生する場合があります(例: 拡張機能のオプションを選択できないなど)。回避策は OpenGL コンポジットにフォールバックすることです。&lt;br /&gt;
&lt;br /&gt;
=== 4K@60Hz のデバイスが接続されると音声の速度が2倍になる/音が高くなる/無音 ===&lt;br /&gt;
&lt;br /&gt;
これは、AMDGPU デバイスと、HDMI で接続された 4K ディスプレイとの間の通信の問題により時々発生します。利用可能な回避策は、ディスプレイの組み込み設定から HDR か &amp;quot;Ultra HD Deep Color&amp;quot; を有効化することです。多くの Android ベースのテレビでは、これは &amp;quot;Optimal&amp;quot; ではなく &amp;quot;Standard&amp;quot; を設定することを意味します。&lt;br /&gt;
&lt;br /&gt;
=== ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題 ===&lt;br /&gt;
&lt;br /&gt;
カーネルドライバはロードされたが、ゲームでディスクリートグラフィックカードを利用できない、または使用中に無効化されてしまう問題が発生する場合 ([https://gitlab.freedesktop.org/drm/amd/-/issues/1820] に似た問題)、[[カーネルパラメータ]] {{ic|1=amdgpu.runpm=0}} を設定することでこの問題を回避できます。このカーネルパラメータは、dGPU が実行時に動的にオフになることを防止します。&lt;br /&gt;
&lt;br /&gt;
=== ディスプレイが固まる、または応答しなくなる (flip_done timed out) ===&lt;br /&gt;
&lt;br /&gt;
amdgpu ドライバのバグにより、ディスプレイが更新されなくなることがあります[https://gitlab.freedesktop.org/drm/amd/-/issues/4141]。回避策として、{{ic|1=amdgpu.dcdebugmask=0x10}} か {{ic|1=amdgpu.dcdebugmask=0x12}} [[カーネルパラメータ]]を追加することが提案されています。&lt;br /&gt;
&lt;br /&gt;
=== kfd: amdgpu: TOPAZ not supported in kfd ===&lt;br /&gt;
&lt;br /&gt;
システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります:&lt;br /&gt;
&lt;br /&gt;
 kfd: amdgpu: TOPAZ not supported in kfd&lt;br /&gt;
&lt;br /&gt;
[[GPGPU#ROCm|Radeon Open Compute]] を使用するつもりでないならば、これは安全に無視できます。古い GPU であるため、TOPAZ ではサポートされていません。[https://github.com/RadeonOpenCompute/ROCm/issues/1148#issuecomment-747849592] [https://www.reddit.com/r/linuxquestions/comments/yhbbiz/kfd_kfd_amdgpu_topaz_not_supported_in_kfd/]&lt;br /&gt;
&lt;br /&gt;
=== MCLK が MAX (1000Mhz) に固定されてアイドル時に高い電力消費、または MIN (96MHz) に固定されてゲームのパフォーマンスが悪化 (カーネル 6.4) ===&lt;br /&gt;
&lt;br /&gt;
高解像度かつ高リフレッシュレートの場合、MCLK (vram / メモリのクロック) が最も高いクロックレート (1000MHz) に固定されてしまい [https://gitlab.freedesktop.org/drm/amd/-/issues/1403] [https://gitlab.freedesktop.org/drm/amd/-/issues/2646]、アイドル時に GPU の電力消費が増加してしまう場合があります。Linux カーネル 6.4.x では、MCLK クロックが最低値 (96MHz) になって、ゲームのパフォーマンスが低下してしまいます [https://gitlab.freedesktop.org/drm/amd/-/issues/2657] [https://gitlab.freedesktop.org/drm/amd/-/issues/2611]。&lt;br /&gt;
&lt;br /&gt;
これは、モニタが Coordinated Video Timings (CVT) を使用しておらず、影響を受ける解像度とリフレッシュレートに対する V-Blank 値が低いことが原因である可能性があります。回避策は[https://gist.github.com/Rend0e/3bddac4285dc1f4fbe303f326f36f6cc この gist] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== Suspend to RAM に失敗する ===&lt;br /&gt;
&lt;br /&gt;
十分にリフレッシュされない VRAM のデータ消失を防ぐために、{{ic|amdgpu}} カーネルモジュールはシステムが S3 スリープに入るときに VRAM の内容を RAM 内に保存します。&lt;br /&gt;
&lt;br /&gt;
大量の VRAM を使用していて RAM に十分な空き容量がない場合、たとえ十分なスワップメモリが存在していたとしても、[https://gitlab.freedesktop.org/drm/amd/-/issues/2125 このプロセスが失敗する可能性があります] (IO サブシステムがすでにサスペンドされているかもしれないため)。&lt;br /&gt;
&lt;br /&gt;
このとき、以下のようなメッセージが出力されます:&lt;br /&gt;
&lt;br /&gt;
 kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0&lt;br /&gt;
 kernel: Call Trace:&lt;br /&gt;
 kernel:  &amp;lt;TASK&amp;gt;&lt;br /&gt;
 kernel:  dump_stack_lvl+0x47/0x60&lt;br /&gt;
 kernel:  warn_alloc+0x165/0x1e0&lt;br /&gt;
 kernel:  __alloc_pages_slowpath.constprop.0+0xd7d/0xde0&lt;br /&gt;
 kernel:  __alloc_pages+0x32d/0x350&lt;br /&gt;
 kernel:  ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4]&lt;br /&gt;
&lt;br /&gt;
回避策としては、システムがサスペンドする前に十分な RAM 領域をスワップアウトして VRAM を格納できるのに十分な空き領域を RAM に確保しておく[https://git.dolansoft.org/lorenz/memreserver ユーザー空間のサービス]を使うというものがります。&lt;br /&gt;
&lt;br /&gt;
=== シャットダウンとサスペンドに失敗する ===&lt;br /&gt;
&lt;br /&gt;
カーネルモジュールの &#039;&#039;hid_sensor_*_3d&#039;&#039; グループは、ブート時、シャットダウン時、サスペンド時にシステムがフリーズする問題を引き起こすことがあります。プロセスリストには複数の {{ic|udev-worker}} インスタンスが現れ、システムのスリープ時にフリーズしてしまいます。&lt;br /&gt;
&lt;br /&gt;
このとき、以下のように出力されます:&lt;br /&gt;
&lt;br /&gt;
 kernel: PM: suspend entry (deep)&lt;br /&gt;
 kernel: Filesystems sync: 0.002 seconds&lt;br /&gt;
 kernel: Freezing user space processes&lt;br /&gt;
 kernel: Freezing user space processes failed after 20.004 seconds (1 tasks refusing to freeze, wq_busy=0):&lt;br /&gt;
 kernel: task:(udev-worker)   state:D stack:0     pid:479   tgid:479   ppid:422    flags:0x00004006&lt;br /&gt;
 kernel: Call Trace:&lt;br /&gt;
 kernel:  &amp;lt;TASK&amp;gt;&lt;br /&gt;
 kernel:  __schedule+0x3db/0x1520&lt;br /&gt;
 kernel:  ? srso_alias_return_thunk+0x5/0xfbef5&lt;br /&gt;
 kernel:  ? __wake_up_common+0x78/0xa0&lt;br /&gt;
 kernel:  ? srso_alias_return_thunk+0x5/0xfbef5&lt;br /&gt;
&lt;br /&gt;
この問題の回避策は、例えば以下のような {{ic|/etc/modprobe.d/blacklist-hid_sensors.conf}} を作成するなどして、問題のあるモジュールをブラックリスト化することです:&lt;br /&gt;
&lt;br /&gt;
 blacklist hid_sensor_accel_3d&lt;br /&gt;
 blacklist hid_sensor_gyro_3d&lt;br /&gt;
 blacklist hid_sensor_magn_3d&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Gentoo:AMDGPU]]&lt;br /&gt;
* [https://gitlab.freedesktop.org/drm/amd AMDGPU イシュートラッカー]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|AMDGPU|2025-06-11|838762}}&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=41075</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=41075"/>
		<updated>2025-11-01T00:52:52Z</updated>

		<summary type="html">&lt;p&gt;N: /* 重複排除 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[de:Arch auf BtrFS]]&lt;br /&gt;
[[en:Btrfs]]&lt;br /&gt;
[[es:Btrfs]]&lt;br /&gt;
[[pt:Btrfs]]&lt;br /&gt;
[[ru:Btrfs]]&lt;br /&gt;
[[zh-hans:Btrfs]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Snapper}}&lt;br /&gt;
{{Related|Yabsnap}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Main_Page Btrfs Wiki] より:&lt;br /&gt;
&lt;br /&gt;
:Btrfs は、耐障害性、修復、および簡単な管理に重点を置きながら、高度な機能を実装することを目的とした Linux 用の最新のコピーオンライト(CoW)ファイルシステムです。複数の企業で共同開発された Btrfs は、GPL に基づいてライセンスされており、誰からの寄付も受け付けています。&lt;br /&gt;
&lt;br /&gt;
{{Note|他のファイルシステムと同様に、Btrfs は継続的に開発中です。これは、特定の機能がまだ日常的に使用できる状態になっていない可能性があります。使用事例が影響を受ける可能性があるかどうかを確認するには、Btrfs ドキュメントの [https://btrfs.readthedocs.io/en/latest/Status.html Status] とこの記事の [[Btrfs#既知の問題|既知の問題]] セクションを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== 準備 ==&lt;br /&gt;
&lt;br /&gt;
ユーザースペースのユーティリティについては、基本的な操作に必要な {{Pkg|btrfs-progs}} パッケージを [[インストール]] してください。&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムから起動する必要がある場合 (つまり、カーネルと initramfs が Btrfs パーティションにある場合)、あなたの [[ブートローダー]] が Btrfs をサポートしているか確認してください。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの作成 ==&lt;br /&gt;
&lt;br /&gt;
以下は、新しい Btrfs [[ファイルシステム]] を作成する方法を示しています。ext3/4 パーティションを Btrfs に変換するには、[[Btrfs#Ext3/4 から Btrfs への変換|Ext3/4 から Btrfs への変換]] を見て下さい。パーティションレスなセットアップを使うには、[[Btrfs#パーティションレス Btrfs ディスク|パーティションレス Btrfs ディスク]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|mkfs.btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 単一デバイス上のファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
パーティション {{ic|/dev/&#039;&#039;partition&#039;&#039;}} に Btrfs ファイルシステムを作るには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
メタデータの Btrfs のデフォルトのノードサイズは 16KB ですが、データのデフォルトのセクターサイズはページサイズと同じで、自動検出されます。メタデータに大きなノードサイズを使用するには(セクターサイズの倍数である必要があり、最大 64KB が許可されます)、この例に示すように、{{ic|-n}} スイッチを介して {{ic|nodesize}} の値を指定します 32KB ブロックの使用例:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; -n 32k /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|8|mkfs.btrfs|OPTIONS}} によると、&amp;quot;[a]ノードサイズが小さいほど断片化は増加しますが、bツリーが高くなり、ロックの競合が少なくなります。ノードサイズが大きいほど、メタデータブロックを更新する際のメモリ操作のコストが高くなりますが、パッキングが向上し、断片化が少なくなります&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== マルチデバイス対応ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Btrfs の RAID 5 と RAID 6 モードには致命的な欠陥があり、&amp;quot;捨てデータでのテスト以外&amp;quot; には使用しないでください。[https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 既知の問題と部分的な回避策のリスト]。状況の更新については [https://man.archlinux.org/man/btrfs.5#RAID56_STATUS_AND_RECOMMENDED_PRACTICES the Btrfs page on RAID5 and RAID6] を見て下さい。&lt;br /&gt;
* デフォルトでは、[[systemd]] は {{ic|/var/log/journal}} に対して [[#コピーオンライト (CoW)|CoW]] を無効にしていますが、これが原因で RAID 1 上でデータ破損が発生することがあります ([[#CoW の無効化]] を参照) これを防ぐために、{{ic|/usr/lib/tmpfiles.d/journal-nocow.conf}} を上書きするための空のファイル {{ic|/etc/tmpfiles.d/journal-nocow.conf}} を作成してください({{man|5|tmpfiles.d|CONFIGURATION DIRECTORIES AND PRECEDENCE}} を参照)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のデバイスを使用して RAID を作成することができます。サポートされている RAID レベルは RAID 0, RAID 1, RAID 10, RAID 5, RAID 6 です。カーネル 5.5 からは RAID1c3 と RAID1c4 で RAID1 レベルの 3-コピーと 4-コピーが可能です。RAIDレベルは、データ用とメタデータ用にそれぞれ {{ic|-d}} と {{ic|-m}} オプションを使って別々に設定することができます。デフォルトでは、データは1つのコピー ({{ic|single}}) で、メタデータはミラーリング ({{ic|raid1}}) された状態になっています。これは &lt;br /&gt;
[[W:JBOD|JBOD configuration]] を作成すると、ディスクは1つのファイルシステムとして認識されますが、ファイルは複製されません。Btrfs RAID ボリュームを作成する方法についての詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Using Btrfs with Multiple Devices] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -d single -m raid1 /dev/&#039;&#039;part1&#039;&#039; /dev/&#039;&#039;part2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
プールで複数の Btrfs デバイスを使うには {{ic|udev}} フックか {{ic|btrfs}} フックを {{ic|/etc/mkinitcpio.conf}} に記述する必要があります。詳しくは [[Mkinitcpio#HOOKS]] の記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* マルチデバイスファイルシステムに後からデバイスを追加することも可能です。詳しくは [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Btrfs wiki article] を見て下さい。&lt;br /&gt;
* デバイスは異なるサイズにすることができます。しかし、RAID 構成の1つのドライブが他のドライブより大きい場合、この余分なスペースは使用されません。&lt;br /&gt;
* [[Syslinux]] などのいくつかの [[ブートローダー]] はマルチデバイスファイルシステムをサポートしません。&lt;br /&gt;
* Btrfs は自動的に最速のデバイスから読み込むわけではないので、異なる種類のディスクを混在させるとパフォーマンスに一貫性がなくなります。詳しくは [https://stackoverflow.com/a/55408367] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
マルチデバイス Btrfs ファイルシステム特有のメンテナンスに関するアドバイスは [[#RAID]] をご覧下さい。&lt;br /&gt;
&lt;br /&gt;
==== プロファイル ====&lt;br /&gt;
&lt;br /&gt;
Btrfs は、ミラーリング、パリティ、ストライピングを構成するために [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles プロファイル] という概念を使用します。標準的な [[Wikipedia:RAID|RAID]] 用語では、これは &#039;&#039;RAID level&#039;&#039; と呼ばれます。Btrfs ファイルシステムでは、メタデータ({{man|8|mkfs.btrfs}} の {{ic|-m}} オプション) とデータ ({{man|8|mkfs.btrfs}} の {{ic|-d}} オプション)のプロファイルが異なる場合があります。&lt;br /&gt;
&lt;br /&gt;
いくつかの注目すべきプロファイル:&lt;br /&gt;
&lt;br /&gt;
; single&lt;br /&gt;
: ミラーリングなし、ストライピングなし、パリティなし。複数のデバイスを単一のファイルシステムにマッピングする機能を提供します。[[mdadm]] 用語では {{ic|LINEAR}} と呼ばれます。&lt;br /&gt;
; raid0&lt;br /&gt;
: ミラーリングなし、ストライピングあり、パリティなし。デバイス間の並列アクセスを可能にしますが、従来の [[mdadm]] RAID のように同じサイズのデバイスに限定されません。&lt;br /&gt;
; raid1&lt;br /&gt;
: ミラーリングあり、ストライピングなし、パリティなし。1 つのドライブ障害からの復旧を可能にします。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの構成 ==&lt;br /&gt;
&lt;br /&gt;
=== コピーオンライト (CoW)===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは Btrfs は全てのファイルに対して常に [[Wikipedia:copy-on-write|copy-on-write]] を使用します。書き込みはその場のデータを上書きしません; 代わりに、ブロックの修正されたコピーが新しい場所に書き込まれ、メタデータは新しい場所を指すように更新されます。実装の詳細や利点と欠点については [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Copy_on_Write_.28CoW.29 Btrfs Sysadmin Guide セクション] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== CoW の無効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs で CoW を無効にすると、チェックサムも無効になります。 Btrfs は破損した {{ic|nodatacow}} ファイルを検出できません。 RAID 1 と組み合わせると、停電やその他の破損原因により、データが同期しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
マウントされたサブボリュームで新しく作成されたファイルのコピー オン ライトを無効にするには、{{ic|nodatacow}} マウント オプションを使用します。これは、新しく作成されたファイルにのみ影響します。コピーオンライトは、既存のファイルに対して引き続き影響します。 {{ic|nodatacow}} オプションも圧縮を無効にします。詳しくは {{man|5|btrfs}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から:&lt;br /&gt;
&lt;br /&gt;
:単一のファイル システム内で、一部のサブボリュームを {{ic|nodatacow}} でマウントし、他のサブボリュームを {{ic|datacow}} でマウントすることはできません。最初にマウントされたサブボリュームのマウント オプションは、他のサブボリュームに適用されます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファイルやディレクトリ単体で CoW を無効化するには、次のコマンドを使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ chattr +C &amp;lt;/dir/file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これにより、ファイルへの参照が 1つしかない操作のコピーオンライトが無効になります。複数の参照がある場合。ファイル クローン/軽量クローンまたはファイルシステムスナップショットが原因で、コピーオンライトが引き続き発生します。{{Pkg|coreutils}} 9.0 以降、{{ic|cp}} はデフォルトで軽量コピーを実行しようとすることに注意してください。詳細については、{{man|1|cp}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|1|chattr}} から:&lt;br /&gt;
&lt;br /&gt;
:btrfs の場合、&#039;{{ic|C}}&#039; フラグを新しいファイルまたは空のファイルに設定する必要があります。すでにデータブロックがあるファイルに設定されている場合、ファイルに割り当てられたブロックが完全に安定する時期は未定義です。&#039;{{ic|C}}&#039; フラグがディレクトリに設定されている場合、ディレクトリには影響しませんが、そのディレクトリに作成された新しいファイルには {{ic|No_COW}} 属性が含まれます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=上記のメモに従い、次のトリックを使用して、ディレクトリ内の既存のファイルのコピーオンライトを無効にすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ mv &#039;&#039;/path/to/dir&#039;&#039; &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
 $ mkdir &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ chattr +C &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ cp -a --reflink=never &#039;&#039;/path/to/dir&#039;&#039;_old/. &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ rm -rf &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
&lt;br /&gt;
このプロセス中にデータが使用されていないことを確認してください。また、後述のように {{ic|1=--reflink=never}} を指定しない {{ic|mv}} または {{ic|cp}} は機能しないことに注意してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== スナップショットへの影響 =====&lt;br /&gt;
&lt;br /&gt;
ファイルのコピーオンライトが無効 (NOCOW) でスナップショットが作成された場合、スナップショットは古いファイルブロックを所定の位置にロックするため、スナップショット後のファイルブロックへの最初の書き込みは [https://www.spinics.net/lists/linux-btrfs/msg33090.html COW 操作] になります。ただし、ファイルは NOCOW 属性を保持し、同じファイルブロックへの後続の書き込みは次のスナップショットまでそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
スナップショットを頻繁に行うと、最初の書き込みで COW が必要になるため、NOCOW の効果が低下する可能性があります。そのようなファイルのコピーオンライトを完全に避けるには、それらを別のサブボリュームに入れ、そのサブボリュームのスナップショットを作成しないでください。&lt;br /&gt;
&lt;br /&gt;
=== 圧縮 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [https://btrfs.wiki.kernel.org/index.php/Compression 透過的自動圧縮] をサポートしています。これはファイルサイズを小さくするだけでなく、書き込み増幅を減らすことでフラッシュベースのメディアの寿命を大幅に延ばします。[[Fedora:Changes/BtrfsByDefault#Compression]], [https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/NTV77NFF6NDZM3QTPUM2TQZ5PCM6GOO2/], [https://pagure.io/fedora-btrfs/project/issue/36#comment-701551] を参照して下さい。また、[https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_compress_2635&amp;amp;num=1 パフォーマンスを向上させる] 場合もありますが(例:重いファイル I/O を持つシングルスレッド)、(例:大きなファイル I/O を持つマルチスレッドや CPU 集中タスク)では明らかにパフォーマンスを低下させることがあります。一般に、最速の圧縮アルゴリズムである &#039;&#039;zstd&#039;&#039; と &#039;&#039;lzo&#039;&#039; を用いると、より良いパフォーマンスが得られます。いくつかの [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-zstd-compress benchmarks] では、詳細な比較がなされています。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}}, あるいは {{ic|no}} のいずれかです。(圧縮しない場合) このオプションを使うと、btrfs はデータの最初の部分を圧縮することで縮小されるかどうかをチェックします。 もしそうなら、そのファイルへの書き込み全体が圧縮されます。 そうでない場合は、何も圧縮されません。 このオプションでは、書き込みの最初の部分が縮小しない場合、残りのデータが非常に縮小しても、書き込みに圧縮は適用されません。[https://btrfs.wiki.kernel.org/index.php/Compression#What_happens_to_incompressible_files.3F] これは、書き込むべき全てのデータが btrfs に完全に与えられ圧縮されるまで、ディスクの書き込み開始を待たせるのを防ぐために行われます。&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|1=compress-force=&#039;&#039;alg&#039;&#039;}} マウントオプションを使うと、btrfs が最初の部分を圧縮しているかどうかのチェックをスキップし、全てのファイルに対して自動的に圧縮を試行することが可能になります。 最悪の場合、これは何の目的もなく CPU 使用量を (少し) 増加させる可能性があります。しかし、複数の用途が混在するシステムでの経験的なテストでは、 {{ic|1=compress-force=&#039;&#039;zstd&#039;&#039;}} を使うことで、ただの {{ic|1=compress=&#039;&#039;zstd&#039;&#039;}} に比べて約10%のディスク圧縮という大きな改善がありました、この場合も 10% のディスク圧縮でした。&lt;br /&gt;
&lt;br /&gt;
マウントオプションが追加された後に作成または変更されたファイルのみが圧縮されます。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}} のいずれかです。例えば、ファイルシステム全体を {{pkg|zstd}} で再圧縮する場合、以下のコマンドを実行します。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r -v -czstd /&lt;br /&gt;
&lt;br /&gt;
空の Btrfs パーティションに Arch をインストールするときに圧縮を有効にするには、ファイルシステムを [[マウント]] するときに {{ic|compress}} オプションを使ってください。{{ic|1=mount -o compress=zstd /dev/sd&#039;&#039;xY&#039;&#039; /mnt/}} となります。設定時に、[[fstab]]でルートファイルシステムのマウントオプションに {{ic|1=compress=zstd}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|マウントオプション {{ic|compress}} を使わずにファイル単位で圧縮を有効にすることもできます; そうするためには、ファイルに {{ic|chattr +c}} を適用します。ディレクトリに適用すると、新しいファイルが来たときに自動的に圧縮されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* このオプションを使うと、古いカーネルや {{ic|zstd}} をサポートしていない {{pkg|btrfs-progs}} を使っているシステムは、ファイルシステムを読んだり修復したりできない可能性があります。&lt;br /&gt;
* [[GRUB]] は 2.04 で &#039;&#039;zstd&#039;&#039; のサポートを導入しました。MBR/ESP にインストールされたブートローダを実際にアップグレードしたことを確認してください。BIOS/UEFI セットアップに適したオプションで {{ic|grub-install}} を実行して、{{Bug|63235}} を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 圧縮の種類と比率を表示する ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|compsize}} はファイルのリスト (または btrfs ファイルシステム全体) を受け取り、使用された圧縮タイプと有効な圧縮率を測定します。 非圧縮サイズは {{man|1|du}} のような他のプログラムによって与えられる数値と一致しないかもしれません。なぜなら、たとえ何度も再リンクされていても、たとえその一部がもうどこにも使われていないけれどゴミ収集されていないとしても、全てのエクステントは一度にカウントされるからです。 これは {{ic|compsize -x /}} のような状況で便利で、btrfs でないサブディレクトリを探そうとして、実行全体が失敗するのを避けます。&lt;br /&gt;
&lt;br /&gt;
=== サブボリューム ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;btrfs サブボリュームはブロックデバイスではありません(そしてブロックデバイスとして扱えません)代わりに btrfs サブボリュームは POSIX ファイル名空間として考えることができます。このネームスペースはファイルシステムのトップレベルのサブボリュームからアクセスすることもできますし、それ自体でマウントすることもできます&amp;quot; [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes]&lt;br /&gt;
&lt;br /&gt;
各 Btrfs ファイルシステムには ID 5 のトップレベルのサブボリュームがあります。これは {{ic|/}} としてマウントすることができます。(デフォルト) または、代わりに別のサブボリュームを [[Btrfs#サブボリュームをマウントする|マウントする]] こともできます。サブボリュームはファイルシステム内で移動することができ、パスよりもむしろその ID で識別されます。&lt;br /&gt;
&lt;br /&gt;
詳細については、次のリンクを参照してください:&lt;br /&gt;
&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes Btrfs Wiki SysadminGuide#Subvolumes]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands Btrfs Wiki Getting started#Basic Filesystem Commands]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Trees Btrfs Wiki Trees]&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを作成する ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを作成するには:&lt;br /&gt;
 # btrfs subvolume create &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを一覧する ====&lt;br /&gt;
&lt;br /&gt;
現在のサブボリュームのリストを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list -p .&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームの削除 ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを削除するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Linux 4.18 以降では、通常のディレクトリのようにサブボリュームを削除することもできます ({{ic|rm -r}}, {{ic|rmdir}})&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|1=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} や {{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} マウントフラグを使うことでファイルシステムのパーティションと同じようにマウントできます。例えば、{{ic|subvol_root}} という名前のサブボリュームが存在したら {{ic|/}} にマウントすることができます。ファイルシステムのトップレベルにサブボリュームを作成して適切なマウントポイントにマウントすることで、伝統的なファイルシステムのパーティションと同じように使うことができ、[[Btrfs#スナップショット|スナップショット]] を使用してファイルシステムを前の状態に簡単に戻すことが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=トップレベルのサブボリューム (ID=5) を {{ic|/}} として使用しないことでサブボリュームのレイアウトの変更を簡単にできます。サブボリュームを作成して実際のデータを保存して {{ic|/}} にマウントします。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から&lt;br /&gt;
:ほとんどのマウントオプションは &#039;&#039;&#039;ファイルシステム全体&#039;&#039;&#039; に適用され、マウントされる最初のサブボリュームのオプションだけが有効になります。これは実装不足によるもので、将来的に変更されるかもしれません。&lt;br /&gt;
&lt;br /&gt;
サブボリュームごとにどのマウントオプションが使えるかは [https://btrfs.wiki.kernel.org/index.php/FAQ#Can_I_mount_subvolumes_with_different_mount_options.3F Btrfs Wiki FAQ] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Snapper#推奨ファイルシステムレイアウト]], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Managing_Snapshots Btrfs SysadminGuide#Managing Snapshots], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs SysadminGuide#Layout] などにサブボリュームを使用するファイルシステムレイアウトの例が存在します。&lt;br /&gt;
&lt;br /&gt;
btrfs 固有のマウントオプションの完全なリストは {{man|5|btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをルートとしてマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームをルートマウントポイントとして使用するには、{{ic|1=rootflags=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} を使用して [[カーネルパラメータ#設定|カーネルパラメータ]] 経由でサブボリュームを指定します。{{ic|/etc/fstab}} でルート・マウントポイントを編集し、マウント・オプションに {{ic|1=subvol=}} を指定します。または、サブボリュームの ID {{ic|1=rootflags=subvolid=&#039;&#039;objectid&#039;&#039;}} をカーネルパラメータとして使い、{{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} を {{ic|/etc/fstab}} のマウントオプションとして指定することもできます。&lt;br /&gt;
&lt;br /&gt;
==== デフォルトのサブボリュームを設定する ====&lt;br /&gt;
&lt;br /&gt;
マウントオプションに {{ic|1=subvol=}} が指定されない場合、デフォルトのサブボリュームがマウントされます。デフォルトサブボリュームを変更するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume set-default &#039;&#039;subvolume-id&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
ここで、&#039;&#039;subvolume-id&#039;&#039; は [[Btrfs#サブボリュームを一覧する|listing]] で見つけることができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=[[GRUB]] があるシステムでデフォルトのサブボリュームを変更した後、ブートローダに変更を通知するために {{ic|grub-install}} を再度実行する必要があります。[https://bbs.archlinux.org/viewtopic.php?pid=1615373 このフォーラムのスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|btrfs subvolume set-default}} でデフォルトのサブボリュームを変更すると、ファイルシステムのトップレベルは {{ic|1=subvol=/}} や {{ic|1=subvolid=5}} マウントオプションを使ってアクセスする以外ではアクセスできなくなります [https://btrfs.wiki.kernel.org/index.php/SysadminGuide]&lt;br /&gt;
&lt;br /&gt;
=== クォータ ===&lt;br /&gt;
&lt;br /&gt;
{{warning|Qgroup はまだ安定状態ではなくサブボリュームのスナップショットとクォータを組み合わせると操作によってパフォーマンスに問題をきたします (スナップショットの削除など)。さらに [https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues 既知の問題] が存在しています。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs におけるクォータのサポートはクォータグループ (qgroup) を利用してサブボリュームレベルで実装されています: 各サブボリュームにはデフォルトで &#039;&#039;0/&amp;lt;subvolume id&amp;gt;&#039;&#039; という形式でクォータグループが割り当てられています。必要であればクォータグループを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
クォータグループを使うにはまずクォータを有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # btrfs quota enable &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを実行してから新しいサブボリュームを作成すると、グループによって制御が可能になります。既存のサブボリュームでも制御を行いたい場合、クォータを有効にしてから、&#039;&#039;&amp;lt;subvolume id&amp;gt;&#039;&#039; を使ってサブボリュームごとにクォータグループを作成して再スキャンしてください:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d&#039; &#039; -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Btrfs のクォータグループはツリー構造になっていて、サイズ制限はクォータグループごとに設定し、ツリーに属しているサブボリュームに制限が課せられます。&lt;br /&gt;
&lt;br /&gt;
クォータグループで設定できる制限は合計データ使用量・非共有のデータ使用量・圧縮データ使用量、あるいはそれらを組み合わせたものです。元のボリュームファイルを削除してコピーを残す場合、他のクォータグループの非共有制限が変わるため、ファイルのコピーや削除で制限に抵触する可能性があります。例えば、新しいスナップショットが元のサブボリュームの全てのブロックと同じデータを持っている場合、どちらかのサブボリュームだけで共通データを削除するともう片方のサブボリュームの制限に引っかかる可能性があります。&lt;br /&gt;
&lt;br /&gt;
クォータグループに制限を設定するには、{{ic|btrfs qgroup limit}} コマンドを使います。合計使用量の制限や非共有制限 ({{ic|-e}}) または圧縮制限 ({{ic|-c}}) が設定できます。ファイルシステムの特定のパスにおける使用量や制限を表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs qgroup show -reF &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== コミット間隔の設定 ===&lt;br /&gt;
&lt;br /&gt;
データがファイルシステムに書き込まれる解像度は、Btrfs自体とシステム全体の設定によって決まります。 Btrfs のデフォルトは、新しいデータがファイルシステムにコミットされる30秒のチェックポイント間隔です。これは、btrfs パーティションの {{ic|/etc/fstab}} に {{ic|commit}} マウントオプションを追加することで変更できます。&lt;br /&gt;
&lt;br /&gt;
 LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0&lt;br /&gt;
&lt;br /&gt;
システム全体の設定もコミット間隔に影響します。これらには {{ic|/proc/sys/vm/*}} の下のファイルが含まれており、このwiki記事の範囲外です。それらのカーネルドキュメントは、https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html で入手できます。&lt;br /&gt;
&lt;br /&gt;
=== SSD TRIM ===&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムは、TRIM コマンドをサポートする SSD ドライブから未使用のブロックを解放できます。カーネルバージョン 5.6 以降、非同期破棄がサポートされ、マウントオプション {{ic|1=discard=async}} で有効になります。解放されたエクステントはすぐには破棄されませんが、グループ化され、後で別のワーカースレッドによってトリミングされるため、コミットの待ち時間が短縮されます。&lt;br /&gt;
&lt;br /&gt;
TRIM の有効化と使用に関するより詳しい情報は [[ソリッドステートドライブ#TRIM]] に記載されています。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== スワップファイル ===&lt;br /&gt;
&lt;br /&gt;
Btrfs の [[スワップファイル]] は Linux カーネル5.0 以降でサポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7] スワップファイルを初期化する適切な方法は、最初にファイルをホストする非圧縮、非スナップショットのサブボリュームを作成し、そのディレクトリに &#039;&#039;cd&#039;&#039; してから、長さゼロのファイルを作成し、{{ic|No_COW}} を設定することです。 属性を [https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%B1%9E%E6%80%A7#chattr_.E3.81.A8_lsattr chattr] で指定し、圧縮が無効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
 # cd &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
 # truncate -s 0 ./swapfile&lt;br /&gt;
 # chattr +C ./swapfile&lt;br /&gt;
 # btrfs property set ./swapfile compression none&lt;br /&gt;
&lt;br /&gt;
詳細な設定については、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E4.BD.9C.E6.88.90 スワップファイルの作成] を参照してください。スワップファイルへの休止状態の構成については、[https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file_on_Btrfs Hibernation into swap file on Btrfs]で説明されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Linux カーネル5.0 以降、 Btrfs にはネイティブスワップファイルのサポートがありますが、いくつかの制限があります。&lt;br /&gt;
* スワップファイルをスナップショットサブボリュームに置くことはできません。適切な手順は、スワップファイルを配置する新しいサブボリュームを作成することです。&lt;br /&gt;
* 複数のデバイスにまたがるファイルシステム上のスワップファイルはサポートされていません。 [https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F Btrfs wiki: Does btrfs support swap files?] および [https://bbs.archlinux.org/viewtopic.php?pid=1849371#p1849371 Arch forums discussion]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 使用領域 空き領域の表示 ===&lt;br /&gt;
&lt;br /&gt;
{{man|1|df}} のような一般的な linux ユーザースペースツールは Btrfs パーティションの空き容量を不正確に報告します。Btrfs パーティションを調べるには {{ic|btrfs filesystem usage}} を使うことが推奨されます。例えば、デバイスのアロケーションと使用状況の統計の完全な内訳を見るには、{{ic|btrfs filesystem usage}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem usage /&lt;br /&gt;
&lt;br /&gt;
{{Note|現在、{{ic|btrfs filesystem usage}} コマンドは {{ic|RAID5/RAID6}} では正しく動作していません。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|btrfs filesystem df}} を使えば、root で実行しなくても、割り当てられた領域の使用状況を素早くチェックすることができます。&lt;br /&gt;
&lt;br /&gt;
 $ btrfs filesystem df /&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_free_space_do_I_have.3F] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|du}} や {{man|1|ncdu}} のような、ファイルシステムのあるサブセットについて空間の使用状況を分析するツールにも同じ制限が適用され、これらは reflinks, snapshots, 圧縮を考慮しません。代わりに、btrfs を意識した代替手段は {{AUR|btdu}} と [[Btrfs#圧縮の種類と比率を表示する|圧縮の種類と比率を表示する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== デフラグメンテーション ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Linux カーネル バージョン 5.16.x &amp;lt; 5.16.5 のメジャーレグレッションにより、一部のシステムで Btrfs デフラグが無限ループし、手動および自動デフラグの両方に影響があります。これにより、影響を受けるドライブに極端な I/O 負荷がかかり、ドライブの寿命が極端に短くなり、パフォーマンスに影響を与える可能性があります。このため、これらのバージョンで {{ic|autodefrag}} を使うことは推奨されません。むしろ {{ic|noautodefrag}} を使ってオンラインデフラグが無効になるようにすべきです。[https://www.reddit.com/r/linux/comments/sgybyr/psa_linux_516_has_major_regression_in_btrfs/] と [https://lore.kernel.org/linux-btrfs/CAEwRaO4y3PPPUdwYjNDoB9m9CLzfd3DFFk2iK1X6OyyEWG5-mg@mail.gmail.com/] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs はマウントオプション {{ic|autodefrag}} でオンラインデフラグをサポートしています、{{man|5|btrfs|MOUNT OPTIONS}} を見て下さい。手動でルートのデフラグをするには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r /&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを {{ic|-r}} スイッチなしで使用すると、ディレクトリを含むサブボリュームが保持するメタデータのみがデフラグされる結果となります。このため、パスを指定するだけで単一ファイルのデフラグが可能です。&lt;br /&gt;
&lt;br /&gt;
COW コピー (スナップショット コピーまたは {{ic|cp}} や bcp で作成されたもの) を持つファイルに圧縮アルゴリズムで {{ic|-c}} スイッチを使用したデフラグを行うと、無関係の 2 つのファイルが効果的にディスク使用量を増加させる結果になることがあります。&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [[Btrfs#マルチデバイス対応ファイルシステム|マルチデバイス対応ファイルシステム]] のためのネイティブな &#039;&#039;RAID&#039;&#039; を提供します。btrfs RAID を [[mdadm]] と区別する注目すべき機能は自己回復型の冗長アレイとオンラインバランシングです。より詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices the Btrfs wiki page] を見て下さい。Btrfs sysadmin ページにも [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#RAID_and_data_replication にセクションがありますので参照して下さい。] 技術的な背景があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Parity RAID (RAID 5/6) コードには、複数の重大なデータ損失のバグがあります。より詳細な情報は Btrfs Wiki の [https://btrfs.wiki.kernel.org/index.php/RAID56 RAID5/6 page] と [https://lore.kernel.org/linux-btrfs/8695beeb-f991-28c4-cf6b-8c92339e468f@inwind.it/ linux-btrfs mailing list] のバグレポートを見て下さい。2020年6月、誰かが [https://lore.kernel.org/linux-btrfs/20200627030614.GW10769@hungrycats.org/ 現在の問題の包括的なリスト] と [https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 役に立つ回復ガイド] を投稿しています}}&lt;br /&gt;
&lt;br /&gt;
==== Scrub ====&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary] によると、Btrfs スクラブはオンラインファイルシステムチェックツールです。ファイルシステム上のすべてのデータとメタデータを読み取り、チェックサムと RAID ストレージからの複製コピーを使用して、破損したデータを特定して修復します。&lt;br /&gt;
&lt;br /&gt;
{{Note|実行中のスクラブプロセスはシステムのサスペンドを防ぎます。詳細は [https://lore.kernel.org/linux-btrfs/20140227190656.GA28338@merlins.org/ このスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== 手動で開始する =====&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} を含むファイルシステムに対して (バックグラウンド) scrub を開始する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub start /&lt;br /&gt;
&lt;br /&gt;
実行中の scrub の状態を確認する。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub status /&lt;br /&gt;
&lt;br /&gt;
===== サービスまたはタイマーを使って起動する =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}} パッケージは、指定したマウントポイントを毎月 scrubbing するためのユニット {{ic|btrfs-scrub@.timer}} を提供します。例えば {{ic|/}} の場合は {{ic|btrfs-scrub@-.timer}} 、{{ic|/home}} の場合は {{ic|btrfs-scrub@home.timer}} のように、エスケープしたパスでタイマーを [[有効化]] してください。パスのエスケープは {{ic|systemd-escape -p &#039;&#039;/path/to/mountpoint&#039;&#039;}} で行えます、詳しくは {{man|1|systemd-escape}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
scrub を実行するには {{ic|btrfs-scrub@.service}} を [[systemd#ユニットを使う|スタート]] します。(同じエンコードされたパスで) この方法の利点は {{ic|btrfs scrub}} と比べても同じです。(root ユーザーで) scrub の結果が [[systemd/ジャーナル]] に記録されることです。&lt;br /&gt;
&lt;br /&gt;
冷却が不十分な大きな NVMe ドライブ (ラップトップなど) では、scrub はドライブを速く、長く読み込んで、ドライブを非常に高温にします。systemd で scrub を実行している場合、[[ドロップインファイル]] を使って {{man|5|systemd.resource-control}} にある {{ic|IOReadBandwidthMax}} オプションで簡単にスクラブ速度を制限することができます。&lt;br /&gt;
&lt;br /&gt;
==== Balance ====&lt;br /&gt;
&lt;br /&gt;
balance はファイルシステム上の全てのデータをアロケータに再度流し込みます。デバイスが追加されたり削除された場合にファイルシステム上のデータを再配置するために実行します。balance はデバイスが故障した場合に、冗長な RAID レベルのコピーを再生成します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}}-3.12 から&#039;&#039;バランシング&#039;&#039;はバックグラウンドプロセスになりました - 詳しくは {{ic|man 8 btrfs-balance}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start /&lt;br /&gt;
 # btrfs balance status /&lt;br /&gt;
&lt;br /&gt;
=== スナップショット ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;スナップショットとは、btrfs の COW 機能を使って、そのデータ(とメタデータ)を他のサブボリュームと共有する、サブボリュームのことです&amp;quot; 詳しくは [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Snapshots Btrfs Wiki SysadminGuide#Snapshots] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
スナップショットを作成するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume snapshot &#039;&#039;source&#039;&#039; [&#039;&#039;dest&#039;&#039;/]&#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
読み取り専用のスナップショットを作成するには、{{ic|-r}} フラグを追加します。readonly スナップショットの書き込み可能バージョンを作成するには、単純にそのスナップショットを作成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|{Note&lt;br /&gt;
* スナップショットを読み込み専用から書き込み専用に変換することは可能です。しかし、これは将来のインクリメンタル送受信で問題が発生するため、推奨されません[https://lore.kernel.org/linux-btrfs/06e92a0b-e71b-eb21-edb5-9d2a5513b718@gmail.com/] 新しい書き込み可能なスナップショットを作成することで、そのような問題を防ぐことができます。&lt;br /&gt;
* スナップショットは再帰的ではありません。ネストされたサブボリュームは、スナップショット内部では空のディレクトリになります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 送信/受信 ===&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|send}} コマンドを使って標準出力やファイルに送信することができます。Btrfs の {{ic|receive}} コマンドにパイプで渡すことで非常に便利に使うことが可能です。例えば、{{ic|/root_backup}} という名前のスナップショットを {{ic|/backup}} に送信するには以下のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send /root_backup | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
送信するスナップショットは読み取り専用である必要があります。上記のコマンドは外部デバイスにサブボリュームをコピーするのにも使えます (例えば上の {{ic|/backup}} を USB ディスクにマウント)。&lt;br /&gt;
&lt;br /&gt;
また、スナップショットの差分だけを送信することも可能です。例えば、上記のように {{ic|root_backup}} のコピーを送信したことがある場合、{{ic|root_backup_new}} という名前の読み取り専用のスナップショットを新しく作成してから、増加差分だけを {{ic|/backup}} に送信するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send -p /root_backup /root_backup_new | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
これで {{ic|root_backup_new}} という名前の新しいサブボリュームが {{ic|/backup}} に作成されます。&lt;br /&gt;
&lt;br /&gt;
差分バックアップをしたり自動的にバックアップを行うツールは [https://btrfs.wiki.kernel.org/index.php/Incremental_Backup Btrfs Wiki&#039;s Incremental Backup] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 重複排除 ===&lt;br /&gt;
&lt;br /&gt;
コピーオンライトを使用した場合、Btrfs は実際にはデータをコピーしないでファイルやサブボリュームをコピーできます。ファイルに変更が加えられたときに新しい本当のコピーが作成されます。重複排除はさらに共通部分が存在するデータブロックを認識して、コピーオンライトと同じようにエクステントにまとめてしまいます。&lt;br /&gt;
&lt;br /&gt;
Btrfs パーティションの重複排除に使用するツールには {{pkg|duperemove}}, {{pkg|bees}} などが存在します。{{aur|rmlint-git}}, {{pkg|rdfind}}, {{aur|jdupes}} あるいは {{aur|dduper-git}} などを使うことでファイルベースでデータの重複排除を行うこともできます。&lt;br /&gt;
&lt;br /&gt;
これらのプログラムで利用可能な機能の概要や追加情報については [https://btrfs.readthedocs.io/en/latest/Deduplication.html upstreamの wiki ページ] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== リサイズ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|データの損失を防ぐために、サイズ変更作業を始める前に必ずデータをバックアップしてください}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは、デバイスで利用可能な最大のスペースまで拡大することができ、正確なサイズを指定することもできます。ファイルシステムのサイズを大きくする前に、デバイスまたは論理ボリュームのサイズを大きくすることを確認します。&lt;br /&gt;
ファイルシステムに正確なサイズを指定する場合、新しいサイズが次の条件を満たすことを確認します。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは、使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
デバイス上のファイルシステムのサイズを小さくする場合は、新しいサイズが以下の条件を満たすことを確認する。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスのサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルシステムを保持する論理ボリュームのサイズも小さくする場合は、デバイスまたは論理ボリュームのサイズを小さくする前に、必ずファイルシステムのサイズを小さくしてください。}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムのサイズをデバイスの利用可能な最大サイズに拡張するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ファイルシステムを特定のサイズに拡張する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize &#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;size&#039;&#039;}} は、希望するサイズにバイト単位で置き換えてください。K(キロバイト)、M(メガバイト)、G(ギガバイト)など、値の単位を指定することも可能です。また、値の前にプラス (+) 記号、マイナス (-) 記号を付けることで、現在のサイズに対する増減をそれぞれ指定することも可能です。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize +&#039;&#039;size&#039;&#039; /&lt;br /&gt;
 # btrfs filesystem resize -&#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
== 既知の問題 ==&lt;br /&gt;
&lt;br /&gt;
試す前に、いくつかの制限を知っておく必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs には暗号化のサポートが組み込まれていませんが、この [https://lwn.net/Articles/700487/] は将来的に提供される可能性があります。 ユーザーは、 {{ic|mkfs.btrfs}} を実行する前にパーティションを暗号化できます。 [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96#Btrfs_.E3.82.B5.E3.83.96.E3.83.9C.E3.83.AA.E3.83.A5.E3.83.BC.E3.83.A0.E3.81.A8.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97 dm-crypt/スワップを使用したsystem#Btrfsサブボリューム全体の暗号化] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既存の Btrfs ファイルシステムは [[EncFS]] や [[TrueCrypt]] のようなものを使用できますが、おそらく Btrfs の機能の一部はありません。&lt;br /&gt;
&lt;br /&gt;
=== btrfs チェックの問題 ===&lt;br /&gt;
ツール{{ic|btrfs check}} には既知の問題があるため、セクション [[#btrfs check]] をよく参照してから実行してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== パーティションレス Btrfs ディスク ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|この種の構成はブートデバイスには適しておらず、代わりに Btrfs パーティションと別の [[EFI システムパーティション]] を設定することが推奨されています。さらに、GRUB はパーティションレスディスクへのインストールを強く推奨していません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Btrfs はデータストレージデバイス全体を占有し、[[MBR]] や [[GPT]] のパーティション方式を置き換えることができます。この場合、[[#サブボリューム|サブボリューム]] を使用してパーティションをシミュレートします。ただし、既存のパーティション上に [[#ファイルシステムの作成|Btrfs ファイルシステムを作成]] する場合、必ずしもパーティションレス構成にする必要はありません。パーティションレスの単一ディスク構成にはいくつかの制限があります。&lt;br /&gt;
&lt;br /&gt;
* 同じディスク上の別のパーティションに他の[[ファイルシステム]]を配置することはできません。&lt;br /&gt;
* 前のポイントのため、このディスクに [[ESP]] を持つことは不可能です。[[Unified Extensible Firmware Interface|UEFI]] ブートには別のデバイスが必要です。&lt;br /&gt;
&lt;br /&gt;
既存のパーティションテーブルを Btrfs で上書きするには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/sd&#039;&#039;X&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
たとえば、 {{ic|/dev/sda1}} ではなく {{ic|/dev/sda}} を使用します。後者は、パーティショニングスキーム全体を置き換えるのではなく、既存のパーティションをフォーマットします。ルートパーティションは Btrfs なので、 {{ic|btrfs}} がカーネルに組み込まれていることを確認するか、{{ic|btrfs}} を [[mkinitcpio.conf#MODULES]] に入れて [mkinitcpio#イメージ作成とアクティベーション|initramfs を再生成] して下さい。 &lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダ]] を、[[パーティショニング#Master Boot Record|マスターブートレコード]] を備えたデータ記憶装置の場合と同様にインストールします。[[Syslinux#手動インストール]] または [[GRUB/Tips and tricks#パーティションまたはパーティションレスディスクへのインストール]] を参照してください。 {{ic|Failed to mount /sysroot}} が原因でカーネルがブートしない場合は、 {{ic|/etc/default/grub}} に {{ic|1=GRUB_PRELOAD_MODULES=&amp;quot;btrfs&amp;quot;}} を追加して、 grub 設定 ([[GRUB#メイン設定ファイルの生成]]) を生成してください。&lt;br /&gt;
&lt;br /&gt;
=== Ext3/4 から Btrfs への変換 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|btrfs メーリングリストには、不完全/破壊/破損した変換に関する多くの報告があります。 失いたくないデータや &#039;&#039;作業中&#039;&#039; のバックアップがあることを確認してください。 詳細については、 btrfswiki の [https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3Conversion fromExt3] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
インストール CD から起動し、次の手順で変換します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs-convert /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションをマウントし、ファイルを確認して変換をテストしてください。 必ず {{ic|/etc/fstab}} を変更してください ({{ic|/etc/fstab}} の &#039;&#039;&#039;type&#039;&#039;&#039; を {{ic|btrfs}} に、 &#039;&#039;&#039;fs_passno&#039;&#039; をに変更すること) [最後のフィールド] を {{ic|0}} に設定します(Btrfs は起動時にファイルシステムのチェックを行わないため)また、パーティションの UUID が変更されていることに注意してください、UUID を使うときは fstab もそれに合わせて更新してください。システムに {{ic|chroot}} して、ブートローダのメニューリストを再構築します([[既存の Linux からインストール]] を参照)ルートファイルシステムを変換する場合、chroot したまま {{ic|mkinitcpio -p linux}} を実行して initramfs を再生成しないと、システムが正常に起動しません。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しく変換された btrfs にファイルをマウントまたは書き込みできないなどの問題がある場合は、バックアップサブボリューム {{ic|/ext2_saved}} がまだ存在する限り、常にロールバックするオプションがあります。 {{ic|btrfs-convert -r /dev/&#039;&#039;partition&#039;&#039;}} コマンドを使用してロールバックします。これにより、新しく変換された btrfs ファイルシステムへの変更が破棄されます。}}&lt;br /&gt;
&lt;br /&gt;
問題がないことを確認したら、バックアップ {{ic|ext2_saved}} サブボリュームを削除して変換を完了します。 これがないと ext3/4 に戻れないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
最後に [[#Balance|balance]] ファイルシステムでスペースを再利用します。&lt;br /&gt;
&lt;br /&gt;
以前にインストールされていたいくつかのアプリケーションは、btrfs に適合する必要があることを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
{{Note|Ext3/4 から Btrfs への変換は時間のかかる作業です。4 TiB のファイルシステムと通常の HDD では、最大で 10 時間かかることがあります。}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム破損のリカバリ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|btrfs check}} ツールには既知の問題があります。セクション [[Btrfs#btrfs check|btrfs check]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;btrfs-check&#039;&#039; はマウントされているファイルシステムでは使えません。ライブ USB から起動しないで &#039;&#039;btrfs-check&#039;&#039; を使えるようにするには、初期 RAM ディスクに以下のように追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|output=&lt;br /&gt;
BINARIES=(btrfs)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定したら [[mkinitcpio]] を使って initramfs を再生成してください。&lt;br /&gt;
&lt;br /&gt;
起動に問題が発生したら、ユーティリティを使って修復することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|fsck でキャッシュを無効化する必要がある場合、起動後に一定時間フリーズするのは通常の動作です (btrfs-transaction がハングアップしているというメッセージがコンソールに表示されます) しばらく経てばシステムは復帰します。}}&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|btrfs-check}} を参照。&lt;br /&gt;
&lt;br /&gt;
=== スナップショットから起動する ===&lt;br /&gt;
&lt;br /&gt;
スナップショットをブートするためには、セクション [[Btrfs#サブボリュームをルートとしてマウントする|サブボリュームをルートとしてマウントする]] で説明されているように、サブボリュームをルートパーティションとしてマウントする場合と同じ手順が適用されます。スナップショットはサブボリュームのようにマウントできます。&lt;br /&gt;
&lt;br /&gt;
* [[GRUB]] を使用している場合、{{Pkg|grub-btrfs}} または {{AUR|grub-btrfs-git}} を使用して設定ファイルを再生成すると、自動的に btrfs スナップショットをブートメニューに取り込むことができます。&lt;br /&gt;
* [[rEFInd]] を使用している場合は、{{ic|refind-btrfs.service}} を [[systemd#ユニットを使う|有効]] にして開始後に、{{AUR|refind-btrfs}} を使用してブートメニューに btrfs スナップショットを自動的に取り込むことができます。&lt;br /&gt;
* [[Limine]] を使用する場合、{{AUR|limine-snapper-sync}} をインストールすることで、{{ic|limine-snapper-watcher.service}} を有効化した後、[[Snapper]] リストが変更されるたびにブートメニューにスナップショットエントリを自動生成できます。詳しくは [[Limine#Btrfs の Snapper スナップショットとの統合]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== systemd-nspawn で Btrfs サブボリュームを使う ===&lt;br /&gt;
&lt;br /&gt;
[[Systemd-nspawn#Btrfs のサブボリュームをコンテナのルートとして使う]]や [[Systemd-nspawn#コンテナの一時的な Btrfs スナップショットを使う]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アクセス時間のメタデータ更新を削減 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は書き込み時にコピーの性質を持つため、ファイルにアクセスするだけでメタデータのコピーと書き込みを開始します。アクセス時間の更新頻度を減らすと、この予期しないディスク使用がなくなり、パフォーマンスが向上する可能性があります。使用可能なオプションについては、 [[fstab#atime オプション|atime オプション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 外付けドライブへの増分バックアップ ===&lt;br /&gt;
&lt;br /&gt;
以下のパッケージは {{ic|btrfs send}} と {{ic|btrfs receive}} を使って、外部ドライブに増分バックアップを送信します。実装や機能、要件の違いを見るにはそれぞれのドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|btrbk|Btrfs サブボリュームのスナップショットとリモートバックアップを作成するためのツール。|https://github.com/digint/btrbk|{{AUR|btrbk}}}} &lt;br /&gt;
* {{App|snap-sync|[[Snapper]] スナップショットを使用して、外付けドライブまたはリモートマシンにバックアップします。|https://github.com/wesbarnett/snap-sync.git|{{Pkg|snap-sync}}}}&lt;br /&gt;
* {{App|snapsync|[[Snapper]] の同期ツール。|https://github.com/doudou/snapsync|{{AUR|ruby-snapsync}}}}&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Snapper のスナップショットを Btrfs 以外のファイルシステムへバックアップすることができます。&lt;br /&gt;
&lt;br /&gt;
* {{App|snapborg|Snapper スナップショットを {{Pkg|borg}} バックアップと統合する borgmatic のようなツール。|https://github.com/enzingerm/snapborg|{{AUR|snapborg}}}}&lt;br /&gt;
&lt;br /&gt;
=== 自動スナップショット ===&lt;br /&gt;
&lt;br /&gt;
Btrfs スナップショットの管理および自動作成には、[[Snapper]]、[[Timeshift]]、[[Yabsnap]] などのスナップショットマネージャーを使用できます。&lt;br /&gt;
&lt;br /&gt;
=== 自動通知 ===&lt;br /&gt;
&lt;br /&gt;
デスクトップ通知は、重大な Btrfs の問題に即座に気付くのに役立ち、通知がまったくない場合と比較して、より良い認識を提供します。&lt;br /&gt;
&lt;br /&gt;
{{AUR|btrfs-desktop-notification}} 次のイベントにデスクトップ通知を提供します:&lt;br /&gt;
&lt;br /&gt;
* 読み取り専用スナップショットやシステムへのブート。&lt;br /&gt;
* dmesg ログに表示される Btrfs の警告、エラー、致命的なメッセージ。&lt;br /&gt;
&lt;br /&gt;
詳細および設定については、https://gitlab.com/Zesko/btrfs-desktop-notification を参照してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
一般的なトラブルシューティングについては [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Problem FAQ] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
==== パーティションオフセット ====&lt;br /&gt;
&lt;br /&gt;
オフセットの問題は、パーティションのあるディスクに {{ic|core.img}} を埋め込もうとしたときに発生する可能性があります。つまり、GRUB の {{ic|core.img}} をパーティションレスディスク (例: {{ic|/dev/sd&#039;&#039;X&#039;&#039;}}) の Btrfs プールに直接埋め込んでも [[Special:Diff/319474|大丈夫]] です。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] は Btrfs パーティションを起動できますが、モジュールが他の [[ファイルシステム]] よりも大きくなる可能性があります。また、{{ic|grub-install}} で作成した {{ic|core.img}} ファイルは、MBR と最初のパーティションの間にあるドライブの最初の 63 セクタ (31.5KiB) に収まらないかもしれません。{{ic|fdisk}} や {{ic|gdisk}} のような最新のパーティションツールは、最初のパーティションをおよそ 1MiB または 2MiB オフセットすることでこの問題を回避しています。&lt;br /&gt;
&lt;br /&gt;
==== root が見つからない ====&lt;br /&gt;
&lt;br /&gt;
RAID セットアップから起動した時にエラー {{ic|1=error no such device: root}} が表示される場合、{{ic|/usr/share/grub/grub-mkconfig_lib}} を編集して {{ic|1=echo &amp;quot;  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}&amp;quot;}} からクォートを削除してください。grub の設定を再生成すればエラーを出さずに起動できるはずです。&lt;br /&gt;
&lt;br /&gt;
=== マウントがタイムアウト ===&lt;br /&gt;
&lt;br /&gt;
特に大きな RAID1 アレイでは、ブート中にマウントがタイムアウトして、次のようなジャーナルメッセージが表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result &#039;timeout&#039;.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)&amp;gt;&lt;br /&gt;
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題は、[[fstab]] のシステム固有のマウントオプション {{ic|x-systemd.mount-timeout}} で長いタイムアウトを指定することで簡単に回避することが可能です。例:&lt;br /&gt;
&lt;br /&gt;
 /dev/sda                /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0&lt;br /&gt;
&lt;br /&gt;
=== BTRFS: open_ctree failed ===&lt;br /&gt;
&lt;br /&gt;
2014年11月現在、{{ic|mkinitcpio.conf}} で {{ic|btrfs}} フックを使用してマルチデバイスの Btrfs を使っている場合に以下のエラーが発生するというバグが [[systemd]] か [[mkinitcpio]] のどちらかに存在します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
BTRFS: open_ctree failed&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
In some cases useful info is found in syslog - try dmesg|tail or so.&lt;br /&gt;
&lt;br /&gt;
You are now being dropped into an emergency shell.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 行から {{ic|btrfs}} を削除して代わりに {{ic|MODULES}} 行に {{ic|btrfs}} を追加することで解決します。修正を施したら {{ic|mkinitcpio -p linux}} で initramfs を再生成して (必要ならプリセットを調整します) 再起動してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが存在しない raid アレイをマウントしようとしたときも同じエラーが表示されます。その場合は {{ic|/etc/fstab}} に {{ic|degraded}} マウントオプションを追加してください。ルートパーティションがアレイ上にある場合、[[カーネルパラメータ]]に {{ic|1=rootflags=degraded}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
2016年8月現在、このバグの回避策として考えられるのは、{{ic|/etc/fstab}} で単一ドライブのみでアレイをマウントし、他のドライブは btrfs が自動的に発見して追記するようにすることです。UUID や LABEL のようなグループベースの識別子は、この不具合の原因になっているようです。例えば、&#039;disk1&#039; と &#039;disk2&#039; からなる2デバイスの RAID1 アレイには UUID が割り当てられますが、UUID を使う代わりに {{ic|/dev/mapper/disk1}} のみを {{ic|/etc/fstab}} で使用します。より詳しい説明は、以下の [https://web.archive.org/web/20161108175034/http://blog.samcater.com/fix-for-btrfs-open_ctree-failed-when-running-root-fs-on-raid-1-or-raid10-arch-linux/ ブログ記事] を参照してください。&lt;br /&gt;
&lt;br /&gt;
また、[[mkinitcpio#設定|mkinitcpio.conf]] の {{ic|udev}} フックを削除し、{{ic|systemd}} フックに置き換えることも可能な対処法です。この場合、{{ic|btrfs}} は{{ic|HOOKS}}や{{ic|MODULES}} 配列に &#039;&#039;not&#039;&#039; とする必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [https://bbs.archlinux.org/viewtopic.php?id=189845 フォーラムスレッド] や {{Bug|42884}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== btrfs check ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs はまだ開発途上であり、特に {{ic|btrfs check}} コマンドについては仕様が固まっていないので、{{ic|--repair}} スイッチを付けて {{ic|btrfs check}} を実行するときはあらかじめ Btrfs のドキュメントを読んでバックアップを作成することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check btrfs check]&#039;&#039; コマンドを使うことでアンマウントされた Btrfs ファイルシステムをチェックしたり修復することが可能です。ただし、この修復ツールはまだ開発中であり、特定のファイルシステムエラーは修復することができません。&lt;br /&gt;
&lt;br /&gt;
=== 絶え間ないドライブアクティビティ ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル]] バージョン 6.2 以降、{{ic|1=discard=async}} {{man|8|mount}} オプションがデフォルトで設定されています。これ [https://lore.kernel.org/linux-btrfs/Y%2F%2Bn1wS%2F4XAH7X1p@nz/#r 報告] により、廃棄キューがいっぱいになると、アイドル状態でも一部のドライブで一定のドライブアクティビティが発生し、処理されるよりも速くなります。これにより、特に NVMe ベースのドライブで電力使用量が増加する可能性があります。&lt;br /&gt;
&lt;br /&gt;
回避策の 1 つは、ドライブのアクティビティが停止するまで破棄 {{ic|iops_limit}} を増やすことです。&lt;br /&gt;
&lt;br /&gt;
これは、[[Wikipedia:sysfs|sysfs]] を使用して実現できます。例:&lt;br /&gt;
&lt;br /&gt;
 # echo 1000 &amp;gt; /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|&#039;&#039;uuid&#039;&#039;}} は btrfs ファイルシステムの UUID です。{{ic|1000}} の制限は実験的に調整する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動時にパラメータを設定するには、[[systemd-tmpfiles]] を使用できます。たとえば、次のファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/btrfs-discard.conf|&lt;br /&gt;
w /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit - - - - 1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、[[fstab]] の {{ic|nodiscard}} マウントオプションを使用してマウントし、代わりに [[ソリッドステートドライブ#定期的な TRIM|定期的な TRIM]] を使用して、非同期破棄を完全に無効にすることもできます。&lt;br /&gt;
&lt;br /&gt;
=== Device total_bytes should be at most X but found Y ===&lt;br /&gt;
&lt;br /&gt;
もしドライブが別のコンピュータから移動されたり、デバイスの順序が変更された場合で、報告されるサイズの差が非常に小さい(最大でも数メガバイト程度)場合、[[Wikipedia:Host protected area|HPA (Host Protected Area)]] が有効になっている可能性があります。&lt;br /&gt;
&lt;br /&gt;
HPA が有効かどうかを確認するには、{{Pkg|hdparm}} を使用します:&lt;br /&gt;
&lt;br /&gt;
 # hdparm -N DEVICE&lt;br /&gt;
&lt;br /&gt;
出力には 2 つの数字が表示されます:可視のセクタ数と実際のセクタ数です。これらが異なる場合、HPA が有効になっていることを意味します。&lt;br /&gt;
&lt;br /&gt;
もしマザーボードがこれを強制的に設定し、ファームウェアにそれを無効にするオプションがない場合、唯一の選択肢は影響を受けたファイルシステムを縮小することです。これを行う最も簡単な方法は、元のコンピュータで、または HPA を適用しない任意のマシンで行うことです。&lt;br /&gt;
&lt;br /&gt;
=== No space left on device ===&lt;br /&gt;
&lt;br /&gt;
ブログ記事 [https://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html Fixing Btrfs Filesystem Full Problems] では、以下のチェック/手順を提案し、説明しています:&lt;br /&gt;
&lt;br /&gt;
# 今すぐスペースを解放する(履歴スナップショットを削除)&lt;br /&gt;
# 本当にファイルシステムが満杯ですか? メタデータおよび/またはデータチャンクのバランスが崩れている({{ic|btrfs balance}} を実行)&lt;br /&gt;
# 本当にファイルシステムが満杯ですか? データチャンクのバランスが崩れている&lt;br /&gt;
# 本当にファイルシステムが満杯ですか? メタデータのバランスが崩れている&lt;br /&gt;
# ファイルシステムが満杯のため、バランスを実行できません({{ic|btrfs device add}} を使用して USB キーやループデバイスなどのデバイスを一時的に Btrfs ファイルシステムに追加してから、{{ic|btrfs balance}} を実行)&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;公式サイト&#039;&#039;&#039;&lt;br /&gt;
** [https://btrfs.readthedocs.io Btrfs Documentation]&lt;br /&gt;
** [https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/ Archived Btrfs Wiki]&lt;br /&gt;
* &#039;&#039;&#039;パフォーマンス関連&#039;&#039;&#039;&lt;br /&gt;
** [https://superuser.com/questions/432188/should-i-put-my-multi-device-btrfs-filesystem-on-disk-partitions-or-raw-devices Btrfs on raw disks?]&lt;br /&gt;
** [https://lore.kernel.org/linux-btrfs/CAKcLGm_MKEdTiHFBd-b-v2sN5gJmgFRqsykzWRXTVqUw4O6Acw@mail.gmail.com/ Varying leafsize and nodesize in Btrfs]&lt;br /&gt;
** [https://lore.kernel.org/linux-btrfs/jgui4j$th5$1@dough.gmane.org/ Btrfs support for efficient SSD operation (data blocks alignment)]&lt;br /&gt;
** [https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/index.php/FAQ.html#Is_Btrfs_optimized_for_SSD.3F Is Btrfs optimized for SSDs?]&lt;br /&gt;
** [https://blog.erdemagaoglu.com/post/4605524309/lzo-vs-snappy-vs-lzf-vs-zlib-a-comparison-of Lzo vs. zLib]&lt;br /&gt;
* &#039;&#039;&#039;その他&#039;&#039;&#039;&lt;br /&gt;
** [[Funtoo:BTRFS Fun]]&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA0ODU Avi Miller presenting Btrfs] at SCALE 10x, January 2012.&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA4Mzc Summary of Chris Mason&#039;s talk] from LFCS 2012&lt;br /&gt;
** [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35054394c4b3cecd52577c2662c84da1f3e73525 Btrfs: stop providing a bmap operation to avoid swapfile corruptions] 2009-01-21&lt;br /&gt;
** [https://marc.merlins.org/perso/btrfs/post_2014-03-22_Btrfs-Tips_-Doing-Fast-Incremental-Backups-With-Btrfs-Send-and-Receive.html Doing Fast Incremental Backups With Btrfs Send and Receive]&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A&amp;diff=39375</id>
		<title>Dm-crypt/システム設定</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A&amp;diff=39375"/>
		<updated>2024-12-20T08:15:19Z</updated>

		<summary type="html">&lt;p&gt;N: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:保存データ暗号化]]&lt;br /&gt;
[[en:dm-crypt/System configuration]]&lt;br /&gt;
[[es:Dm-crypt (Español)/System configuration]]&lt;br /&gt;
[[pt:Dm-crypt (Português)/System configuration]]&lt;br /&gt;
[[ru:Dm-crypt (Русский)/System configuration]]&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ルートファイルシステムや他の初期ブートにおけるファイルシステムをリモートでアンロックする必要がある場合 (ヘッドレスマシンや遠隔地のサーバなど) は、[[dm-crypt/特記事項#root などのパーティションのリモート解除]] の指示に従ってください。&lt;br /&gt;
* コマンドの出力を挿入できる[[テキストエディタ]]を使用し、[[永続的なブロックデバイスの命名#永続的な命名の方法|適切な lsblk や blkid コマンド]]を使うことで、設定ファイルにおける UUID や PARTUUID などの入力作業を容易にできます (例えば、[[nano]] での {{ic|Ctrl+t}}、[[Vim]] や [[Neovim]] での {{ic|:read}}、[[mcedit]] での {{ic|Alt+u}})。あるいは、[[アプリケーション一覧/ユーティリティ#ターミナルマルチプレクサ|ターミナルマルチプレクサ]]を使用して、そのコピーペースト機能を使用することもできます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 初期ユーザ空間でロックを解除する ==&lt;br /&gt;
&lt;br /&gt;
暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが [[initramfs]] に含まれている必要があります。ロックを解除するべきボリュームは、たいてい[[カーネルパラメータ]]で渡されます。&lt;br /&gt;
&lt;br /&gt;
以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio ===&lt;br /&gt;
&lt;br /&gt;
場合にもよりますが、以下の [[mkinitcpio#HOOKS|mkinitcpio フック]]の一部は有効化しておく必要があります:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! busybox !! systemd !! ユースケース&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|encrypt}}&lt;br /&gt;
|style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|sd-encrypt}}&lt;br /&gt;
| ルートパーティションが暗号化されている場合や、何らかの暗号化されているパーティションがルートパーティションのマウントよりも&#039;&#039;前に&#039;&#039;必要になる場合に必要です。その他の場合においては必要ありません。{{ic|/etc/crypttab}} などのシステム初期化スクリプトが、ルート以外のパーティションのロックを解除してくれるからです。このフックは {{ic|udev}} や {{ic|systemd}} フックよりも&#039;&#039;後に&#039;&#039;配置しなければなりません。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|keyboard}}&lt;br /&gt;
| 初期ユーザ空間でキーボードを動作させるために必要です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|起動するたびにハードウェアの構成が異なるようなシステム (例えば、外部キーボードと内部キーボードのあるノート PC や[[Wikipedia:Headless computer|ヘッドレスシステム]]) では、このフックを {{ic|autodetect}} より前に配置して、全てのキーボードドライバを initramfs に含めると便利です。そうしないと、initramfs イメージの生成時に外部キーボードが接続されていなければ、そのキーボードは初期ユーザ空間では動作しなくなってしまいます。}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|keymap}}&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|sd-vconsole}}&lt;br /&gt;
| 暗号化パスワードの入力において US キーマップ以外のサポートを提供します。このフックは、{{ic|encrypt}} フックよりも&#039;&#039;前に&#039;&#039;配置しなければなりません。さもないと、暗号化パスワードの入力にデフォルトの US キーマップしか使えません。キーマップは {{ic|/etc/vconsole.conf}} で設定してください ([[Linux コンソール/キーボード設定#永続的な設定]] を参照してください)。&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: center;white-space:nowrap;&amp;quot;| {{ic|consolefont}}&lt;br /&gt;
| 初期ユーザ空間で代替のコンソールフォントをロードします。フォントは {{ic|/etc/vconsole.conf}} で設定してください ([[Linux コンソール/キーボード設定#永続的な設定]] を参照してください)。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
必要な[[mkinitcpio#通常のフック|その他のフック]]は、システムのインストールに関するその他のマニュアルから明らかなはずです。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/mkinitcpio.conf}} に変更を加えたときは [[initramfs を再生成する]]のを忘れないでください。}}&lt;br /&gt;
&lt;br /&gt;
==== 例 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|encrypt}} フックを使用する典型的な {{ic|/etc/mkinitcpio.conf}} の設定としては、以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
...&lt;br /&gt;
HOOKS=(base &#039;&#039;&#039;udev&#039;&#039;&#039; autodetect modconf kms keyboard &#039;&#039;&#039;keymap&#039;&#039;&#039; &#039;&#039;&#039;consolefont&#039;&#039;&#039; block &#039;&#039;&#039;encrypt&#039;&#039;&#039; lvm2 filesystems fsck)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|sd-encrypt}} フックを使用する、systemd ベースの initramfs の設定は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
...&lt;br /&gt;
HOOKS=(base &#039;&#039;&#039;systemd&#039;&#039;&#039; autodetect modconf kms keyboard &#039;&#039;&#039;sd-vconsole&#039;&#039;&#039; block &#039;&#039;&#039;sd-encrypt&#039;&#039;&#039; lvm2 filesystems fsck)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルパラメータ ===&lt;br /&gt;
&lt;br /&gt;
必要な[[カーネルパラメータ]]は、{{ic|encrypt}} フックと {{ic|sd-encrypt}} フックのどちらを使うかによります。{{ic|root}} と {{ic|resume}} は両方において同じように指定します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|sd-encrypt}} フックと [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]を使用する場合、これらのカーネルパラメータの指定は省略できます。[[dm-crypt/システム全体の暗号化#ブートローダーの設定]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
==== root ====&lt;br /&gt;
&lt;br /&gt;
{{ic|1=root=}} パラメータでは、実際の (暗号化の解除された) ルートファイルシステムの {{ic|&#039;&#039;device&#039;&#039;}} を指定します:&lt;br /&gt;
&lt;br /&gt;
 root=&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ルートファイルシステムが、暗号化の解除されたデバイスファイル上に直接フォーマットされている場合、このパラメータの引数は {{ic|/dev/mapper/&#039;&#039;dmname&#039;&#039;}} になります。&lt;br /&gt;
* 最初に LVM がアクティブ化されていて、そこに[[dm-crypt/システム全体の暗号化#LUKS on LVM|暗号化されている論理ルートボリューム]]が存在している場合、引数は上記の形式と同じになります。&lt;br /&gt;
* ルートファイルシステムが、完全に[[dm-crypt/システム全体の暗号化#LVM on LUKS|暗号化されている LVM]] の論理ボリューム内に存在している場合、デバイスマッパーは一般に {{ic|1=root=/dev/&#039;&#039;volumegroup&#039;&#039;/&#039;&#039;logicalvolume&#039;&#039;}} となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[GRUB]] を使用していて、&#039;&#039;grub-mkconfig&#039;&#039; で {{ic|grub.cfg}} を生成する場合は、{{ic|1=root=}} パラメータを手動で指定する必要はありません。&#039;&#039;grub-mkconfig&#039;&#039; は、暗号化の解除されたルートファイルシステムの適切な UUID を検出し、その UUID を {{ic|grub.cfg}} へ自動的に追加します。}}&lt;br /&gt;
&lt;br /&gt;
==== resume ====&lt;br /&gt;
&lt;br /&gt;
 resume=&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* {{ic|&#039;&#039;device&#039;&#039;}} は、[[電源管理/サスペンドとハイバネート#ハイバネーション|suspend to disk (ハイバネーション)]] で使用される、暗号化の解除された (スワップ) ファイルシステムのデバイスファイルです。スワップが個別のパーティション上にある場合は、{{ic|/dev/mapper/swap}} という形式になります。[[dm-crypt/スワップの暗号化]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
==== encrypt フックを使う ====&lt;br /&gt;
&lt;br /&gt;
{{Note|[[sd-encrypt]] フックと比べて、{{ic|encrypt}} フックは以下をサポートしていません:&lt;br /&gt;
* [[dm-crypt/特記事項#encrypt フックと複数のディスク|複数の暗号化ディスク]]のロック解除 ({{Bug|23182}})。initramfs 内で &#039;&#039;&#039;一つ&#039;&#039;&#039;のデバイスしかロックを解除できません。&lt;br /&gt;
* [[dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化|デタッチされた LUKS ヘッダ]]の使用 ({{Bug|42851}})。&lt;br /&gt;
* [[#crypttab|crypttab]] によってサポートされている追加オプションの設定 (例: {{ic|sector-size}}) ({{Bug|72119}})。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== cryptdevice =====&lt;br /&gt;
&lt;br /&gt;
このパラメータでは、コールドブート時に暗号化済みルートファイルシステムを含むデバイスを指定します。これは、{{ic|encrypt}} フックによってパースされ、どのデバイスに暗号化されているシステムが含まれているかを特定します:&lt;br /&gt;
&lt;br /&gt;
 cryptdevice=&#039;&#039;device&#039;&#039;:&#039;&#039;dmname&#039;&#039;:&#039;&#039;options&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* {{ic|&#039;&#039;device&#039;&#039;}} は、暗号化されたデバイスのバッキングデバイスへのパスです。[[永続的なブロックデバイスの命名]]を使うことを強く推奨します。&lt;br /&gt;
* {{ic|&#039;&#039;dmname&#039;&#039;}} は復号後にデバイスに与えられる &#039;&#039;&#039;d&#039;&#039;&#039;evice-&#039;&#039;&#039;m&#039;&#039;&#039;apper の名前です。{{ic|/dev/mapper/&#039;&#039;dmname&#039;&#039;}} として使用できるようになります。&lt;br /&gt;
* {{ic|&#039;&#039;options&#039;&#039;}} (オプション) は、コンマで区切られたオプションです (TRIM サポートなど用)。オプションが必要ないのであれば、このパラメータは省略してください ({{ic|1=cryptdevice=&#039;&#039;device&#039;&#039;:&#039;&#039;dmname&#039;&#039;}})。&lt;br /&gt;
* LVM に[[Dm-crypt/システム全体の暗号化#LUKS on LVM|暗号化されたルート]]が含まれる場合、最初に LVM が有効になって暗号化されたルートの論理ボリュームを含むボリュームグループが &#039;&#039;device&#039;&#039; として使用できるようになります。それからボリュームグループがルートにマッピングされます。パラメータは {{ic|1=cryptdevice=&#039;&#039;/dev/vgname/lvname&#039;&#039;:&#039;&#039;dmname&#039;&#039;}} という形式になります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ソリッドステートドライブ (SSD) に対しては、[[dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート|Discard/TRIM のサポートを有効化する]]と良いかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
===== cryptkey =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|パスフレーズを使用するのであれば、{{ic|1=cryptkey=}} パラメータを手動で指定する必要はありません。その場合、ブート時にパスフレーズを入力するためのプロンプトが表示されます。}}&lt;br /&gt;
&lt;br /&gt;
このパラメータはキーファイルの場所を指定します。{{ic|&#039;&#039;encrypt&#039;&#039;}} フックがそのキーファイルを読み込んで {{ic|&#039;&#039;cryptdevice&#039;&#039;}} のロックを解除するために必要です。(鍵がデフォルトの場所にある場合を除き (以下を参照)) キーファイルが特定のデバイスにファイルとして存在するか、特定の場所から始まるビットストリームであるか、initramfs にファイルとして存在するかによって、3つのパラメータセットを持つことができます。&lt;br /&gt;
&lt;br /&gt;
デバイス内のファイルの場合、形式は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 cryptkey=&#039;&#039;device&#039;&#039;:&#039;&#039;fstype&#039;&#039;:&#039;&#039;path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* {{ic|&#039;&#039;device&#039;&#039;}}: キーが存在する raw ブロックデバイス。[[永続的なブロックデバイスの命名]]を使うことを強く推奨します。&lt;br /&gt;
* {{ic|&#039;&#039;fstype&#039;&#039;}}: {{ic|&#039;&#039;device&#039;&#039;}} のファイルシステムのタイプ (auto を指定することも可)。&lt;br /&gt;
* {{ic|&#039;&#039;path&#039;&#039;}}: デバイス内のキーファイルの絶対パス。&lt;br /&gt;
&lt;br /&gt;
例: {{ic|1=cryptkey=LABEL=usbstick:vfat:/secretkey}}&lt;br /&gt;
&lt;br /&gt;
デバイス上のビットストリームの場合、キーの場所は次のように指定されます:&lt;br /&gt;
&lt;br /&gt;
For a bitstream on a device the key&#039;s location is specified with the following: &lt;br /&gt;
&lt;br /&gt;
 cryptkey=&#039;&#039;device&#039;&#039;:&#039;&#039;offset&#039;&#039;:&#039;&#039;size&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
ここで、オフセットとサイズはバイト単位です。例えば、{{ic|1=cryptkey=UUID=&#039;&#039;ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ&#039;&#039;:0:512}} は、デバイスの先頭にある 512 バイトのキーファイルを読み込みます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|アクセスしたいデバイスのパスに {{ic|:}} 文字が含まれている場合、その文字をバックスラッシュ {{ic|\}} でエスケープしなければなりません。そのような場合、cryptkey パラメータは次のような見た目になります: ID {{ic|usb-123456-0:0}} の USB キーの場合、{{ic|1=cryptkey=/dev/disk/by-id/usb-123456-0\:0:0:512}}。}}&lt;br /&gt;
&lt;br /&gt;
Initramfs 内に[[mkinitcpio#BINARIES と FILES|含められている]]ファイルの場合、形式は次のようになります[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L14]:&lt;br /&gt;
&lt;br /&gt;
 cryptkey=rootfs:&#039;&#039;path&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例: {{ic|1=cryptkey=rootfs:/secretkey}}&lt;br /&gt;
&lt;br /&gt;
また、{{ic|cryptkey}} が指定されない場合、デフォルトで (initramfs 内の) {{ic|/crypto_keyfile.bin}} が指定されたものとみなされることに注意してください。[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L8]&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt/デバイスの暗号化#キーファイル]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
===== crypto =====&lt;br /&gt;
&lt;br /&gt;
これは、&#039;&#039;dm-crypt&#039;&#039; プレーンモードのオプションを &#039;&#039;encrypt&#039;&#039; フックに渡すための固有のパラメータです。&lt;br /&gt;
&lt;br /&gt;
以下の形式を取ります:&lt;br /&gt;
&lt;br /&gt;
 crypto=&#039;&#039;hash&#039;&#039;:&#039;&#039;cipher&#039;&#039;:&#039;&#039;keysize&#039;&#039;:&#039;&#039;offset&#039;&#039;:&#039;&#039;skip&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
引数は、&#039;&#039;cryptsetup&#039;&#039; のオプションと直接関連します。[[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;plain&#039;&#039; のデフォルトオプションのみで暗号化されたディスクの場合、{{ic|crypto}} 引数を指定しなければなりませんが、各エントリは空白のままにすることができます:&lt;br /&gt;
&lt;br /&gt;
 crypto=::::&lt;br /&gt;
&lt;br /&gt;
引数の具体的な例は以下の通りです:&lt;br /&gt;
&lt;br /&gt;
 crypto=sha512:twofish-xts-plain64:512:0:&lt;br /&gt;
&lt;br /&gt;
==== systemd-cryptsetup-generator を使う ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-cryptsetup-generator&#039;&#039; は、暗号化されたデバイスのロックを解除するために、[[カーネルパラメータ]]のサブセットと {{ic|/etc/crypttab}} を読み込む [[systemd]] ユニットジェネレータです。このジェネレータに関する詳細やサポートされている全オプションについては、{{man|8|systemd-cryptsetup-generator}} man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-cryptsetup-generator&#039;&#039; は、{{ic|sd-encrypt}} [[Mkinitcpio#HOOKS|mkinitcpio フック]]や {{ic|systemd}} [[Dracut#Dracut モジュール|dracut モジュール]]が使用される [[Arch ブートプロセス#initramfs|initramfs の段階]]で実行されます。&lt;br /&gt;
&lt;br /&gt;
以下では、&#039;&#039;systemd-cryptsetup-generator&#039;&#039; によって使用される[[カーネルパラメータ]]の一部を説明します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、{{ic|/etc/crypttab}} として initramfs に追加されます。このファイルには、initramfs の段階でロックを解除する必要のあるデバイスを指定できます。このファイルの構文は [[#crypttab]] を参照してください。{{ic|/etc/crypttab.initramfs}} が存在しない場合、{{ic|/etc/crypttab}} は initramfs に追加されず、ロック解除可能なデバイスは以下に挙げるカーネルパラメータで指定する必要があります。&lt;br /&gt;
* {{ic|/etc/crypttab.initramfs}} では、{{ic|rd.luks}} のように UUID 以外も使用できます。[[永続的なブロックデバイスの命名#永続的な命名の方法|永続的なブロックデバイスの命名方法]]のうち任意のものを使用できます。&lt;br /&gt;
* ブート中に入力されたパスワードは {{man|8|systemd-cryptsetup}} によってカーネルのキーリングにキャッシュされます。なので、同じパスワードで複数のデバイスのロックを解除できる場合 (これには、ブート後にロックを解除される [[#crypttab|crypttab]] 内のデバイスも含まれます)、そのパスワードの入力は1度だけで済みます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|rd.luks}} パラメータ群はすべて複数回指定することが可能であり、LUKS で暗号化された複数のボリュームのロックを解除できます。&lt;br /&gt;
* {{ic|rd.luks}} パラメータは LUKS デバイスのロック解除のみをサポートしています。Plain な dm-crypt デバイスのロックを解除するには、そのデバイスを {{ic|/etc/crypttab.initramfs}} 内で指定しなければなりません。このファイルの構文は [[#crypttab]] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|/etc/crypttab}} か {{ic|/etc/crypttab.initramfs}} を使用していて、かつ {{ic|luks.*}} パラメータか {{ic|rd.luks.*}} パラメータも使用している場合、カーネルコマンドラインで指定されたデバイスしかアクティブ化されず、{{ic|Not creating device &#039;devicename&#039; because it was not specified on the kernel command line.}} というメッセージが表示されます。これは、{{ic|luks.*}} パラメータや {{ic|rd.luks.*}} パラメータが、crypttab のデバイスのうちどれをアクティブ化するかを制御するからです。{{ic|/etc/crypttab}} 内の全デバイスをアクティブ化するには、{{ic|luks.*}} パラメータを使用せず、{{ic|rd.luks.*}} を使用してください。{{ic|/etc/crypttab.initramfs}} 内の全デバイスをアクティブ化するには、{{ic|luks.*}} も {{ic|rd.luks.*}} も使用しないでください。}}&lt;br /&gt;
&lt;br /&gt;
===== rd.luks.uuid =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|rd.luks.name}} を使用する場合、{{ic|rd.luks.uuid}} は省略できます。}}&lt;br /&gt;
&lt;br /&gt;
 rd.luks.uuid=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブート時に復号するデバイスの [[UUID]] をこのフラグで指定します。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、マッピングされたデバイスは、{{ic|/dev/mapper/luks-&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;}} に配置されます。&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; は LUKS パーティションの UUID です。&lt;br /&gt;
&lt;br /&gt;
===== rd.luks.name =====&lt;br /&gt;
&lt;br /&gt;
{{Tip|このパラメータを使用する場合、{{ic|rd.luks.uuid}} は省略できます。}}&lt;br /&gt;
&lt;br /&gt;
 rd.luks.name=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=&#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
LUKS パーティションが開かれたあとにマッピングされるデバイスの名前を指定します。&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; は LUKS パーティションの UUID です。これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第2パラメータと等価です。&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|1=rd.luks.name=12345678-9abc-def0-1234-56789abcdef0=root}} を指定すると、UUID {{ic|12345678-9ABC-DEF0-1234-56789ABCDEF0}} のロック解除された LUKS デバイスは、{{ic|/dev/mapper/root}} に配置されます。&lt;br /&gt;
&lt;br /&gt;
===== rd.luks.key =====&lt;br /&gt;
&lt;br /&gt;
UUID で指定されたデバイスを復号する際に用いるパスワードファイルの場所を指定します。{{ic|encrypt}} フックの {{ic|cryptkey}} パラメータにあるようなデフォルトの場所は存在しません。&lt;br /&gt;
&lt;br /&gt;
キーファイルが [[mkinitcpio#BINARIES と FILES|initramfs 内に含まれている]]場合は:&lt;br /&gt;
&lt;br /&gt;
 rd.luks.key=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=&#039;&#039;/path/to/keyfile&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるいは&lt;br /&gt;
&lt;br /&gt;
 rd.luks.key=&#039;&#039;/path/to/keyfile&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|キーファイルが {{ic|/etc/cryptsetup-keys.d/&#039;&#039;name&#039;&#039;.key}} として含まれている場合、{{ic|rd.luks.key}} パラメータは完全に省略できます。}}&lt;br /&gt;
&lt;br /&gt;
キーファイルが他のデバイス上に存在する場合は:&lt;br /&gt;
&lt;br /&gt;
 rd.luks.key=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=&#039;&#039;/path/to/keyfile&#039;&#039;:UUID=&#039;&#039;ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=UUID=&#039;&#039;ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ&#039;&#039;}} の部分は、キーファイルの存在するデバイスの識別子に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* ファイルシステムの種類がルートファイルシステムのものと異なる場合は、[[mkinitcpio#MODULES|そのファイルシステム用のカーネルモジュールを initramfs 内に含める]]必要があります。&lt;br /&gt;
* {{ic|rd.luks.key}} で他のデバイス上のキーファイルを指定した場合、デバイスが利用できない場合にデフォルトではパスワードプロンプトにフォールバックしません。パスワードプロンプトにフォールバックさせるには、{{ic|rd.luks.options}} で {{ic|1=keyfile-timeout=}} を指定してください。例えば、10秒のタイムアウトを設定するには: {{bc|1=rd.luks.options=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=keyfile-timeout=10s}}。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== rd.luks.options =====&lt;br /&gt;
&lt;br /&gt;
 rd.luks.options=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=&#039;&#039;options&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
または&lt;br /&gt;
&lt;br /&gt;
 rd.luks.options=&#039;&#039;options&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UUID を指定した場合、そのデバイスに対してオプションを設定します。UUID を指定しなかった場合、他の場所 (例えば crypttab) で指定しなかった全デバイスに対してオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
このパラメータは [[#crypttab|crypttab]] のオプションフィールドに似ています。形式は同じです。オプションはコンマで区切られ、値のあるオプションは {{ic|1=&#039;&#039;option&#039;&#039;=&#039;&#039;value&#039;&#039;}} のように指定します。これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第3パラメータとほぼ等価です。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 rd.luks.options=timeout=10s,discard,password-echo=no,tries=1&lt;br /&gt;
&lt;br /&gt;
====== タイムアウト ======&lt;br /&gt;
&lt;br /&gt;
ブート中にパスワードを入力する際のタイムアウトを設定するオプションは2つあります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=rd.luks.options=timeout=&#039;&#039;mytimeout&#039;&#039;}} は、パスワードをクエリする際のタイムアウトを指定します。&lt;br /&gt;
* {{ic|1=rootflags=x-systemd.device-timeout=&#039;&#039;mytimeout&#039;&#039;}} は、rootfs デバイスが現れるまで systemd がどれだけ待つかを指定します (デフォルトは 90 秒)。&lt;br /&gt;
&lt;br /&gt;
タイムアウトを両方無効化したい場合は、両方のタイムアウトをゼロに設定してください:&lt;br /&gt;
&lt;br /&gt;
 rd.luks.options=timeout=0 rootflags=x-systemd.device-timeout=0&lt;br /&gt;
&lt;br /&gt;
====== Password echo ======&lt;br /&gt;
&lt;br /&gt;
ユーザがパスワードを入力する際、&#039;&#039;systemd-cryptsetup&#039;&#039; はデフォルトで、入力された各文字をアスタリスク ({{ic|*}}) として表示します。これは {{ic|encrypt}} の挙動とは異なります ({{ic|encrypt}} は何も表示しません)。何も表示させないようにするには、{{ic|1=password-echo=no}} オプションを設定してください:&lt;br /&gt;
&lt;br /&gt;
 rd.luks.options=password-echo=no&lt;br /&gt;
&lt;br /&gt;
====== Trusted Platform Module と FIDO2 鍵 ======&lt;br /&gt;
&lt;br /&gt;
あなたのシステム上で [[TPM|TPM2]] チップが利用可能である、あるいは FIDO2 互換のセキュリティキーを使用している場合、パスワードやキーファイルを使わずにボリュームのロックを自動的に解除できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|rd.luks.uuid}} か {{ic|rd.luks.name}} に加えて、以下を設定してください:&lt;br /&gt;
* TPM2 チップの場合: {{ic|1=rd.luks.options=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=tpm2-device=auto}}&lt;br /&gt;
* FIDO2 鍵の場合: {{ic|1=rd.luks.options=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;=fido2-device=auto}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|/etc/crypttab.initramfs}} を使えば、カーネルオプションで指定する必要はありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab.initramfs|2=&lt;br /&gt;
root  UUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039;  none  tpm2-device=auto&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|/etc/crypttab.initramfs}} に変更を加えた後に [[initramfs を再生成する]]ことを忘れないでください。}}&lt;br /&gt;
&lt;br /&gt;
ここでは、暗号化されたボリュームは {{ic|root}} という名前で ({{ic|/dev/mapper/root}} に) マウントされます。対象のストレージデバイスの UUID でマウントされ、パスワードは使われず、TPM2 デバイスからキーが取得されます。&lt;br /&gt;
&lt;br /&gt;
TPM2 デバイスを使用するにはパスワードのフィールドに {{ic|none}} を指定しなければならないことに注意してください。さもないと、与えられた値がパスワードか鍵として使用されてしまい、それがうまくいかなかった場合に TPM2 デバイスからキーを読み込もうとせずにパスワードプロンプトが表示してしまいます。&lt;br /&gt;
&lt;br /&gt;
上記のようにデバイスを UUID で指定する場合、それが基底のストレージデバイス (つまり、暗号化されているデバイス自体) の UUID であるを確認してください (他の場所でルートファイルシステムとして指定される、復号さらた後のボリュームの UUID ではありません)。&lt;br /&gt;
&lt;br /&gt;
===== rd.luks.data =====&lt;br /&gt;
&lt;br /&gt;
デタッチされた LUKS ヘッダを使用する場合、暗号化されたデータが含まれるブロックデバイスを指定してください。ヘッダファイルの場所は {{ic|rd.luks.options}} で指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細や方法は [[dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 後期ユーザ空間でロックを解除する ==&lt;br /&gt;
&lt;br /&gt;
=== crypttab ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/crypttab}} (encrypted device table) ファイルには、システムの起動時にロックを解除する暗号化デバイスのリストを記述します。[[fstab]] と似ています。このファイルを使うことで、暗号化したスワップデバイスやセカンダリファイルシステムを自動でマウントすることが可能です。&lt;br /&gt;
&lt;br /&gt;
{{ic|crypttab}} は {{ic|fstab}} より&#039;&#039;前に&#039;&#039;読み込まれます。dm-crypt コンテナを、その内部に存在するファイルシステムよりも前にアンロックできるようにするためです。{{ic|crypttab}} は、システムの起動した&#039;&#039;後に&#039;&#039;読み込まれることに注意してください。よってこの方法は、[[dm-crypt/システム全体の暗号化|ルートパーティションを暗号化する]]場合のように、[[#mkinitcpio|mkinitcpio]] フックを使用して暗号化済みのパーティションのロックを解除する方法や、[[#カーネルパラメータ|カーネルパラメータを使用して設定する]]方法の代わりではありません。{{ic|crypttab}} は、{{ic|systemd-cryptsetup-generator}} によってブート時に自動的に処理されます。&lt;br /&gt;
&lt;br /&gt;
詳細は {{man|5|crypttab}} を参照してください。以下にはいくつかの例を載せています。暗号化されたデバイスをマウントするために UUID を使用する方法については [[#ブート時にマウントする]] セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* {{ic|nofail}} オプションが指定された場合、パスワードの入力中にパスワード入力画面が消えてしまうことがあります。なので、{{ic|nofail}} はキーファイルを使用する場合にのみ使ってください。&lt;br /&gt;
* [[dm-crypt/デバイスの暗号化#plain モードの暗号化オプション|dm-crypt の plain モード]]のデバイスの場合、{{ic|systemd-cryptsetup}} にそれらのデバイスを強制的に認識させるために、{{ic|plain}} オプションを明示的に設定しなければなりません。[https://github.com/systemd/systemd/issues/442 systemd issue 442] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab|2=&lt;br /&gt;
# crypttab ファイルの例。フィールドは左から: 名前、バッキングデバイス、パスフレーズ、cryptsetup オプション。&lt;br /&gt;
&lt;br /&gt;
# /dev/lvm/swap をマウントし、ブート毎に新しいキーで再暗号化する。&lt;br /&gt;
swap	/dev/lvm/swap	/dev/urandom	swap,cipher=aes-xts-plain64,size=256&lt;br /&gt;
&lt;br /&gt;
# /dev/lvm/tmp を /dev/mapper/tmp としてマウントし、plain dm-crypt でランダムなパスフレーズを使うことで、アンマウント後にコンテンツを読めなくする。&lt;br /&gt;
tmp	/dev/lvm/tmp	/dev/urandom	tmp,cipher=aes-xts-plain64,size=256 &lt;br /&gt;
&lt;br /&gt;
# LUKS を使って /dev/lvm/home を /dev/mapper/home としてマウントする。ブート時にパスフレーズのプロンプトを表示する。&lt;br /&gt;
home   /dev/lvm/home&lt;br /&gt;
&lt;br /&gt;
# LUKS を使って /dev/sdb1 を /dev/mapper/backup としてマウントする。パスフレーズはファイルに保存してある。&lt;br /&gt;
backup /dev/sdb1       /home/alice/backup.key&lt;br /&gt;
&lt;br /&gt;
# 唯一の利用可能な TPM を使って /dev/sdX のロックを解除し、myvolume に名称変更する。&lt;br /&gt;
myvolume	/dev/sdX	none	tpm2-device=auto&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
有効化した後にすぐ crypttab をテストするには、[[daemon-reload]] で systemd マネージャの設定を再読み込みし、新しく生成された {{ic|systemd-cryptsetup@&#039;&#039;name&#039;&#039;.service}} を[[開始]]してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cryptsetup status &#039;&#039;name&#039;&#039;|2=&lt;br /&gt;
/dev/mapper/&#039;&#039;name&#039;&#039; is active.&lt;br /&gt;
  type:    ...&lt;br /&gt;
  cipher:  ...&lt;br /&gt;
  keysize: ... bits&lt;br /&gt;
  key location: ...&lt;br /&gt;
  device:  /dev/sdxN&lt;br /&gt;
  sector size:  ...&lt;br /&gt;
  offset:  ... sectors&lt;br /&gt;
  size:    ... sectors&lt;br /&gt;
  mode:    ...&lt;br /&gt;
  flags:   ... &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|systemd-cryptsetup@&#039;&#039;name&#039;&#039;.service}} に関する他の情報は、[[#必要に応じてマウントする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|GPT と特定のパーティションタイプ UUID を使用する場合、systemd で一部のマウントポイントに対しては crypttab と fstab を使わなくても済みます。詳細は、[[systemd#GPT パーティションの自動マウント]]。}}&lt;br /&gt;
&lt;br /&gt;
==== ブート時にマウントする ====&lt;br /&gt;
&lt;br /&gt;
暗号化されたドライブをブート時にマウントしたい場合、デバイスの UUID を {{ic|/etc/crypttab}} に記述してください。UUID (パーティション) を {{ic|lsblk -f}} コマンドで得て、それを {{ic|crypttab}} 内に以下の形式で追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab|2=&lt;br /&gt;
externaldrive         UUID=2f9a8428-ac69-478a-88a2-4aa458565431        none    timeout=180&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最初のパラメータは、暗号化されたドライブに使用するデバイスマッパーの名前です。自由に指定してください。{{ic|none}} オプションは、起動中にパーティションのロックを解除するためのパスフレーズを入力するプロンプトをトリガーします。{{ic|timeout}} オプションは、ブート時に復号パスワードを入力するタイムアウトを秒単位で定義します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|パスワードプロンプトに入力されたパスワードは、{{man|8|systemd-cryptsetup}} によってカーネルのキーリング内にキャッシュされます ([[#systemd-cryptsetup-generator を使う|sd-encrypt フックを使用する]]場合、initramfs の段階で入力されたパスワードも該当します)。{{ic|crypttab}} に記述されているデバイスが、以前入力したパスワードを使用する場合、3番目のパラメータは {{ic|none}} にすることができ、キャッシュされているパスワードが自動的に使用されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|crypttab}} における {{ic|timeout}} オプションは、暗号化されたデバイスの&#039;&#039;パスワードを入力する&#039;&#039;ことのできる時間だけを決定することを留意しておいてください。加えて [[systemd]] には、&#039;&#039;デバイスが利用可能になる&#039;&#039;までの許容時間を決定するデフォルトのタイムアウト (デフォルトでは 90 秒) が存在し、これはパスワードのタイマーとは独立しています。その結果、{{ic|crypttab}} において {{ic|timeout}} オプションが 90 秒より大きい値に設定された場合 (あるいは、時間無制限を意味するデフォルトの 0 に設定した場合) でも、&#039;&#039;systemd&#039;&#039; は依然として、デバイスがアンロックされるまで最大 90 秒までしか待ちません。&#039;&#039;systemd&#039;&#039; がデバイスが利用可能になるまで待機する時間を変更するために、{{ic|x-systemd.device-timeout}} ({{man|5|systemd.mount}} を参照) を [[fstab]] 内で対象のデバイスに対して設定することができます。このとき、ブート時にマウントされるデバイスそれぞれに対して、{{ic|crypttab}} における {{ic|timeout}} オプションの値は、{{ic|fstab}} における {{ic|x-systemd.device-timeout}} の値と同じにすることが望ましいでしょう。}}&lt;br /&gt;
&lt;br /&gt;
===== キーファイルでロックを解除する =====&lt;br /&gt;
&lt;br /&gt;
セカンダリファイルシステムの[[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]が、暗号化されたルートファイルシステム内に保存されている場合、キーファイルはシステムの電源が落ちている間は安全であり、[[#crypttab|crypttab]] を使ってブート中にキーファイルを自動的に読み込んでロックを解除することができます。例えば、[[UUID]] によって指定された crypt をアンロックするには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab|2=&lt;br /&gt;
home-crypt    UUID=&#039;&#039;UUID-identifier&#039;&#039;    /etc/cryptsetup-keys.d/home-crypt.key&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* キーファイルが指定されなかった場合、{{man|8|systemd-cryptsetup}} は自動的に {{ic|/etc/cryptsetup-keys.d/&#039;&#039;name&#039;&#039;.key}} と {{ic|/run/cryptsetup-keys.d/&#039;&#039;name&#039;&#039;.key}} から読み込もうと試みます。[https://github.com/systemd/systemd/pull/15637]&lt;br /&gt;
* {{ic|--plain}} モードのブロックデバイスを使用したい場合、そのデバイスのロック解除に必要な暗号化オプションは {{ic|/etc/crypttab}} 内に指定します。この場合、[[#crypttab|crypttab]] で説明した systemd の回避策を適用する必要があることに注意してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、({{ic|/etc/crypttab}} で定義した) デバイスマッパーの名前を使用して {{ic|/etc/fstab}} 内にエントリを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|&lt;br /&gt;
/dev/mapper/home-crypt        /home   ext4        defaults        0       2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/mapper/externaldrive}} はユニークなパーティションマッピングによるものなので、UUID を使って指定する必要はありません。いかなる場合でも、ファイルシステムに対応するマッパーは、そのファイルシステムが存在しているパーティションとは異なる UUID を持っています。&lt;br /&gt;
&lt;br /&gt;
===== スタックされたブロックデバイスをマウントする =====&lt;br /&gt;
&lt;br /&gt;
また、この systemd ジェネレータは、スタックされたブロックデバイスをブート時に自動的に処理します。&lt;br /&gt;
&lt;br /&gt;
例えば、[[RAID]] 環境を作成し、そこに cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ [[LVM]] 論理ボリュームを作成することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsblk -f|&lt;br /&gt;
─sdXX                  linux_raid_member    &lt;br /&gt;
│ └─md0                 crypto_LUKS   &lt;br /&gt;
│   └─cryptedbackup     LVM2_member &lt;br /&gt;
│     └─vgraid-lvraid   ext4              /mnt/backup&lt;br /&gt;
└─sdYY                  linux_raid_member    &lt;br /&gt;
  └─md0                 crypto_LUKS       &lt;br /&gt;
    └─cryptedbackup     LVM2_member &lt;br /&gt;
      └─vgraid-lvraid   ext4              /mnt/backup&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、ブート時にパスフレーズが要求し、自動的にマウントします。&lt;br /&gt;
&lt;br /&gt;
対応する正しい crypttab (例えば {{ic|crypto_LUKS}} デバイスの UUID) と fstab ({{ic|/dev/vgraid/lvraid}}) エントリを指定すれば、{{ic|/etc/crypttab}} の処理はルート以外のマウントにのみ適用されるので、mkinitcpio フック/設定を追加する必要がありません。例外として、{{ic|mdadm_udev}} フックが&#039;&#039;すでに&#039;&#039;使われている場合 (例:ルートデバイス用) です。この場合、正しい root raid が最初に選ばれるように {{ic|/etc/madadm.conf}} と initramfs を更新する必要があります。&lt;br /&gt;
&lt;br /&gt;
==== 必要に応じてマウントする ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを使用する代わりとして&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup open UUID=... externaldrive&lt;br /&gt;
&lt;br /&gt;
以下のように {{ic|/etc/crypttab}} 内にエントリが存在する場合は、{{ic|systemd-cryptsetup@externaldrive.service}} を[[開始]]することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab|output=&lt;br /&gt;
externaldrive UUID=... none noauto&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この方法では、正確な crypttab オプションを覚えておく必要はありません。必要であれば、パスフレーズのプロンプトが表示されます。&lt;br /&gt;
&lt;br /&gt;
対応するユニットファイルは {{man|8|systemd-cryptsetup-generator}} によって自動的に生成されます。生成されたユニットファイルは全て以下のコマンドで一覧表示できます:&lt;br /&gt;
&lt;br /&gt;
 $ systemctl list-unit-files | grep systemd-cryptsetup&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== システムがブート時に固まる/パスワードプロンプトが表示されない ===&lt;br /&gt;
&lt;br /&gt;
[[Plymouth]] を使用する場合、適切なモジュール ([[Plymouth#mkinitcpio]] を参照) を使用するか、Plymouth を無効化してください。正しく設定しないと Plymouth によってパスワードプロンプトが隠れてしまい、システムを起動できなくなります。&lt;br /&gt;
&lt;br /&gt;
=== キーボードやファイルシステム上のキーファイルをロック解除に利用できない ===&lt;br /&gt;
&lt;br /&gt;
キーボードや、initramfs の生成時に存在しないファイルシステム上のキーファイルを使って LUKS デバイスのロックを解除する場合、対応するモジュールを mkinitcpio の {{ic|MODULES}} 配列に追加する必要があるかもしれません。この作業は、キーボードが USB ハブ経由で接続されている場合にも必要かもしれません。この問題に関する詳細は [[mkinitcpio#MODULES]] を参照してください。追加するべきキーボードやファイルシステムのモジュール名を探し当てる方法については [[mkinitcpio/Initramfs の最小化#モジュールの選別]] を参照してください&lt;br /&gt;
&lt;br /&gt;
一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、{{ic|autodetect}} フックより前に {{ic|keyboard}} を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。[[mkinitcpio#通常のフック]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|dm-crypt/System configuration|2023-09-04|784929}}&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=37593</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=37593"/>
		<updated>2024-06-02T23:10:45Z</updated>

		<summary type="html">&lt;p&gt;N: /* Linux Containers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[fa:امنیت]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
[[zh-hans:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|ケイパビリティ}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{AUR|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{AUR|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[SHA パスワードハッシュ|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
パスワードは &#039;&#039;&#039;passwd&#039;&#039;&#039; コマンドで設定され、[[Wikipedia:Key stretching|キー ストレッチング]] と [[Wikipedia:Crypt (C)|crypt]] 関数を用いて、{{ic|/etc/shadow}} に保存されます。[[SHA パスワードハッシュ]]も参照してください。また、パスワードは [[Wikipedia:Salt (cryptography)|ソルティング]] されており、[[Wikipedia:Rainbow table|レインボー テーブル]] 攻撃から防御しています。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklib を用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; は[[Wikipedia:ja:辞書攻撃|辞書攻撃]]からの防御を提供し、システム全体で強制するパスワードポリシーの設定を補助します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
{{Note|&#039;&#039;root&#039;&#039; アカウントを利用することで望ましい/設定されたポリシーを迂回したユーザーのパスワードを設定することができます。これは一時的なパスワードを設定するときに便利です。}}&lt;br /&gt;
&lt;br /&gt;
例えば以下のようなポリシーを強制させたい場合:&lt;br /&gt;
* エラー時に2回パスワードプロンプト&lt;br /&gt;
* 最小で10文字の長さ (minlen オプション)&lt;br /&gt;
* 新しくパスワードを設定する場合、少なくとも6文字は古いパスワードと異なる (difok オプション)&lt;br /&gt;
* 少なくとも1文字数字を含む (dcredit オプション)&lt;br /&gt;
* 少なくとも1文字は大文字を含む (ucredit オプション)&lt;br /&gt;
* 少なくとも1文字は異なる文字を含む (ocredit オプション)&lt;br /&gt;
* 少なくとも1文字は小文字を含む (lcredit オプション)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}} ファイルを以下のように書き換えます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|password required pam_unix.so use_authtok}} でパスワードのプロンプトを表示するときに &#039;&#039;pam_unix&#039;&#039; モジュールではなく &#039;&#039;pam_cracklib&#039;&#039; によるプロンプトを使うようになります。&lt;br /&gt;
&lt;br /&gt;
詳細な情報については pam_cracklib(8) と pam_unix(8) の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
=== マイクロコード ===&lt;br /&gt;
&lt;br /&gt;
CPU のマイクロコードに対する重要なセキュリティ更新プログラムをインストールする方法については、[[マイクロコード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアの脆弱性 ===&lt;br /&gt;
&lt;br /&gt;
CPU の中には、ハードウェアの脆弱性を含んでいるものがあります。これらの脆弱性の一覧と、特定の使用シナリオに合わせてこれらの脆弱性を緩和するためにカーネルをカスタマイズするのに役立つ緩和策の選択ガイドについては、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/ kernel documentation on hardware vulnerabilities] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既知の脆弱性の影響を受けているかどうかを確認するには、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/devices/system/cpu/vulnerabilities/&lt;br /&gt;
&lt;br /&gt;
ほとんどの場合、カーネルとマイクロコードを更新することで、脆弱性を軽減することができます。&lt;br /&gt;
&lt;br /&gt;
==== 同時マルチスレッディング (ハイパースレッディング) ====&lt;br /&gt;
&lt;br /&gt;
[https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 同時マルチスレッディング]] (SMT) は、インテル CPU のハイパースレッディングとも呼ばれ、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html L1 Terminal Fault] および [https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html Microarchitectural Data Sampling] 脆弱性の原因となる可能性のあるハードウェア機能です。Linux カーネルとマイクロコードのアップデートには、既知の脆弱性に対する緩和策が含まれていますが、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html#virtualization-with-untrusted-guests 信頼できない仮想化ゲストが存在する場合、特定の CPU で SMT を無効にしたほうが良い場合があります。]&lt;br /&gt;
&lt;br /&gt;
SMT は、システムのファームウェアで無効にできることがよくあります。詳細については、マザーボードまたはシステムのドキュメントを参照してください。また、以下の [[カーネルパラメータ]] を追加することで、カーネルで SMT を無効にすることができます。&lt;br /&gt;
&lt;br /&gt;
 l1tf=full,force mds=full,nosmt mitigations=auto,nosmt nosmt=force&lt;br /&gt;
&lt;br /&gt;
== メモリ ==&lt;br /&gt;
&lt;br /&gt;
===ハード化された malloc ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/GrapheneOS/hardened_malloc hardened_malloc] ({{AUR|hardened_malloc}}, {{AUR|hardened-malloc-git}}) は [https://ja.wikipedia.org/wiki/GNU_C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA glibc] の malloc() をハード化した代替品です。元々は Android の [[Wikipedia:Bionic (software)|Bionic]] と [https://ja.wikipedia.org/wiki/Musl musl] に組み込むために開発されましたが、 x86_64 アーキテクチャの標準 Linux ディストリビューションのサポートにも組み込みました。&lt;br /&gt;
&lt;br /&gt;
hardened_malloc はまだ glibc に統合されていませんが（支援とプルリクエストは歓迎します）、LD_PRELOAD と一緒に簡単に使用することができます。これまでのテストでは、 {{ic|/etc/ld.so.preload}} でグローバルに有効にすると、 一握りのアプリケーションにしか問題を起こしません。例えば、{{ic|getrandom}} が標準のホワイトリストにないため、{{ic|seccomp}} 環境フラグが無効でないと {{ic|man}} は正常に動作しませんが、これはシステムコールを追加して再構築すれば簡単に修正可能です。hardened_malloc は性能上のコストがあるので、どの実装を使うかは攻撃対象領域と性能上の必要性に基づいてケースバイケースで決めるとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
スタンドアロンで試すには、hardened-malloc-preload ラッパー スクリプトを使用するか、適切なプリロード値でアプリケーションを手動で開始します。&lt;br /&gt;
&lt;br /&gt;
 LD_PRELOAD=&amp;quot;/usr/lib/libhardened_malloc.so&amp;quot; /usr/bin/firefox&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] の正しい使い方は、その wiki ページにあります。また、hardened_malloc の設定可能なビルドオプションは、githubレポで見つけることができます。&lt;br /&gt;
&lt;br /&gt;
== ストレージ ==&lt;br /&gt;
&lt;br /&gt;
===ディスク暗号化===&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
====マウントオプション====&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1] [2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes (wine や steam を使用しない場合 &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||no (パッケージをコンパイルできなくなる可能性があります)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; {{ic|noexec}} がパーティションに設定されている場合、Qt 5.8 以上では QML を使用するアプリケーションがクラッシュしたり機能しなくなることがあります。解決方法は [[Qt#Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない]]を参照。&lt;br /&gt;
&lt;br /&gt;
===ファイルシステムのパーミッション===&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、[[パーミッション]]を変更することで {{ic|http}} や {{ic|nobody}} ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SUID ファイルと SGID ファイル ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Setuid|Setuid]] ビットや Setgid ビットが設定されたファイルには注意しましょう。このようなファイルの例としては、以下があります。これらは {{ic|/usr/bin}} 内にあり、SUID ビットが設定されていて、root によって所有されています:&lt;br /&gt;
&lt;br /&gt;
* gpasswd&lt;br /&gt;
* pkexec&lt;br /&gt;
* [[sudo]]&lt;br /&gt;
* [[su]]&lt;br /&gt;
* [[passwd]]&lt;br /&gt;
* [[firejail]]&lt;br /&gt;
&lt;br /&gt;
このような実行ファイルの主なリスクとして、特権昇格の脆弱性があります。例えば [[Wikipedia:Setuid#Security impact]] を参照してください。[https://www.cvedetails.com/vulnerability-list/vendor_id-16224/product_id-36412/Calibre-ebook-Calibre.html][https://www.cvedetails.com/product/32625/Sudo-Project-Sudo.html?vendor_id=15714][https://www.cvedetails.com/vulnerability-list/vendor_id-16191/Firejail-Project.html]&lt;br /&gt;
&lt;br /&gt;
SUID ビットが設定されているが root によって所有されていないファイル、または SGID ビットが設定されているファイルは、&#039;&#039;典型的には&#039;&#039;潜在的なリスクがより小さいですが、理論上、そのようなファイルに脆弱性が存在している場合は、依然として損害を与える可能性があります。通常、代わりに[[ケイパビリティ]]を割り当てることによって、Setuid や Setgid の使用を回避することが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|SUID/SGID 実行ファイルを含むパッケージを最新に保って、脆弱性からシステムを守ることが肝心です。}}&lt;br /&gt;
&lt;br /&gt;
SUID ビットか SGID ビットを持つファイルを {{ic|/usr/bin}} から探すには:&lt;br /&gt;
&lt;br /&gt;
 $ find /usr/bin -perm &amp;quot;/u=s,g=s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== ユーザー設定 ==&lt;br /&gt;
&lt;br /&gt;
=== root アカウントを日常的に使用しない ===&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、root ユーザーを日常的に使用しないようにしてください。システムを使用する各人に非特権ユーザーアカウントを作成するか。一時的な特権アクセスには、必要に応じて [[sudo]] を使用する。&lt;br /&gt;
&lt;br /&gt;
=== ログイン失敗後の遅延時間の設定 ===&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|/etc/pam.d/system-login}} に追加し、ログインに失敗した際に最低4秒の遅延を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|2=&lt;br /&gt;
auth optional pam_faildelay.so delay=4000000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|4000000}} は遅延させる時間をマイクロ秒単位で指定します。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pambase}} 20200721.1-2 の時点では 、デフォルトで {{ic|pam_faillock.so}} が有効になっており、15分間に3回ログインに失敗すると10分間ユーザをロックアウトします ({{Bug|67644}} を参照してください) このロックアウトはパスワード認証 (例:ログインと &#039;&#039;sudo&#039;&#039;) にのみ適用され、SSH 経由の公開鍵認証はそのまま利用可能です。 完全なサービス拒否を防ぐために、このロックアウトは root では無効になっています。&lt;br /&gt;
&lt;br /&gt;
ユーザーをロック解除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 $ faillock --reset --user &#039;&#039;username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ロック機構は {{ic|/run/faillock/}} にあるユーザーごとのファイルです。ディレクトリの所有者は root ですが、ファイルの所有者はユーザーなので、 {{ic|faillock}} コマンドはファイルを空にするだけで、root は必要ありません。&lt;br /&gt;
&lt;br /&gt;
モジュール {{ic|pam_faillock.so}} は、ファイル {{ic|1=/etc/security/faillock.conf}} で設定することが可能です。ロックアウトのパラメータです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|unlock_time}} - ロックアウト時間 (秒単位、デフォルトは10分)&lt;br /&gt;
* {{ic|fail_interval}} - ロックアウトに失敗するとロックアウトされる時間 (秒単位、デフォルトは15分)&lt;br /&gt;
* {{ic|deny}} - ロックアウトするまでに何回ログインに失敗するか (デフォルトは 3)&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=deny = 0}} はロックアウトを無効化します}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、すべてのユーザーロックは再起動後に失われます。攻撃者がマシンをリブートできるのであれば、ロックは持続させた方が安全です。ロックを持続させるには、{{ic|1=/etc/security/faillock.conf}} の {{ic|dir}} パラメータを {{ic|/var/lib/faillock}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるために再起動する必要はありません。root アカウントのロックアウトを有効にする、集中ログイン (LDAP など) を無効にするなど、さらなる設定オプションについては {{man|5|faillock.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。{{ic|prlimit}} コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
=== Wayland を使用する ===&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] よりも [[Wayland]] を使用することをお勧めします。Xorg の設計は現代のセキュリティ慣行より古く、多くの人が [https://security.stackexchange.com/questions/4641/why-are-people-saying-that-the-x-window-system-is-not-secure/4646#4646 は安全でないと考えています] 例えば、Xorg のアプリケーションは非アクティブな状態でもキーストロークを記録することがあります。&lt;br /&gt;
&lt;br /&gt;
もし Xorg を実行しなければならないなら、[[Xorg#Rootless_Xorg|root での実行を避ける]]ことが推奨されます。Wayland 内では、XWayland 互換レイヤーは自動的に root レス Xorg を使用します。&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== su の代わりに sudo を使う ===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sudo を使ってファイルを編集する ====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
=== root ログインの制限 ===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。[[sudo]] を使える状態のまま root を無効化したい場合、{{ic|passwd -l root}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== 特定のユーザーだけに許可を与える ====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ssh ログインを拒否する ====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==== access.conf で許容されるログインの組み合わせを指定する ====&lt;br /&gt;
&lt;br /&gt;
誰かが [[PAM]] でログインしようとすると、 {{ic|/etc/security/access.conf}} がそのログインプロパティに一致する最初の組み合わせをチェックします。そして、その組み合わせのルールに基づいて、試行が失敗するか成功するかが決まります。&lt;br /&gt;
&lt;br /&gt;
 +:root:LOCAL&lt;br /&gt;
 -:root:ALL&lt;br /&gt;
&lt;br /&gt;
特定のグループやユーザーに対してルールを設定することができます。この例では、ユーザー archie は、wheel および adm グループに属するすべてのユーザーと同様に、ローカルでのログインを許可されています。それ以外のログインは拒否されます。&lt;br /&gt;
&lt;br /&gt;
 +:archie:LOCAL&lt;br /&gt;
 +:(wheel):LOCAL&lt;br /&gt;
 +:(adm):LOCAL&lt;br /&gt;
 -:ALL:ALL&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|5|access.conf}} で確認してください。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
== カーネルの堅牢化 ==&lt;br /&gt;
&lt;br /&gt;
=== カーネルの自己防衛機能/脆弱性攻撃対策 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、[https://github.com/anthraxx/linux-hardened 基本的なカーネル堅牢化パッチセット]と、{{pkg|linux}} パッケージよりもセキュリティに重点を置いたコンパイル時設定オプションを使用します。カスタムビルドでは、セキュリティ寄りのデフォルトとは異なる、セキュリティと性能の妥協点を選択することができます。&lt;br /&gt;
&lt;br /&gt;
しかし、このカーネルを使うといくつかのパッケージが動かなくなることに注意する必要があります。例えば&lt;br /&gt;
&lt;br /&gt;
* {{AUR|skypeforlinux-preview-bin}}&lt;br /&gt;
* {{AUR|skypeforlinux-stable-bin}}&lt;br /&gt;
* {{pkg|throttled}}&lt;br /&gt;
&lt;br /&gt;
[[NVIDIA]] などのアウトオブツリードライバを使用している場合、その [[DKMS]] パッケージに切り替える必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
==== ユーザー空間 ASLR の比較 ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、アドレス空間配置ランダム化の改善された実装をユーザ空間のプロセスに対して提供します。{{pkg|paxtest}} コマンドを使うことで、提供されるエントロピーの推定値を得ることができます:&lt;br /&gt;
&lt;br /&gt;
===== 64 ビットプロセス =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened 5.4.21.a-1-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 32 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 40 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 40 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 32 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 32 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 32 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 32 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 34 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 34 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 32 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 32 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux 5.5.5-arch1-1|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 20 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 29 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 29 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-lts 4.19.101-1-lts|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 28 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 28 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 32 ビットプロセス (x86_64 カーネル上) =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 16 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 22 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 27 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 18 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 16 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 16 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 18 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 16 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 18 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 18 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux|&lt;br /&gt;
Anonymous mapping randomization test     : 8 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 13 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 13 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 8 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 8 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 8 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 8 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 13 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: No randomization&lt;br /&gt;
Randomization under memory exhaustion @0 : No randomization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== proc ファイルシステム内のカーネルポインタへのアクセスを制限する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を 1 に設定すると、{{ic|CAP_SYSLOG}} を持たない通常ユーザから {{ic|/proc/kallsyms}} 内のカーネルシンボルのアドレスが秘匿され、カーネルのエクスプロイトで動的にアドレス/シンボルを解決することが困難になります。これは、事前にコンパイルされた Arch Linux カーネルではあまり意味がありません。周到な攻撃者はカーネルパッケージをダウンロードして、そこから手動でシンボルを取得することができるからです。しかしながら、自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし、一部の {{Pkg|perf}} コマンドの機能が、root 以外のユーザによって使用されば場合に破壊されます (しかし、いずれにせよ多くの {{Pkg|perf}} コマンドは root アクセスを必要とします)。詳細は {{Bug|34323}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を 2 に設定すると、{{ic|/proc/kallsyms}} 内のカーネルシンボルのアドレスが権限に依らず隠されます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kptr-restrict.conf|2=&lt;br /&gt;
kernel.kptr_restrict = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} はデフォルトで {{ic|0}} ではなく {{ic|1=kptr_restrict=2}} を設定します。}}&lt;br /&gt;
&lt;br /&gt;
=== BPF の堅牢化 ===&lt;br /&gt;
&lt;br /&gt;
BPF は、実行時にカーネル内のバイトコードを動的にロードして実行するために使用されるシステムです。ネットワーク (XDP, tc など)、トレース (kprobes, uprobes, tracepoints など)、セキュリティ (seccomp など) など、多くの Linux カーネルサブシステムで使用されています。また、高度なネットワークセキュリティ、パフォーマンスプロファイリング、ダイナミックトレースにも有効です。&lt;br /&gt;
&lt;br /&gt;
BPF はもともと [[Wikipedia:ja:Berkeley Packet Filter|Berkeley Packet Filter]] の頭文字をとったもので、オリジナルの古典的な BPF は BSD 用のパケットキャプチャツールに使われていたためです。これは最終的に拡張 BPF (eBPF) に発展し、その後まもなくただの BPF (頭字語ではありません) に改名されました。BPFはパケットフィルタリングツールの実装に使われることがありますが、 iptables や netfilter のようなパケットフィルタリングツールと混同しないでください。&lt;br /&gt;
&lt;br /&gt;
BPF のコードは解釈されるか、[[Wikipedia:ja:実行時コンパイラ|Just-In-Time (JIT) コンパイラ]]を使ってコンパイルされるかのどちらかです。Arch のカーネルは {{ic|CONFIG_BPF_JIT_ALWAYS_ON}} でビルドされており、BPF インタープリタを無効にして全ての BPF を JIT コンパイラでコンパイルするよう強制しています。これにより、攻撃者が BPF を使って SPECTRE 型の脆弱性を悪用した特権昇格攻撃をすることが難しくなります。詳しくは、[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=290af86629b25ffd1ed6232c4e9107da031705cb CONFIG_BPF_JIT_ALWAYS_ON を導入したカーネルパッチ]を参照してください。&lt;br /&gt;
&lt;br /&gt;
カーネルは JIT コンパイルされた BPF に対して、パフォーマンスと多くの BPF プログラムをトレース・デバッグする能力を犠牲にして、ある種の JIT スプレー攻撃を軽減するための堅牢化機能を備えています。この機能は、{{ic|net.core.bpf_jit_harden}} を {{ic|1}} (非特権コードの堅牢化を有効化する) か {{ic|2}} (全てのコードの堅牢化を有効化する) に設定することで有効化できます。&lt;br /&gt;
&lt;br /&gt;
詳しくは、[https://docs.kernel.org/admin-guide/sysctl/net.html カーネルドキュメント] の {{ic|net.core.bpf_*}} 設定を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{Pkg|linux-hardened}} では、デフォルトで {{ic|1=net.core.bpf_jit_harden=2}} が設定されており、{{ic|0}} ではありません。&lt;br /&gt;
* デフォルトでは、BPF プログラムは非特権ユーザでも実行可能です。この挙動を変更するには {{ic|1=kernel.unprivileged_bpf_disabled=1}} を設定してください [https://access.redhat.com/security/cve/cve-2021-33624]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ptrace スコープ ===&lt;br /&gt;
&lt;br /&gt;
{{man|2|ptrace}} システムコールは、あるプロセス (&amp;quot;tracer&amp;quot;) が他のプロセス (&amp;quot;tracee&amp;quot;) の実行を監視、制御し、tracee のメモリとレジスタを検査、変更するための手段を提供します。通常、{{ic|ptrace}} は &#039;&#039;gdb&#039;&#039; や &#039;&#039;strace&#039;&#039;、&#039;&#039;perf&#039;&#039;、&#039;&#039;reptyr&#039;&#039; などのデバッグツールによって使用されます。しかし、他のプロセスからデータを読んだり、他のプロセスの制御を奪ったりする手段を悪意のあるプロセスにも提供してしまいます。&lt;br /&gt;
&lt;br /&gt;
Arch では、{{ic|kernel.yama.ptrace_scope}} [[カーネルパラメータ]]を提供する [https://docs.kernel.org/admin-guide/LSM/Yama.html Yama LSM] がデフォルトで有効化されています。このパラメータはデフォルトで {{ic|1}} (制限) に設定されており、{{ic|CAP_SYS_PTRACE}} [[ケイパビリティ]]も特権も持たない tracer が制限されたスコープ外で {{ic|ptrace}} コールを実行できないようにしています。これは、古典的なパーミッションと比べてセキュリティ上大きな改善です。このモジュールが無いと、同じユーザとして実行されているプロセスを隔てるものがなくなってしまいます ({{man|7|pid_namespaces}} などの他のセキュリティレイヤーがない場合)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトでは、[[sudo]] を使うなどして、{{ic|ptrace}} を必要とするツールを特権プロセスとして実行することができます。}}&lt;br /&gt;
&lt;br /&gt;
デバッグツールを使う必要がない場合は、システムを堅牢化するために {{ic|kernel.yama.ptrace_scope}} を {{ic|2}} (管理者限定) や {{ic|3}} ({{ic|ptrace}} を禁止) に設定することを検討してください。&lt;br /&gt;
&lt;br /&gt;
=== hidepid ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* これは、サンドボックスと [[Xorg]] 内で実行するアプリケーションなど、特定のアプリケーションで問題を発生させる場合があります (回避策を見てください)。&lt;br /&gt;
* {{Pkg|systemd}} &amp;gt; 237.64-1 を使用している場合、これは [[D-Bus]]、[[Polkit]]、[[PulseAudio]]、そして [[bluetooth]] で問題を発生させます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
カーネルには、{{ic|proc}} ファイルシステムを {{ic|1=hidepid=}} オプションと {{ic|1=gid=}} オプションを使ってマウントすることで、他のユーザのプロセス (通常、{{ic|/proc}} でアクセス可能) を非特権ユーザから秘匿する機能があります。これらのマウントオプションは https://docs.kernel.org/filesystems/proc.html でドキュメント化されています。&lt;br /&gt;
&lt;br /&gt;
これにより、侵入者が動作中のプロセスの情報 (特権で動作しているデーモンがあるか、他のユーザが機密情報を扱うプログラムを実行しているか、他のユーザがプログラムを実行しているか) を得る作業を複雑化し、ユーザが特定のプログラムを実行しているかどうかを知るのを不可能にし (ただし、そのプログラムがそれ自体の挙動で存在を他者に知られることがないとする)、さらに、貧弱に書かれたプログラムが機密情報をプログラム引数を介して渡したとしてもローカルの盗聴者から守られます。&lt;br /&gt;
&lt;br /&gt;
{{ic|proc}} [[ユーザーとグループ#システムグループ#グループ]] ({{Pkg|filesystem}} パッケージによって提供されています) は、他のユーザのプロセス情報を得ることのできるユーザのホワイトリストとして機能します。ユーザやサービスが自身以外の {{ic|/proc/&amp;lt;pid&amp;gt;}} ディレクトリにアクセスする必要がある場合、そのユーザまたはサービスを[[ユーザーとグループ#グループ管理|proc グループに追加してください]]。&lt;br /&gt;
&lt;br /&gt;
例えば、プロセスの情報を {{ic|proc}} グループに属さない他のユーザから隠すには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
proc	/proc	proc	nosuid,nodev,noexec,hidepid=2,gid=proc	0	0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ユーザのセッションを正しく動作させるために、&#039;&#039;systemd-logind&#039;&#039; を例外として追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/systemd-logind.service.d/hidepid.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
SupplementaryGroups=proc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールのロードを制限する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch カーネルは {{ic|CONFIG_MODULE_SIG_ALL}} が有効で、{{Pkg|linux}} パッケージの一部としてビルドされた全てのカーネルモジュールに署名します。これにより、カーネルは有効なキーで署名されたモジュールだけをロードするように制限できます。実際、これはローカルでコンパイルされた、もしくは {{Pkg|virtualbox-host-modules-arch}} などのパッケージによって提供された、ツリー外のモジュールは全てロードできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
カーネルモジュールの読み込みは {{ic|1=module.sig_enforce=1}} [[カーネルパラメータ]]を設定することで制限することができます。詳細は[https://docs.kernel.org/admin-guide/module-signing.html カーネルドキュメント]で見られます。&lt;br /&gt;
&lt;br /&gt;
=== kexec を無効にする ===&lt;br /&gt;
&lt;br /&gt;
Kexec は、現在実行中のカーネルを置き換えることを可能にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kexec-restrict.conf|2=&lt;br /&gt;
kernel.kexec_load_disabled = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|kexec は {{pkg|linux-hardened}} でデフォルトで無効になっています。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルロックダウンモード ===&lt;br /&gt;
&lt;br /&gt;
Linux 5.4 から、オプションの[https://mjg59.dreamwidth.org/55105.html ロックダウン機能]がカーネルに[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d 追加されました]。これは、UID 0 (root) とカーネルの間の境界を強化することを目的としています。この機能を有効にすると、ハードウェアやカーネルへの低レベルなアクセスに依存している一部のアプリケーションは動作しなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
ロックダウンを使用するには、LSM が初期化され、ロックダウンモードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
[[カーネル#公式サポートカーネル|公式にサポートされているカーネル]]は全て LSM を初期化しますが、ロックダウンモードを強制しません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|有効化されている LSM は {{ic|cat /sys/kernel/security/lsm}} を実行することで確認することができます。}}&lt;br /&gt;
&lt;br /&gt;
ロックダウンには2つの動作モードがあります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|integrity}}: ユーザーランドが実行中のカーネルを変更できるカーネル機能 (kexec、bpf) は無効化されます。&lt;br /&gt;
* {{ic|confidentiality}}: ユーザーランドがカーネルから機密情報を抽出するためのカーネルの機能も無効化されます。&lt;br /&gt;
&lt;br /&gt;
特定の脅威モデルで指示がない限り、{{ic|integrity}} を使用することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
実行時にカーネルのロックダウンを有効にするには、以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;mode&#039;&#039; &amp;gt; /sys/kernel/security/lockdown&lt;br /&gt;
&lt;br /&gt;
起動時にカーネルのロックダウンを有効にするには、{{ic|1=lockdown=&#039;&#039;mode&#039;&#039;}} [[カーネルパラメータ]]を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルロックダウンを実行時に無効化することはできません。&lt;br /&gt;
* カーネルロックダウンは、[[ハイバネート]]を無効化します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{man|7|kernel_lockdown}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Linux Kernel Runtime Guard (LKRG) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.openwall.com/lkrg/ LKRG] ({{AUR|lkrg-dkms}}) は、カーネルの整合性チェックとエクスプロイト行為の検出を行うカーネルモジュールです。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|標準の Arch カーネルではユーザー名前空間の {{ic|CONFIG_USER_NS}} が設定されていないため、特定のサンドボックス機能がアプリケーションから使えない場合があります。{{pkg|linux-hardened}} パッケージでは有効になっていますが、非特権での使用はデフォルトで無効になっています。{{ic|kernel.unprivileged_userns_clone}} の [[sysctl]] を {{ic|1}} に設定することで使用できるようになりますが、ローカルの権限昇格を引き起こす可能性が高くなるので注意してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Pkg|linux}} (5.1.8 およびそれ以降)、{{Pkg|linux-lts}} (4.19.55-2 およびそれ以降)、{{Pkg|linux-zen}} (5.1.14.zen1-2 およびそれ以降) においては、{{ic|kernel.unprivileged_userns_clone}} [[sysctl]] が {{ic|0}} に設定されていない限り、非特権ユーザの名前空間の利用 ({{ic|CONFIG_USER_NS_UNPRIVILEGED}}) がデフォルトで有効化されています。これはローカルの特権昇格の攻撃対象領域を大幅に増加させるので、これを手動で無効化するか {{Pkg|linux-hardened}} カーネルを使用することが推奨されます。詳細は {{Bug|36969}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== bubblewrap ===&lt;br /&gt;
&lt;br /&gt;
[[bubblewrap]] は [[Flatpak]] から開発された setuid サンドボックスアプリケーションです。Firejail よりもリソースの消費力が少なく抑えられています。ファイルパスのホワイトリストなどの機能を欠いていますが、バインドマウントやユーザー/IPC/PID/ネットワーク/cgroup 名前空間の作成ができ、簡単なサンドボックスから [https://github.com/projectatomic/bubblewrap/blob/master/demos/bubblewrap-shell.sh 複雑なサンドボックス] まで自在に使うことが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualboxのような完全仮想化を除く) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
2段階認証によって認証を強化することができます。[[Google Authenticator]] はワンタイムパスコード (OTP) を使用する2段階認証方式を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシはアプリケーションとネットワークの間に挟まる追加レイヤーとして使われ、信頼できないソースからのデータをサニタイズします。少ない権限でプロキシを動作させることで、エンドユーザー権限で複雑なアプリケーションを実行するよりも攻撃対象を小さくすることができます。&lt;br /&gt;
&lt;br /&gt;
例えば {{Pkg|glibc}} の中に実装されている DNS リゾルバを考えてみてください。(root で実行することもある) アプリケーションにリンクされている DNS リゾルバにバグが存在した場合、リモートコード実行につながる危険があります。[[dnsmasq]] などの DNS キャッシュサーバーをインストールしてプロキシとして使うことで問題を防ぐことが可能です [https://googleonlinesecurity.blogspot.it/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html]。&lt;br /&gt;
&lt;br /&gt;
=== SSL 証明書の管理 ===&lt;br /&gt;
&lt;br /&gt;
サーバーサイドの SSL 証明書の管理については [[OpenSSL]] や [[Network Security Services]] (NSS) を参照してください。また、関連する [[Let’s Encrypt]] プロジェクトも見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのインターネット SSL 証明書のトラストチェーンは {{Pkg|ca-certificates}} パッケージによって提供されています。Arch はデフォルトで信頼しても問題ないとされる証明書を提供しているソース (例: {{AUR|ca-certificates-cacert}}, {{Pkg|ca-certificates-mozilla}}) に依存しています。&lt;br /&gt;
&lt;br /&gt;
デフォルトの証明書を変えたいと思うことがあるかもしれません。例えば、[http://www.theregister.co.uk/2016/05/27/blue_coat_ca_certs/ ニュース] を読んで証明書を信頼しないようにしたい場合 (ソースのプロバイダーによって無効になるのを待てない場合)、Arch のインフラを使うことで簡単に設定できます:&lt;br /&gt;
# {{ic|.crt}} 形式の証明書を入手してください (例: [https://crt.sh/?id=19538258 view], [https://crt.sh/?d=19538258 download]; 既存のルート認証局の場合、システム内にあるはずです)。&lt;br /&gt;
# {{ic|/etc/ca-certificates/trust-source/blacklist/}} にコピーしてください。&lt;br /&gt;
# root で &#039;&#039;update-ca-trust&#039;&#039; を実行してください。&lt;br /&gt;
&lt;br /&gt;
お好きなブラウザを開いて&#039;&#039;&#039;信頼できない&#039;&#039;&#039;サイトとして表示されれば、ブラックリストが上手く機能しています。&lt;br /&gt;
&lt;br /&gt;
== 物理セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバブルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
=== ブートローダー ===&lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダー]] を保護することは非常に重要です。保護されていないブートローダは、例えば {{ic|1=init=/bin/sh}} を設定することでログインの制限を回避することができます。[[カーネルパラメータ]] でシェルに直接ブートするようにします。&lt;br /&gt;
&lt;br /&gt;
==== Syslinux ====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== GRUB ====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] はブートローダのパスワードもサポートしています。詳しくは [[GRUB/ヒントとテクニック#GRUB メニューのパスワード保護|GRUB メニューのパスワード保護]] を参照してください。[[GRUB/ヒントとテクニック# GRUB メニューのパスワード保護|暗号化 /boot]] もサポートしていますが、これはブートローダコードの一部だけを暗号化しないままにしています。GRUB の設定、[[カーネル]]、[[initramfs]] は暗号化されています。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] は [[UEFI]] の機能で、コンピュータが起動するファイルの認証を可能にするものです。これは、起動パーティション内のファイルを置き換えるような、いくつかの [https://ja.wikipedia.org/wiki/%E6%82%AA%E6%84%8F%E3%81%82%E3%82%8B%E3%83%A1%E3%82%A4%E3%83%89%E6%94%BB%E6%92%83 悪意あるメイド攻撃] を防止するのに役立つ。通常、コンピュータにはベンダー (OEM) によって登録されたキーが付属しています。しかし、これを取り外して、コンピュータを「セットアップモード」にし、ユーザーが自分のキーを登録・管理できるようにすることができます。&lt;br /&gt;
&lt;br /&gt;
セキュアブートのページでは、[https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Implementing_Secure_Boot using your own keys] によってセキュアブートを設定する方法を案内しています。&lt;br /&gt;
&lt;br /&gt;
=== トラステッドプラットフォームモジュール（TPM） ===&lt;br /&gt;
&lt;br /&gt;
[[Trusted Platform Module|TPM]] は、暗号鍵が埋め込まれたハードウェア・マイクロプロセッサです。これは、最近のほとんどのコンピュータの基本的な信頼性の根源を形成し、ブートチェーンのエンドツーエンドの検証を可能にします。内部スマートカードとして使用したり、コンピュータ上で動作するファームウェアを証明したり、改ざん防止とブルートフォース耐性のあるストアにユーザーがシークレットに挿入することができます。&lt;br /&gt;
&lt;br /&gt;
=== リムーバブル フラッシュ ドライブ上のブートパーティション ===&lt;br /&gt;
&lt;br /&gt;
ブートパーティションをフラッシュドライブに置き、それがないとシステムが起動しないようにする、というのはよくあるアイデアです。このアイデアの支持者はしばしば [[セキュリティ#ディスク暗号化|ディスク暗号化]] を併用し、ブートパーティションに置かれた [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USBdetached encryption headers] を使っている人もいます。&lt;br /&gt;
&lt;br /&gt;
この方法は [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB encrypting /boot] と統合することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
=== 不正なUSBデバイスから保護する ===&lt;br /&gt;
&lt;br /&gt;
[[Usbguard]] は、デバイスの属性に基づく基本的なホワイトリストおよびブラックリスト機能を実装することで、不正な USB デバイス (別名 [https://ja.wikipedia.org/wiki/BadUSB BadUSB], [https://github.com/samyk/poisontap PoisonTap] または [https://lanturtle.com/ LanTurtle]) からコンピューターを保護できるソフトウェアフレームワークです。&lt;br /&gt;
&lt;br /&gt;
=== 揮発性データの収集 ===&lt;br /&gt;
&lt;br /&gt;
電源が入っているコンピュータは、[https://fedvte.usalearning.gov/courses/CSI/course/videos/pdf/CSI_D01_S05_T01_STEP.pdf volatile data collection] に対して脆弱である可能性があります。コンピュータの電源を入れる必要がない時や、コンピュータの物理的な安全性が一時的に損なわれる場合（例:セキュリティチェックポイントを通過する時）には、コンピュータの電源を完全に切ることがベストプラクティスです。&lt;br /&gt;
&lt;br /&gt;
== パッケージ ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージの認証 ===&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== アップグレード ===&lt;br /&gt;
&lt;br /&gt;
定期的に [[システムメンテナンス#システムのアップグレード|システムのアップグレード]] を行うことが重要です。&lt;br /&gt;
&lt;br /&gt;
=== 脆弱性アラートの確認 ===&lt;br /&gt;
&lt;br /&gt;
National Vulnerability Database が提供する Common Vulnerabilities and Exposure (CVE) Security Alert の更新を購読し、[https://nvd.nist.gov/download.cfm NVD Download webpage] で見つけてください。[https://security.archlinux.org/ Arch Linux Security Tracker] は Arch Linux Security Advisory (ASA), Arch Linux Vulnerability Group (AVG), CVE データセットを表形式でまとめた、特に有用なリソースです。ツール {{Pkg|arch-audit}} は実行中のシステムに影響を与える脆弱性をチェックするために使われます。グラフィカルなシステムトレイである {{Pkg|arch-audit-gtk}} も使うことができます。[https://wiki.archlinux.org/title/Arch_Security_Team Arch Security Team]も参照してください。&lt;br /&gt;
&lt;br /&gt;
特にメインレポジトリや AUR 以外の手段でソフトウェアをインストールしている場合は、あなたが使っているソフトウェアのリリース通知を購読することも検討すべきです。いくつかのソフトウェアには、セキュリティに関する通知を受け取るために購読できるメーリングリストがあります。ソースコードホスティングサイトはしばしば新しいリリースの RSS フィードを提供しています。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの再ビルド ===&lt;br /&gt;
&lt;br /&gt;
攻撃対象領域を減らす手段として、パッケージをリビルドし、不要な関数や機能を削除することができます。例えば、{{Pkg|bzip2}} は [https://security.archlinux.org/CVE-2016-3189 CVE-2016-3189] を回避するために {{ic|bzip2recover}} を使わずにリビルドすることが可能です。カスタムハードニングフラグは、手動またはラッパーを介して適用することもできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! フラグ !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| -D_FORTIFY_SOURCE=2 || ランタイムバッファオーバーフローの検出 &lt;br /&gt;
|-&lt;br /&gt;
| -D_GLIBCXX_ASSERTIONS || C++ の文字列とコンテナのランタイム境界チェック &lt;br /&gt;
|-&lt;br /&gt;
| -fasynchronous-unwind-tables || バックトレースの信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fexceptions || テーブルベースのスレッドキャンセルを有効にする &lt;br /&gt;
|-&lt;br /&gt;
| -fpie -Wl,-pie || 実行可能ファイルに対する完全な ASLR &lt;br /&gt;
|-&lt;br /&gt;
| -fpic -shared || 共有ライブラリのテキスト再配置を行わない &lt;br /&gt;
|-&lt;br /&gt;
| -fplugin=annobin || ハードニング品質管理用データの作成 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-clash-protection || スタックオーバーフロー検出の信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector or -fstack-protector-all || スタックスマッシュプロテクター &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector-strong || 同様に &lt;br /&gt;
|-&lt;br /&gt;
| -g || デバッグ情報を生成する &lt;br /&gt;
|-&lt;br /&gt;
| -grecord-gcc-switches || デバッグ情報にコンパイラのフラグを格納する &lt;br /&gt;
|-&lt;br /&gt;
| -mcet -fcf-protection || 制御フローの完全性保護 &lt;br /&gt;
|-&lt;br /&gt;
| -O2 || 推奨される最適化 &lt;br /&gt;
|-&lt;br /&gt;
| -pipe || 一時ファイルを回避し、ビルドを高速化します。 &lt;br /&gt;
|-&lt;br /&gt;
| -Wall || 推奨されるコンパイラの警告 &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=format-security || 安全でない可能性のあるフォーマット文字列の引数を拒否する &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=implicit-function-declaration || 関数プロトタイプの欠落を却下する &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,defs || アンダーリンクの検出と拒否 &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,now || 遅延バインディングを無効にする &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,relro || 移設後の読み出し専用セグメント &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/ Flags and info ソース]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://security.archlinux.org/ Arch Linux セキュリティトラッカー]&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [https://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the Linux desktop]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the Linux server]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation: Linux ワークステーションのセキュリティチェックリスト]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io Privacy Resources]&lt;br /&gt;
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html Red Hat Enterprise Linux 7 セキュリティガイド]&lt;br /&gt;
* [https://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Debian 安全化マニュアル (PDF)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://www.auscert.org.au/resources/publications/guidelines/unix-linux/unix-and-linux-security-checklist-v3.0 UNIX and Linux Security Checklist v3.0]&lt;/div&gt;</summary>
		<author><name>N</name></author>
	</entry>
</feed>