<?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=Tgw314</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=Tgw314"/>
	<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/Tgw314"/>
	<updated>2026-04-14T08:28:46Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Redshift&amp;diff=31313</id>
		<title>Redshift</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Redshift&amp;diff=31313"/>
		<updated>2023-04-22T05:29:07Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:X サーバー]]&lt;br /&gt;
[[Category:視覚効果]]&lt;br /&gt;
[[en:Redshift]]&lt;br /&gt;
[http://jonls.dk/redshift/ Redshift のプロジェクトウェブページ] より:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Redshift は周りの環境に合わせて画面の色温度を調整します。夜中に画面を睨みながら仕事をしているときに目にかかるダメージを抑えることが可能です。このプログラムは [http://justgetflux.com f.lux] からインスパイアされて開発されました [...]。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|Redshift は [[Xorg]] でしか機能しません [https://github.com/jonls/redshift/issues/55]。[[Wayland]] はまだサポートされていません。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|redshift}} パッケージは[[公式リポジトリ]]からインストールできます。また、[[AUR]] の {{AUR|redshift-minimal}} は出来る限り依存パッケージを少なくしたパッケージです。&lt;br /&gt;
&lt;br /&gt;
=== フロントエンド ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;redshift-gtk&#039;&#039; コマンドは {{Pkg|redshift}} パッケージにより提供され、Redshiftをコントロールするアイコンをシステムトレイに表示します。&lt;br /&gt;
&lt;br /&gt;
他の同様のパッケージとして{{AUR|redshiftgui-bin}}や{{AUR|redshift-qt}}、{{AUR|redshiftconf}}、{{AUR|plasma5-applets-redshift-control-git}}が提供されています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Redshift を起動するには最低でもあなたの所在地、つまりあなたの今いる場所の緯度と経度が必要になります。Redshift は複数のルーチンを使ってあなたのいる地点を取得します。どれも使用できない場合 (例: ヘルパープログラムが何もインストールされていない場合)、手動で位置を入力してください: ほとんどの都市/場所が wikipedia のページに載っているのでそこから位置情報を取得してください (&amp;quot;座標&amp;quot;のあるページを検索します)。&lt;br /&gt;
&lt;br /&gt;
=== 自動起動 ===&lt;br /&gt;
&lt;br /&gt;
redshift を自動的に起動する方法は2つ存在します:&lt;br /&gt;
&lt;br /&gt;
* 同梱されている systemd サービスユニットファイルを使用する ([[Systemd#ユニットを使う]]を参照)。2つのサービスファイル {{ic|/usr/lib/systemd/user/redshift.service}} と {{ic|/usr/lib/systemd/user/redshift-gtk.service}} があるので、システムトレイアイコンがいるかどうかで、どちらか片方を有効にしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* systemd サービスユニットファイルを使う場合は、次のページに書かれているように DISPLAY 環境変数を設定する必要があります: [[Systemd/ユーザー#環境変数]]。&#039;drm&#039; を設定する方法ではこの変数を設定する必要はありません。&lt;br /&gt;
&lt;br /&gt;
* redshift.service はユーザーサービスであり、[[ディスプレイマネージャ]]の後に起動します。ディスプレイマネージャを使わない場合は、{{ic|systemctl --user enable redshift}} を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
* redshift-gtk が既に起動している場合はシステムトレイアイコンを右クリックして &#039;Autostart&#039; を選択してください。&lt;br /&gt;
&lt;br /&gt;
=== クイックスタート ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|[https://www.latlong.net/ Latlong.net] は緯度と経度を確認できるサービスです。}}&lt;br /&gt;
&lt;br /&gt;
基本設定を使って Redshift を立ち上げるには、次を実行:&lt;br /&gt;
&lt;br /&gt;
 $ redshift -l LAT:LON&lt;br /&gt;
&lt;br /&gt;
LAT はあなたの座標の緯度、LON は経度に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== GPS に基づいて自動的に座標を取得 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|gpsd}} を使うことで GPS 座標を自動的に確かめて Redshift に情報を入力することもできます以下のスクリプトを作成して {{ic|$lat}} と {{ic|$lon}} を {{ic|redshift -l $lat;$lon}} に渡します:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 date&lt;br /&gt;
 #gpsdata=$( gpspipe -w -n 10 |   grep -m 1 lon )&lt;br /&gt;
 gpsdata=$( gpspipe -w | grep -m 1 TPV )&lt;br /&gt;
 lat=$( echo &amp;quot;$gpsdata&amp;quot;  | jsawk &#039;return this.lat&#039; )&lt;br /&gt;
 lon=$( echo &amp;quot;$gpsdata&amp;quot;  | jsawk &#039;return this.lon&#039; )&lt;br /&gt;
 alt=$( echo &amp;quot;$gpsdata&amp;quot;  | jsawk &#039;return this.alt&#039; )&lt;br /&gt;
 dt=$( echo &amp;quot;$gpsdata&amp;quot; | jsawk &#039;return this.time&#039; )&lt;br /&gt;
 echo &amp;quot;$dt&amp;quot;&lt;br /&gt;
 echo &amp;quot;You are here: $lat, $lon at $alt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
詳しくはフォーラムスレッドの [https://bbs.archlinux.org/viewtopic.php?pid=1389735#p1389735 こちらの投稿] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 手動セットアップ ===&lt;br /&gt;
&lt;br /&gt;
設定ファイル {{ic|~/.config/redshift.conf}} が存在する場合、Redshift はファイルを読み込みます。ただ、Redshift は設定ファイルを作成しないので、手動で作成しなくてはなりません。ドイツ/ハンブルクの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/redshift.conf|2=&lt;br /&gt;
; Global settings for redshift&lt;br /&gt;
[redshift]&lt;br /&gt;
; Set the day and night screen temperatures (Neutral is 6500K)&lt;br /&gt;
temp-day=5700&lt;br /&gt;
temp-night=3500&lt;br /&gt;
&lt;br /&gt;
; Enable/Disable a smooth transition between day and night&lt;br /&gt;
; 0 will cause a direct change from day to night screen temperature.&lt;br /&gt;
; 1 will gradually increase or decrease the screen temperature.&lt;br /&gt;
transition=1&lt;br /&gt;
&lt;br /&gt;
; Set the screen brightness. Default is 1.0.&lt;br /&gt;
;brightness=0.9&lt;br /&gt;
; It is also possible to use different settings for day and night&lt;br /&gt;
; since version 1.8.&lt;br /&gt;
;brightness-day=0.7&lt;br /&gt;
;brightness-night=0.4&lt;br /&gt;
; Set the screen gamma (for all colors, or each color channel&lt;br /&gt;
; individually)&lt;br /&gt;
gamma=0.8&lt;br /&gt;
;gamma=0.8:0.7:0.8&lt;br /&gt;
; This can also be set individually for day and night since&lt;br /&gt;
; version 1.10.&lt;br /&gt;
;gamma-day=0.8:0.7:0.8&lt;br /&gt;
;gamma-night=0.6&lt;br /&gt;
&lt;br /&gt;
; Set the location-provider: &#039;geoclue2&#039; or &#039;manual&#039;&lt;br /&gt;
; type &#039;redshift -l list&#039; to see possible values.&lt;br /&gt;
; The location provider settings are in a different section.&lt;br /&gt;
location-provider=manual&lt;br /&gt;
&lt;br /&gt;
; Set the adjustment-method: &#039;randr&#039;, &#039;vidmode&#039;&lt;br /&gt;
; type &#039;redshift -m list&#039; to see all possible values.&lt;br /&gt;
; &#039;randr&#039; is the preferred method, &#039;vidmode&#039; is an older API.&lt;br /&gt;
; but works in some cases when &#039;randr&#039; does not.&lt;br /&gt;
; The adjustment method settings are in a different section.&lt;br /&gt;
adjustment-method=randr&lt;br /&gt;
&lt;br /&gt;
; Configuration of the location-provider:&lt;br /&gt;
; type &#039;redshift -l PROVIDER:help&#039; to see the settings.&lt;br /&gt;
; ex: &#039;redshift -l manual:help&#039;&lt;br /&gt;
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)&lt;br /&gt;
; are negative numbers.&lt;br /&gt;
[manual]&lt;br /&gt;
lat=48.1&lt;br /&gt;
lon=11.6&lt;br /&gt;
&lt;br /&gt;
; Configuration of the adjustment-method&lt;br /&gt;
; type &#039;redshift -m METHOD:help&#039; to see the settings.&lt;br /&gt;
; ex: &#039;redshift -m randr:help&#039;&lt;br /&gt;
; In this example, randr is configured to adjust screen 1.&lt;br /&gt;
; Note that the numbering starts from 0, so this is actually the&lt;br /&gt;
; second screen. If this option is not specified, Redshift will try&lt;br /&gt;
; to adjust _all_ screens.&lt;br /&gt;
[randr]&lt;br /&gt;
screen=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 実際の画面の明るさを変える ===&lt;br /&gt;
&lt;br /&gt;
Redshift には明るさを調整する機能がありますが、大抵の人が期待するように動作することはありません。ガンマ値を変更することによる擬似的な明度調整であり、画面の明るさが落ちることはないからです [http://jonls.dk/redshift/#known-bugs-and-limitations]。&lt;br /&gt;
&lt;br /&gt;
redshift のフックと {{pkg|xorg-xrandr}} と {{pkg|xorg-xbacklight}} を使うことで画面の輝度を変更することが可能です。ただし制約が存在し、ハードウェアによって別の方法でバックライトを制御する必要があります。詳しくは[[バックライト#xbacklight]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.config/redshift/hooks}} に以下のファイルを作成して実行可能属性を付与してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|&lt;br /&gt;
~/.config/redshift/hooks/brightness.sh|output=#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Set brightness via xbrightness when redshift status changes&lt;br /&gt;
&lt;br /&gt;
# Set brightness values for each status.&lt;br /&gt;
# Range from 1 to 100 is valid&lt;br /&gt;
brightness_day=&amp;quot;100&amp;quot;&lt;br /&gt;
brightness_transition=&amp;quot;50&amp;quot;&lt;br /&gt;
brightness_night=&amp;quot;10&amp;quot;&lt;br /&gt;
# Set fade time for changes to one minute&lt;br /&gt;
fade_time=60000&lt;br /&gt;
&lt;br /&gt;
case $1 in&lt;br /&gt;
	period-changed)&lt;br /&gt;
		case $3 in&lt;br /&gt;
			night)&lt;br /&gt;
				xbacklight -set $brightness_night -time $fade_time&lt;br /&gt;
				;;&lt;br /&gt;
			transition)&lt;br /&gt;
				xbacklight -set $brightness_transition -time $fade_time&lt;br /&gt;
				;;&lt;br /&gt;
			daytime)&lt;br /&gt;
				xbacklight -set $brightness_day -time $fade_time&lt;br /&gt;
				;;&lt;br /&gt;
		esac&lt;br /&gt;
		;;&lt;br /&gt;
esac&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Screen 1 could not be found ===&lt;br /&gt;
&lt;br /&gt;
{{ic|redshift.conf}} 設定ファイルの &amp;quot;screen 1&amp;quot; を &amp;quot;screen 0&amp;quot; に変更してください。&lt;br /&gt;
&lt;br /&gt;
=== トレイアイコンを左・右クリックしても何も起こらない ===&lt;br /&gt;
{{Pkg|libappindicator-gtk3}} をインストールしてください。詳しくは [https://github.com/jonls/redshift/issues/363] や [https://bugs.archlinux.org/task/49971] を参照。&lt;br /&gt;
&lt;br /&gt;
=== geoclue2 が原因で Redshift が動作しない ===&lt;br /&gt;
{{note|以下の方法を使用する前に、redshift-gtk を終了して geoclue サービスを再起動してください。接続がつながるよりも前に位置サービスが起動してしまいサービスが機能しなくなることがあります。}}&lt;br /&gt;
&lt;br /&gt;
[[GNOME]] を使っている場合、&amp;quot;Settings -&amp;gt; Privacy&amp;quot; から位置サービスをオンに切り替えることができます。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、geoclue2 の設定ファイルは Redshift のアクセスを許可しません。以下の行を {{ic|/etc/geoclue/geoclue.conf}} に追加してください:&lt;br /&gt;
{{hc|/etc/geoclue/geoclue.conf|2=&lt;br /&gt;
[redshift]&lt;br /&gt;
allowed=true&lt;br /&gt;
system=false&lt;br /&gt;
users=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== i3 で自動起動しない ===&lt;br /&gt;
[[i3]] の設定ファイルに以下を追加してください:&lt;br /&gt;
 exec --no-startup-id redshift-gtk&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://jonls.dk/redshift Redshift ウェブサイト]&lt;br /&gt;
* [https://github.com/jonls/redshift Redshift on github]&lt;br /&gt;
* {{App|sct|色温度を設定するツール。|https://aur.archlinux.org/packages/sct/|{{AUR|sct}}}}&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OVMF_%E3%81%AB%E3%82%88%E3%82%8B_PCI_%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC&amp;diff=31254</id>
		<title>OVMF による PCI パススルー</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OVMF_%E3%81%AB%E3%82%88%E3%82%8B_PCI_%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC&amp;diff=31254"/>
		<updated>2023-04-16T04:37:22Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: IOMMU の有効化について最新の情報に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Translateme|記事が古くなっているとの指摘がありました}}&lt;br /&gt;
[[Category:仮想化]]&lt;br /&gt;
[[en:PCI passthrough via OVMF]]&lt;br /&gt;
[[zh-hans:PCI passthrough via OVMF]]&lt;br /&gt;
Open Virtual Machine Firmware ([https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF]) は仮想マシンで UEFI を使えるようにするプロジェクトです。Linux 3.9 以上と新しいバージョンの [[QEMU]] では、グラフィックカードをパススルーすることが可能で、仮想マシンでネイティブと同じグラフィック性能を発揮することができます。&lt;br /&gt;
&lt;br /&gt;
デスクトップコンピュータに使用していない GPU が接続されている場合 (内蔵 GPU や古い OEM カードでもかまいません、ブランドが一致している必要はありません)、ハードウェアがサポートしていれば ([[#要件]]を参照)、あらゆる OS の仮想マシンで専用 GPU として（ほぼ）最大限の性能を活用できます。技術的な詳細は [https://www.linux-kvm.org/images/b/b3/01x09b-VFIOandYou-small.pdf こちらのプレゼンテーション (pdf)] を見てください。&lt;br /&gt;
&lt;br /&gt;
== 要件 ==&lt;br /&gt;
VGA パススルーでは最先端の技術を使っているため、あなたのハードウェアでは使用できない可能性があります。パススルーを行うには以下の要件が満たされていなければなりません:&lt;br /&gt;
&lt;br /&gt;
* CPU がハードウェア仮想化 (KVM) と IOMMU (パススルー) をサポートしていること。&lt;br /&gt;
** [https://ark.intel.com/ja/Search/FeatureFilter?productType=processors&amp;amp;VTD=true Intel の対応 CPU リスト (Intel VT-x と Intel VT-d)]&lt;br /&gt;
** Bulldozer 世代以降 (Zen も含む) の AMD 製 CPU は全て対応しています。&lt;br /&gt;
*** K10 世代 (2007年) の CPU は IOMMU を搭載していないため、[https://support.amd.com/TechDocs/43403.pdf#page=18 890FX] や [https://support.amd.com/TechDocs/48691.pdf#page=21 990FX] チップセットが搭載されたマザーボードが必要です。&lt;br /&gt;
* マザーボードが IOMMU をサポートしていること。&lt;br /&gt;
** チップセットと BIOS の両方が対応している必要があります。対応しているかどうかすぐに判断することはできませんが、[https://wiki.xen.org/wiki/VTd_HowTo Xen wiki の対応ハードウェアリスト] や [[wikipedia:List_of_IOMMU-supporting_hardware|Wikipedia の対応リスト]]が存在します。&lt;br /&gt;
* ゲスト GPU ROM が UEFI をサポートしていること。&lt;br /&gt;
** [https://www.techpowerup.com/vgabios/ このリストに載っている ROM] に使用している GPU が存在し UEFI をサポートしていると書かれていれば、問題ありません。2012年以降の GPU はサポートされているはずです。Windows 8 との互換性があると売り出すには UEFI のサポートが要件だと Microsoft が決めたためです。&lt;br /&gt;
&lt;br /&gt;
使用していないモニターやマウス、キーボードがあれば、それも仮想マシンに割り当てることができます (GPU はディスプレイが接続されていないと何も出力することができず Spice 接続では性能が上がりません)。何か問題が発生した場合でも、スペアの機材があればホストマシンは制御できます。&lt;br /&gt;
&lt;br /&gt;
==IOMMU のセットアップ==&lt;br /&gt;
{{Note|&lt;br /&gt;
* IOMMU は Intel VT-d と AMD-Vi の総称です。&lt;br /&gt;
* VT-d は &#039;&#039;ダイレクト I/O 向けインテル VT&#039;&#039; (&#039;&#039;Intel Virtualization Technology for Directed I/O&#039;&#039;) の略語です。&#039;&#039;インテル バーチャライゼーション・テクノロジー&#039;&#039; (&#039;&#039;Intel Virtualization Technology&#039;&#039;) の VT-x と混同しないようにしてください。 VT-x は単独のハードウェアプラットフォームを複数の「仮想」プラットフォームとして機能することを可能にする機能で、対して VT-d はシステムのセキュリティと信頼性を向上させると共に仮想化環境での I/O デバイスのパフォーマンスを向上させる機能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IOMMU によって PCI パススルーや障害または悪意あるデバイスからのメモリ保護機能を使うことができます。[[Wikipedia:Input-output memory management unit#Advantages]] や [https://www.quora.com/Memory-Management-computer-programming/Could-you-explain-IOMMU-in-plain-English Memory Management (computer programming): Could you explain IOMMU in plain English?] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===IOMMU の有効化===&lt;br /&gt;
AMD-Vi/Intel VT-d が CPU によってサポートされていること、BIOS の設定で AMD-VI/VT-d が有効化されていることを確認してください。通常は他の CPU 機能と一緒に設定が並んでいるはずです (オーバークロック関連のメニューに存在することもあります)。設定における名前は機能名 (&amp;quot;Vt-d&amp;quot; あるいは &amp;quot;AMD-Vi&amp;quot;) だったり、あるいは &amp;quot;Virtualization technology&amp;quot; などの曖昧な単語だったりします。マニュアルに載っていない場合もあります。&lt;br /&gt;
&lt;br /&gt;
使用している CPU に応じて適切な[[カーネルパラメータ]]を設定し、 IOMMU を有効にしてください:&lt;br /&gt;
&lt;br /&gt;
* Intel 製の CPU (VT-d) であれば {{ic|1=intel_iommu=on}} を設定&lt;br /&gt;
* AMD 製の CPU (AMD-Vi) ではカーネルが BIOS から IOMMU のサポートを検出し、自動で有効化されます&lt;br /&gt;
{{ic|1=iommu=pt}} パラメータも追加してください。このパラメータによって Linux がパススルーしないデバイスに触らないようにすることができます。&lt;br /&gt;
&lt;br /&gt;
再起動して、dmesg で IOMMU が有効になっていることを確認してください:&lt;br /&gt;
{{hc|dmesg&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;grep -e DMAR -e IOMMU|&lt;br /&gt;
[    0.000000] ACPI: DMAR 0x00000000BDCB1CB0 0000B8 (v01 INTEL  BDW      00000001 INTL 00000001)&lt;br /&gt;
[    0.000000] Intel-IOMMU: enabled&lt;br /&gt;
[    0.028879] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c0000020660462 ecap f0101a&lt;br /&gt;
[    0.028883] dmar: IOMMU 1: reg_base_addr fed91000 ver 1:0 cap d2008c20660462 ecap f010da&lt;br /&gt;
[    0.028950] IOAPIC id 8 under DRHD base  0xfed91000 IOMMU 1&lt;br /&gt;
[    0.536212] DMAR: No ATSR found&lt;br /&gt;
[    0.536229] IOMMU 0 0xfed90000: using Queued invalidation&lt;br /&gt;
[    0.536230] IOMMU 1 0xfed91000: using Queued invalidation&lt;br /&gt;
[    0.536231] IOMMU: Setting RMRR:&lt;br /&gt;
[    0.536241] IOMMU: Setting identity map for device 0000:00:02.0 [0xbf000000 - 0xcf1fffff]&lt;br /&gt;
[    0.537490] IOMMU: Setting identity map for device 0000:00:14.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537512] IOMMU: Setting identity map for device 0000:00:1a.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537530] IOMMU: Setting identity map for device 0000:00:1d.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537543] IOMMU: Prepare 0-16MiB unity mapping for LPC&lt;br /&gt;
[    0.537549] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]&lt;br /&gt;
[    2.182790] [drm] DMAR active, disabling use of stolen memory}}&lt;br /&gt;
&lt;br /&gt;
===グループが正しいことを確認===&lt;br /&gt;
&lt;br /&gt;
以下のスクリプトを使うことで PCI デバイスが IOMMU グループにどのようにマッピングされたか確認できます。何も出力が返ってこない場合、IOMMU のサポートが有効になっていないかハードウェアが IOMMU をサポートしていないかのどちらかです。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 shopt -s nullglob&lt;br /&gt;
 for d in /sys/kernel/iommu_groups/*/devices/*; do &lt;br /&gt;
     n=${d#*/iommu_groups/*}; n=${n%%/*}&lt;br /&gt;
     printf &#039;IOMMU Group %s &#039; &amp;quot;$n&amp;quot;&lt;br /&gt;
     lspci -nns &amp;quot;${d##*/}&amp;quot;&lt;br /&gt;
 done;&lt;br /&gt;
&lt;br /&gt;
出力の例:&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 0 00:00.0 Host bridge [0600]: Intel Corporation 2nd Generation Core Processor Family DRAM Controller [8086:0104] (rev 09)&lt;br /&gt;
 IOMMU Group 1 00:16.0 Communication controller [0780]: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 [8086:1c3a] (rev 04)&lt;br /&gt;
 IOMMU Group 2 00:19.0 Ethernet controller [0200]: Intel Corporation 82579LM Gigabit Network Connection [8086:1502] (rev 04)&lt;br /&gt;
 IOMMU Group 3 00:1a.0 USB controller [0c03]: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 [8086:1c2d] (rev  &lt;br /&gt;
 ...&lt;br /&gt;
IOMMU グループは仮想マシンにパススルーすることができる一番小さい単位の物理デバイスのセットです。例えば、上記の例の場合、06:00.0 の GPU と 6:00.1 のオーディオコントローラは IOMMU グループ13に属しており、両方一緒にしかパススルーすることができません。フロントの USB コントローラは USB 拡張コントローラ (グループ10) やリアの USB コントローラ (グループ4) と分かれているグループ (グループ2) なので、[[#USB コントローラ|他のデバイスに影響を与えないで仮想マシンにパススルーすることができます]]。&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====独立していない CPU ベースの PCIe スロットにゲスト GPU を接続した場合====&lt;br /&gt;
全ての PCI-E スロットは同じではありません。ほとんどのマザーボードでは PCIe スロットには CPU 由来のものと PCH 由来のものがあります。CPU によっては、プロセッサ由来の PCIe スロットは隔離することができず、その場合 PCI スロットは接続されているデバイスと一緒にグループ化されてしまいます。&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 1 00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)&lt;br /&gt;
 IOMMU Group 1 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750] (rev a2)&lt;br /&gt;
 IOMMU Group 1 01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)&lt;br /&gt;
&lt;br /&gt;
上記のようにゲスト GPU しか含まれていない場合は問題ありません。他の PCIe スロットに接続した場合や CPU や PCH の配置によって、同じグループに他のデバイスが含まれる場合、そのデバイスも一緒にパススルーすることになります。仮想マシンにデバイスをパススルーしても問題ない場合は次に進んでください。そうでない場合、他の PCIe スロットに GPU を接続してみて他のデバイスと分離できないか試してみてください。もしくは ACS 上書きパッチをインストールする方法もありますが、こちらは欠点があります。詳しくは [[#IOMMU グループのバイパス (ACS 上書きパッチ)]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{note|他のデバイスと一緒にグループ化した場合、起動時に pci のルートポートとブリッジを vfio に紐付けたり VM に追加してはいけません。}}&lt;br /&gt;
&lt;br /&gt;
==GPU の分離==&lt;br /&gt;
デバイスを仮想マシンに割り当てるには、ホストマシンとの干渉を避けるためにこのデバイスと同じ IOMMU グループを共有する全てのデバイスがスタブドライバまたは VFIO ドライバに置き換えられている必要があります。この処理はほとんどのデバイスでは VM が起動する直前に行われます。&lt;br /&gt;
&lt;br /&gt;
しかし、GPU ドライバーは巨大で複雑なため、動的な再バインドはあまりサポートされておらず、ホストの GPU を仮想マシンにお互いのドライバーが衝突すること無く透過的にパススルーすることは通常できません。 VM が起動する前に代わりのドライバーに GPU を手動でバインドし、他のドライバーが GPU を使用できないようにすることを推奨します。&lt;br /&gt;
&lt;br /&gt;
続くセクションでは、代わりのドライバーがブートプロセスの早期にバインドされるように GPU を構成する詳細な方法を記載します。これにより VM が要求するかドライバーがスイッチバックされるまでデバイスは活動を停止します。これは一旦システムが完全にオンラインになってからドライバを切り替えるよりも問題が少なく、好ましい方法と言えます。2つの方法が存在しますが、使用しているカーネルがサポートしている場合は vfio-pci を使用することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
{{warning|設定後にマシンを再起動すると、設定を解除しないかぎりホストから GPU は使えなくなります。再起動する前にホストで使用する GPU が正しく (マザーボードがホスト GPU を使って表示するように) 設定されているか確認してください。}}&lt;br /&gt;
&lt;br /&gt;
Linux 4.1 から、カーネルには vfio-pci が含まれており、pci-stub と同じような機能を持ちながら、使用していないときはデバイスを D3 状態にするなどの機能が追加されています。&lt;br /&gt;
&lt;br /&gt;
vfio-pci は基本的に PCI デバイスを ID で指定するため、パススルーしたいデバイスの ID を指定する必要があります。以下の IOMMU グループの場合、vfio-pci を {{ic|10de:13c2}} と {{ic|10de:0fbb}} にバインドします。&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 13 06:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
 IOMMU Group 13 06:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)}}&lt;br /&gt;
&lt;br /&gt;
{{note|&lt;br /&gt;
* ホスト GPU とゲスト GPU のベンダーとデバイス ID が同じ場合 (同じ型番の GPU を使っている場合)、ベンダーとデバイス ID を使ってデバイスを分離させることはできません。そのような場合は[[#ゲストとホストで同じ GPU を使う|ゲストとホストで同じ GPU を使う]]のセクションを読んでください。&lt;br /&gt;
* [[#独立していない CPU ベースの PCIe スロットにゲスト GPU を接続した場合]]にあるように、PCI のルートポートが IOMMU グループに属している場合、ID を {{ic|vfio-pci}} に指定してはいけません。ルートポートを機能させるにはホスト側に割り当てたままにする必要があります。グループ内の他のデバイスも {{ic|vfio-pci}} にバインドされてしまいます。}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールとして vfio-pci をロード ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|linux}} カーネルには組み込みモジュールとして vfio-pci が含まれていないため、設定でロードさせる必要があります。&lt;br /&gt;
&lt;br /&gt;
ベンダーとデバイス ID を vfio-pci に渡されるデフォルトパラメータに追加します:&lt;br /&gt;
{{hc|1=/etc/modprobe.d/vfio.conf|2=options vfio-pci ids=10de:13c2,10de:0fbb}}&lt;br /&gt;
&lt;br /&gt;
上記の設定だけでは vfio-pci が他のグラフィックドライバーよりも前にロードされるとは限りません。必ずロードされるようにするには、カーネルイメージの中で静的にバインドされるようにする必要があります。{{ic|vfio_pci}}, {{ic|vfio}}, {{ic|vfio_iommu_type1}}, {{ic|vfio_virqfd}} を [[mkinitcpio]] にこの順番で追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(... vfio_pci vfio vfio_iommu_type1 vfio_virqfd ...)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Kernel_Mode_Setting#Early_KMS_start|初期モードセッティング]]のために他のドライバー ({{ic|nouveau}}, {{ic|radeon}}, {{ic|amdgpu}}, {{ic|i915}} など) をロードしている場合、上記の VFIO モジュールが先にロードされるようにしてください。}}&lt;br /&gt;
&lt;br /&gt;
さらに、{{ic|mkinitcpio.conf}} の HOOKS リストに modconf フックを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
HOOKS=(... modconf ...)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいモジュールを initramfs に追加したら、[[initramfs を再生成する]]必要があります。{{ic|/etc/modprobe.d/vfio.conf}} でデバイスの ID を変更した場合も、initramfs を再生成してください。パラメータは起動の初期段階で initramfs で指定される必要があります。&lt;br /&gt;
&lt;br /&gt;
=== カーネルに vfio-pci が組み込まれている場合 ===&lt;br /&gt;
&lt;br /&gt;
vfio-pci モジュールを組み込んだカーネルを使っている場合、以下のように[[カーネルパラメータ]]でデバイス ID を指定することで GPU を分離できます:&lt;br /&gt;
&lt;br /&gt;
 vfio-pci.ids=10de:13c2,10de:0fbb&lt;br /&gt;
&lt;br /&gt;
=== 設定を確認 ===&lt;br /&gt;
&lt;br /&gt;
再起動して vfio-pci が正しくロードされ適切なデバイスがバインドされていることを確認:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ dmesg {{!}} grep -i vfio|&lt;br /&gt;
[    0.329224] VFIO - User Level meta-driver version: 0.3&lt;br /&gt;
[    0.341372] vfio_pci: add [10de:13c2[ffff:ffff]] class 0x000000/00000000&lt;br /&gt;
[    0.354704] vfio_pci: add [10de:0fbb[ffff:ffff]] class 0x000000/00000000&lt;br /&gt;
[    2.061326] vfio-pci 0000:06:00.0: enabling device (0100 -&amp;gt; 0103)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|vfio.conf}} の全てのデバイス (期待するデバイスであっても) が dmesg に出力される必要はありません。起動時にデバイスが出力に現れなくてもゲスト VM から問題なく使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -nnk -d 10de:13c2|&lt;br /&gt;
06:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
	Kernel driver in use: vfio-pci&lt;br /&gt;
	Kernel modules: nouveau nvidia}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -nnk -d 10de:0fbb|&lt;br /&gt;
06:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)&lt;br /&gt;
	Kernel driver in use: vfio-pci&lt;br /&gt;
	Kernel modules: snd_hda_intel}}&lt;br /&gt;
&lt;br /&gt;
==OVMF によるゲスト VM のセットアップ==&lt;br /&gt;
OVMF は QEMU 仮想マシン用のオープンソース UEFI ファームウェアです。SeaBIOS を使うことでも PCI パススルーと同じような結果を得ることはできますが、セットアップ手順が異なります。一般的にはハードウェアがサポートしているのであれば EFI を使用する方法を推奨します。&lt;br /&gt;
&lt;br /&gt;
===libvirt の設定===&lt;br /&gt;
[[libvirt]] は様々な仮想化ユーティリティのラッパーであり、仮想マシンの設定とデプロイを簡単にします。KVM と QEMU の場合、フロントエンドを使用することで QEMU 用にパーミッションを設定する必要がなくなり簡単に様々なデバイスを仮想マシンに追加・削除できます。ラッパーと名乗ってはいますが、QEMU の最新機能全てをサポートしているわけではありません。QEMU の引数を追加するためにラッパースクリプトを使用する必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu}}, {{Pkg|libvirt}}, {{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}}, {{Pkg|virt-manager}} をインストールしてから、OVMF ファームウェアイメージとランタイム変数テンプレートのパスを libvirt の設定に追加して、{{ic|virt-install}} や {{ic|virt-manager}} が認識できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|2=&lt;br /&gt;
nvram = [&lt;br /&gt;
	&amp;quot;/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定後、{{ic|libvirtd.service}} とログ出力コンポーネント {{ic|virtlogd.socket}} を[[起動]]・[[有効化]]します。&lt;br /&gt;
&lt;br /&gt;
===ゲスト OS のセットアップ===&lt;br /&gt;
{{ic|virt-manager}} による仮想マシンの設定は画面上の指示に従うだけで完了します。ただし、以下のステップでは特別な注意を払う必要があります:&lt;br /&gt;
* 仮想マシンの作成ウィザードで VM の名前を付けるとき、&amp;quot;Customize before install&amp;quot; チェックボックスにチェックを入れてください。&lt;br /&gt;
* &amp;quot;Overview&amp;quot; セクションで、ファームウェアを &amp;quot;UEFI&amp;quot; に設定してください [https://i.imgur.com/73r2ctM.png]。オプションがグレーになっている場合、{{ic|/etc/libvirt/qemu.conf}} でファームウェアの場所が正しく指定されているか確認してください。修正した後 {{ic|libvirtd.service}} を再起動してください。&lt;br /&gt;
* &amp;quot;CPUs&amp;quot; セクションで、CPU モデルを &amp;quot;host-passthrough&amp;quot; に変更してください。リストに存在しない場合、手動で入力してください。これで libvirt が CPU の機能を実際の CPU と同じように反映するようになって CPU が正しく認識されるようになります。変更しないと、一部のアプリケーションで CPU のモデルが不明だとエラーが発生します。&lt;br /&gt;
* IO のオーバーヘッドを抑えたい場合、&amp;quot;Add Hardware&amp;quot; から &amp;quot;VirtIO SCSI&amp;quot; モデルの SCSI ドライブのコントローラを追加してください。それからデフォルトの IDE ディスクを SCSI ディスクに変更して作成したコントローラーにバインドしてください。&lt;br /&gt;
** Windows の仮想マシンはデフォルトでは SCSI ドライブを認識しないため、[https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/ こちら] からドライバーが含まれている ISO をダウンロードして IDE (あるいは Windows 7 以上の場合は SATA) の CD-ROM ストレージデバイスを作成してダウンロードした ISO にリンクしてください。この設定を行わないとインストール時に Windows がディスクを認識できません。Windows をインストールするディスクを選択するときは、&#039;&#039;vioscsi&#039;&#039; 下の CD-ROM に含まれているドライバーをロードしてください。&lt;br /&gt;
&lt;br /&gt;
他のインストールは通常と同じです。標準の QXL ビデオアダプタをウィンドウで実行します。現時点では、仮想デバイスのためのドライバーをインストールする必要はありません。ほとんどが後で削除されるためです。ゲスト OS のインストールが完了したら、仮想マシンをオフにしてください。最初の VM 起動時にインストールが始まらず UEFI メニューに戻ってしまう場合があります。場合によっては正しい ISO ファイルが自動的に認識されないために、起動ドライブを手動で指定する必要があります。 exit とタイプして &amp;quot;boot manager&amp;quot; に移動するとデバイス選択メニューに入ることができます。&lt;br /&gt;
&lt;br /&gt;
===PCI デバイスの接続===&lt;br /&gt;
インストールが完了したら、libvirt でハードウェアの詳細情報を編集して spice チャンネルや仮想ディスプレイ、QXL ビデオアダプタ、マウスやキーボード、USB タブレットデバイスのエミュレートなどの仮想デバイスを削除できます。入力デバイスがなくなるので、仮想マシンに USB ホストデバイスをバインドする場合、ゲストに何かあったときは最低でもひとつのマウスやキーボードをホストに割り当ててください。ここで、先に分離しておいた PCI デバイスを接続することができます。&amp;quot;Add Hardware&amp;quot; をクリックしてパススルーしたい PCI Host Device を選択してください。問題がなければ、GPU に接続されたディスプレイが OVMF のスプラッシュ画面を表示して通常通りに VM が起動します。そこから VM のドライバーの設定をおこなってください。&lt;br /&gt;
&lt;br /&gt;
=== Evdev でキーボード・マウスを接続 ===&lt;br /&gt;
&lt;br /&gt;
ゲスト用のスペアのマウスやキーボードを持っておらず、Spice のオーバーヘッドを避けたい場合、evdev を設定することでマウスとキーボードのコントロールをホストとゲストで切り替えることができます。まず、{{ic|/dev/input/by-id/}} からキーボードとマウスのデバイスを探してください。マウスやキーボードに複数のデバイスが関連付けられている場合、{{ic|cat /dev/input/by-id/&#039;&#039;device_id&#039;&#039;}} を試してみてキーを打ったりマウスを動かして入力が通ったかどうか確認してください。それからデバイスを設定に追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
 &amp;lt;qemu:commandline&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;-object&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;input-linux,id=mouse1,evdev=/dev/input/by-id/MOUSE_NAME&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;-object&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;input-linux,id=kbd1,evdev=/dev/input/by-id/KEYBOARD_NAME,grab_all=on,repeat=on&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;/qemu:commandline&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOUSE_NAME}} と {{ic|KEYBOARD_NAME}} は適切なデバイス id に置き換えてください。それから qemu の設定にデバイスを記述して、ユーザーとグループが入力デバイスにアクセスできるように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
user = &amp;quot;&amp;lt;your_user&amp;gt;&amp;quot;&lt;br /&gt;
group = &amp;quot;kvm&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
cgroup_device_acl = [&lt;br /&gt;
    &amp;quot;/dev/kvm&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/input/by-id/KEYBOARD_NAME&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/input/by-id/MOUSE_NAME&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/null&amp;quot;, &amp;quot;/dev/full&amp;quot;, &amp;quot;/dev/zero&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/random&amp;quot;, &amp;quot;/dev/urandom&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/ptmx&amp;quot;, &amp;quot;/dev/kvm&amp;quot;, &amp;quot;/dev/kqemu&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/rtc&amp;quot;,&amp;quot;/dev/hpet&amp;quot;, &amp;quot;/dev/sev&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから使用するユーザーが {{ic|kvm}} と {{ic|input}} [[ユーザーとグループ|グループ]]にアクセスできるようにしてください。{{ic|libvirtd.service}} を再起動してください。これでゲスト OS を起動したら左と右の Control キーを両方同時に押すことでマウスとキーボードを切り替えることができます。&lt;br /&gt;
&lt;br /&gt;
設定で PS/2 から Virtio の入力に切り替えることもできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;input type=&#039;mouse&#039; bus=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
        &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x0e&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/input&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;keyboard&#039; bus=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
        &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x0f&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/input&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;keyboard&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ゲスト OS を起動してデバイスオン virtIO ドライバーをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====OVMF ベースの VM で非 EFI イメージを使う====&lt;br /&gt;
OVMF ファームウェアは EFI 以外のメディアの起動をサポートしていません。起動後に UEFI シェルが開かれてしまう場合、EFI ブートメディアに問題がある可能性があります。他の linux/windows イメージを使ってみてイメージに問題がないか確認してください。&lt;br /&gt;
&lt;br /&gt;
==パフォーマンスチューニング==&lt;br /&gt;
PCI パススルーを使うのはビデオゲームや GPU を使用する作業など大抵パフォーマンスが重要な場合です。PCI パススルーによってネイティブの性能に近づきますが、仮想マシンを最大限活用するにはホストとゲスト両方で設定が必要です。&lt;br /&gt;
&lt;br /&gt;
===CPU ピニング===&lt;br /&gt;
KVM ゲストではデフォルトでゲストから要求された操作を仮想プロセッサを表すスレッドとして実行します。スレッドは Linux のスケジューラによって他のスレッドと同じように管理され、nice 値や優先度にあわせて手隙の CPU コアに割り当てられます。スレッド切り替えにはオーバーヘッドが存在するため (コンテキストスイッチによってコアのキャッシュが強制的に変更されるため)、ゲストのパフォーマンスに悪い影響を与えます。CPU ピニングはこの問題を解決してプロセスのスケジューリングを上書きして VM のスレッドは特定のコアでのみ動作するようになります。例えば、ゲストのコア 0, 1, 2, 3 をホストの 4, 5, 6, 7 番目のコアに割り当てるには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;4&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;5&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====ハイパースレッディングの場合====&lt;br /&gt;
CPU がハードウェアによるマルチタスクをサポートしている場合 (Intel のチップではハイパースレッディングと呼ばれます)、CPU ピニングをする方法は2つ存在します。ハイパースレッディングは1つの CPU で2つのスレッドを効率的に動作させる手法であるため、クアッドコア CPU ならば8つの論理コアが使えます。物理コアの負担率が高い場合、論理コアは使われません。VM のスレッドを2つの物理コアに割り当てても、2つのコアが対応できる負担を超える作業では2つの論理コアの補助を得ることができません。4つのコアのうち2つのコアをパススルーしただけだからです。&lt;br /&gt;
&lt;br /&gt;
以下はクアッドコアのマシンでハイパースレッディングが有効になっている場合の {{ic|/proc/cpuinfo}} の要約です:&lt;br /&gt;
{{hc|$ grep -e &amp;quot;processor&amp;quot; -e &amp;quot;core id&amp;quot; -e &amp;quot;^$&amp;quot; /proc/cpuinfo|&lt;br /&gt;
processor	: 0&lt;br /&gt;
core id		: 0&lt;br /&gt;
&lt;br /&gt;
processor	: 1&lt;br /&gt;
core id		: 1&lt;br /&gt;
&lt;br /&gt;
processor	: 2&lt;br /&gt;
core id		: 2&lt;br /&gt;
&lt;br /&gt;
processor	: 3&lt;br /&gt;
core id		: 3&lt;br /&gt;
&lt;br /&gt;
processor	: 4&lt;br /&gt;
core id		: 0&lt;br /&gt;
&lt;br /&gt;
processor	: 5&lt;br /&gt;
core id		: 1&lt;br /&gt;
&lt;br /&gt;
processor	: 6&lt;br /&gt;
core id		: 2&lt;br /&gt;
&lt;br /&gt;
processor	: 7&lt;br /&gt;
core id		: 3}}&lt;br /&gt;
&lt;br /&gt;
仮想マシンを使っているときにホスト側で負担が重い計算をしない場合 (あるいはホストを全く使わない場合)、仮想マシンのスレッドを全ての論理コアに固定化して、仮想マシンがコアを活用できるようにすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
クアッドコアのマシンの場合、以下のようになります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;4&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;5&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;cpu mode=&#039;custom&#039; match=&#039;exact&#039;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;topology sockets=&#039;1&#039; cores=&#039;4&#039; threads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/cpu&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ホストとゲストで同時に何か処理を行う場合、一部の物理コアとゲストのスレッドを固定して、後はホストでも使えるようにすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
クアッドコアのマシンの場合、以下のようになります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;3&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;cpu mode=&#039;custom&#039; match=&#039;exact&#039;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;topology sockets=&#039;1&#039; cores=&#039;2&#039; threads=&#039;2&#039;/&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/cpu&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===静的ヒュージページ===&lt;br /&gt;
大量のメモリを必要するアプリケーションでは、メモリの遅延が問題になることがあります。使用するメモリページ (メモリ割り当ての基本単位) が増えれば増えるほど、複数のメモリページにまたがる情報にアプリケーションがアクセスするようになる確立が高まります。メモリページの実際のアドレスを解決するには複数のステップを踏まないとならないため、大抵の場合 CPU は最近使用されたメモリページの情報をキャッシュすることで同一ページの使用を高速化します。しかしながらアプリケーションが大量のメモリを使うとすると問題です。例えば仮想マシンが使用する 4GB のメモリが (メモリページのデフォルトサイズである) 4kB に分割されるような場合、頻繁にキャッシュミスが発生することになりメモリの遅延を増大させてしまいます。このような問題を緩和するためにヒュージページが存在します。大きなサイズのページをアプリケーションに割り当てることで、同一ページが使用される可能性を高めます。通常は必要に応じてヒュージページを動的に管理する、透過的ヒュージページが使用されます。&lt;br /&gt;
&lt;br /&gt;
しかしながら仮想マシンで PCI パススルーを使う場合は透過ヒュージページは意味がありません。IOMMU がゲストのメモリ割り当てを必要とし仮想マシンが起動するとすぐに固定化されるためです。したがってヒュージページの効果を得るには静的に割り当てる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{warning|静的ヒュージページは割り当てられたメモリをロックダウンするため、普通のアプリケーションはそれらのメモリを使用できなくなります。8GB のメモリが搭載されたマシンでヒュージページに 4GB を割り当てると、ホストで使用できるメモリは 4GB だけになります。たとえ VM が実行中でなくてもそれは変わりません。}}&lt;br /&gt;
&lt;br /&gt;
起動時にヒュージページを割り当てるには、カーネルコマンドラインで {{ic|&amp;lt;nowiki&amp;gt;hugepages=x&amp;lt;/nowiki&amp;gt;}} を使って適切な量を指定します。例えば {{ic|&amp;lt;nowiki&amp;gt;hugepages=1024&amp;lt;/nowiki&amp;gt;}} として1024ページを予約すると、ヒュージページあたりデフォルトで 2048kB のサイズが割り当てられるため、仮想マシンが使用するための 2GB 分のメモリが作成されます。&lt;br /&gt;
&lt;br /&gt;
CPU がサポートしていれば手動でページサイズを設定できます。{{ic|&amp;lt;nowiki&amp;gt;grep pdpe1gb /proc/cpuinfo&amp;lt;/nowiki&amp;gt;}} を実行することで 1 GB のヒュージページがサポートされているか確認できます。カーネルパラメータで 1 GB のヒュージページサイズを設定するには: {{ic|&amp;lt;nowiki&amp;gt;default_hugepagesz=1G hugepagesz=1G hugepages=X transparent_hugepage=never&amp;lt;/nowiki&amp;gt;}}。&lt;br /&gt;
&lt;br /&gt;
また、静的ヒュージページは要求を行ったアプリケーションだけが使用できるため、libvirt のドメイン設定に kvm が割り当てたヒュージページを活用するように設定を追加する必要があります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;memoryBacking&amp;gt;&lt;br /&gt;
	&amp;lt;hugepages/&amp;gt;&lt;br /&gt;
&amp;lt;/memoryBacking&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== CPU 周波数ガバナー ===&lt;br /&gt;
&lt;br /&gt;
[[CPU 周波数スケーリング|CPU ガバナー]]の設定によっては、仮想マシンのスレッドによって周波数が引き上がる閾値まで CPU の負担が達しないことがあります。KVM が自力で CPU の周波数を変更することはできないため、CPU の使用率が思うように上がらないとパフォーマンスが出ないという問題になる可能性があります。ゲスト側で CPU 負担が重い作業を実行している間に {{ic|watch lscpu}} によって報告される周波数に変化があるかどうか確認してみてください。周波数が最大値まで上がらない場合、[https://lime-technology.com/forum/index.php?topic=46664.msg447678#msg447678 CPU スケーリングがホスト OS によって制御されている] ことが原因かもしれません。その場合、全てのコアを最大周波数に設定してみてパフォーマンスが改善しないか確認してください。最新の Intel 製チップをデフォルトの P-State ドライバーで使用している場合、cpupower コマンドは[[CPU 周波数スケーリング#CPU 周波数ドライバー|効果がない]]ため、{{ic|/proc/cpuinfo}} を監視して CPU が最大周波数になっていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
=== AMD CPU でパフォーマンスを改善する ===&lt;br /&gt;
&lt;br /&gt;
以前は AMD 環境では Nested Page Tables (NPT) を無効化することで KVM の GPU 性能を引き上げることができました。これは [https://sourceforge.net/p/kvm/bugs/230/ 非常に古いバグ] が原因で、トレードオフとして CPU の性能が落ちて、がたつきが発生することがありました。&lt;br /&gt;
&lt;br /&gt;
カーネル 4.14 と 4.9 から問題を解決する [https://patchwork.kernel.org/patch/10027525/ カーネルパッチ] がマージされています。公式の {{Pkg|linux}} または {{Pkg|linux-lts}} カーネルを使用している場合、パッチは既に適用されています (最新版のカーネルを使っていることを確認してください)。他のカーネルを使っている場合は手動でパッチを適用する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|一部の Ryzen ユーザーによって上記パッチがテストされており、問題なく動作し GPU パススルーの性能がほとんどネイティブのレベルまで向上することが確認されています ([https://www.reddit.com/r/VFIO/comments/78i3jx/possible_fix_for_the_npt_issue_discussed_on_iommu/ こちらの Reddit スレッド] を参照)。}}&lt;br /&gt;
&lt;br /&gt;
QEMU 3.1 から TOPOEXT cpuid フラグはデフォルトで無効になっています。AMD の CPU でハイパースレッディングを使うには手動で有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cpu mode=&#039;host-passthrough&#039; check=&#039;none&#039;&amp;gt;&lt;br /&gt;
 &amp;lt;topology sockets=&#039;1&#039; cores=&#039;4&#039; threads=&#039;2&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;feature policy=&#039;require&#039; name=&#039;topoext&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;/cpu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
コミット: https://git.qemu.org/?p=qemu.git;a=commit;h=7210a02c58572b2686a3a8d610c6628f87864aed&lt;br /&gt;
&lt;br /&gt;
== 特殊な構成 ==&lt;br /&gt;
&lt;br /&gt;
特定の構成では特別な設定が必要になります。ホストあるいは VM が正しく動作しない場合、あなたのシステムが以下のどれかにあてはまっていないか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストとホストで同じ GPU を使う ===&lt;br /&gt;
pci-stub と vfio-pci はどちらもベンダー・デバイス id の組み合わせを使って起動時にバインドするデバイスを認識するため、同じ ID の GPU が2つある場合、パススルードライバーをどちらか片方にバインドできません。スクリプトを使って {{ic|driver_override}} の pci バスアドレスによって割り当てる必要があります。&lt;br /&gt;
&lt;br /&gt;
スクリプトを作成して vfio-pci をブート GPU 以外の全ての GPU にバインドすることができます。{{ic|/usr/bin/vfio-pci-override.sh}} スクリプトを作成:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
for i in /sys/bus/pci/devices/*/boot_vga; do&lt;br /&gt;
	if [ $(cat &amp;quot;$i&amp;quot;) -eq 0 ]; then&lt;br /&gt;
		GPU=&amp;quot;${i%/boot_vga}&amp;quot;&lt;br /&gt;
		AUDIO=&amp;quot;$(echo &amp;quot;$GPU&amp;quot; | sed -e &amp;quot;s/0$/1/&amp;quot;)&amp;quot;&lt;br /&gt;
		echo &amp;quot;vfio-pci&amp;quot; &amp;gt; &amp;quot;$GPU/driver_override&amp;quot;&lt;br /&gt;
		if [ -d &amp;quot;$AUDIO&amp;quot; ]; then&lt;br /&gt;
			echo &amp;quot;vfio-pci&amp;quot; &amp;gt; &amp;quot;$AUDIO/driver_override&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
	fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
modprobe -i vfio-pci&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/vfio.conf}} を以下の内容で作成:&lt;br /&gt;
 install vfio-pci /usr/bin/vfio-pci-override.sh&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集:&lt;br /&gt;
&lt;br /&gt;
MODULES からビデオドライバーを全て削除して {{ic|vfio-pci}} と {{ic|vfio_iommu_type1}} を追加してください:&lt;br /&gt;
 MODULES=(ext4 vfat vfio-pci vfio_iommu_type1)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/vfio.conf}} と {{ic|/usr/bin/vfio-pci-override.sh}} を FILES に追加してください:&lt;br /&gt;
 FILES=(/etc/modprobe.d/vfio.conf /usr/bin/vfio-pci-override.sh)&lt;br /&gt;
&lt;br /&gt;
initramfs を再生成して再起動してください:&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブート GPU をゲストにパススルー ===&lt;br /&gt;
PCI パススルーをするときに {{ic|boot_vga}} とマークされた GPU は特殊なケースになります。ブートメッセージや BIOS の設定メニューなどを表示するのに BIOS がその GPU を必要とするためです。ブート GPU はパススルー時に [https://www.redhat.com/archives/vfio-users/2016-May/msg00224.html 自由に改造できる VGA ブート ROM のコピー] を作成します。システムから認識されるのは改造されたコピーになり、パススルードライバーによって不正な GPU として拒否される可能性があります。一般的には BIOS の設定でブート GPU を変更して代わりにホスト GPU を使用するか、あるいはそれが不可能な場合、マシンのホストとゲストのカードを交換することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
=== IOMMU グループのバイパス (ACS 上書きパッチ) ===&lt;br /&gt;
&lt;br /&gt;
パススルーしたくない PCI デバイスもグループに入ってしまっている場合、Alex Williamson の ACS override パッチを使うことでデバイスを分離できます。その場合は [http://vfio.blogspot.com/2014/08/iommu-groups-inside-and-out.html 危険性] を承知してください。&lt;br /&gt;
&lt;br /&gt;
パッチが適用されたカーネルが必要になります。{{AUR|linux-vfio}} パッケージでカーネルをインストールするのが一番簡単です。&lt;br /&gt;
&lt;br /&gt;
さらに、ACS override パッチはカーネルのコマンドラインオプションで有効にしなければなりません。パッチファイルは以下のドキュメントを追加します:&lt;br /&gt;
&lt;br /&gt;
 pcie_acs_override =&lt;br /&gt;
         [PCIE] Override missing PCIe ACS support for:&lt;br /&gt;
     downstream&lt;br /&gt;
         All downstream ports - full ACS capabilties&lt;br /&gt;
     multifunction&lt;br /&gt;
         All multifunction devices - multifunction ACS subset&lt;br /&gt;
     id:nnnn:nnnn&lt;br /&gt;
         Specfic device - full ACS capabilities&lt;br /&gt;
         Specified as vid:did (vendor/device ID) in hex&lt;br /&gt;
&lt;br /&gt;
通常は {{ic|pcie_acs_override&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;downstream}} オプションで上手くいきます。&lt;br /&gt;
&lt;br /&gt;
インストールと設定が終わったら、[[カーネルパラメータ|ブートローダーのカーネルパラメータ]]を再設定して {{ic|pcie_acs_override&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;}} オプションが有効になった状態で新しいカーネルをロードするようにしてください。&lt;br /&gt;
&lt;br /&gt;
== QEMU で libvirt を使わない ==&lt;br /&gt;
&lt;br /&gt;
libvirt を使って仮想マシンをセットアップするかわりに、QEMU コマンドにカスタムパラメータを付けるだけで PCI パススルーを使用するように VM を起動できます。スクリプトによる設定などで有用です。&lt;br /&gt;
&lt;br /&gt;
[[#IOMMU のセットアップ]]と[[#GPU の分離]]を行ってから、[[QEMU]] の記事に従って仮想環境をセットアップして、[[QEMU#KVM を有効にする|KVM を有効]]にして {{ic|1=-device vfio-pci,host=07:00.0}} フラグを使ってください。識別子の (07:00.0) は GPU を分離するときに使用した実際のデバイスの ID に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
OVMF ファームウェアを利用するために、{{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}} パッケージをインストールして、{{ic|/usr/share/ovmf/x64/OVMF_VARS.fd}} から {{ic|/tmp/MY_VARS.fd}} など一時的なディレクトリに UEFI 変数をコピーして QEMU コマンドに以下のパラメータを追加して OVMF のパスを指定します (パラメータの順序は重要です):&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=-drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/x64/OVMF_CODE.fd}} - OVMF ファームウェアバイナリを指定、readonly オプションに注意してください。&lt;br /&gt;
* {{ic|1=-drive if=pflash,format=raw,file=/tmp/MY_VARS.fd}} - 変数のパスを指定。&lt;br /&gt;
&lt;br /&gt;
{{Note|OVMF の代わりに QEMU のデフォルトである SeaBIOS を使うこともできますが、パススルーの設定で問題が発生することがあるため推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
QEMU の記事を読んで [[QEMU#virtio ドライバーのインストール|virtio ドライバー]]の使用などパフォーマンスを向上させることができる設定を調べることを推奨します。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|1=-cpu host,kvm=off}} パラメータを使ってホストの CPU モデル情報を VM に渡して Nvidia などメーカーのデバイスドライバーから仮想環境でないと認識させる必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
==他のデバイスのパススルー==&lt;br /&gt;
===USB コントローラ===&lt;br /&gt;
マザーボードに接続された複数の USB コントローラが複数のグループにマッピングされている場合、USB デバイスの代わりに USB コントローラをパススルーすることができます。個別の USB デバイスではなくコントローラをパススルーすることには以下の利点があります:&lt;br /&gt;
&lt;br /&gt;
* 特定の操作 (スマートフォンのアップデートなど) でデバイスが切断されたり ID が変わったりしても、仮想マシンから突然認識されなくなることはありません。&lt;br /&gt;
* コントローラによって管理されている USB 端子を VM が直接扱うため、デバイスを接続・切断してもハイパーバイザに通知する必要がありません。&lt;br /&gt;
* VM を起動したときにゲストにパススルーする USB デバイスがなくなってしまっていても Libvirt はエラーを出力しません。&lt;br /&gt;
&lt;br /&gt;
GPU と違って、大抵の USB コントローラのドライバーでは VM で使用するのに特殊な設定を必要としません。副作用を起こさずにホストとゲストの間で制御を受け渡すことができます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB コントローラがリセットに対応していることを確認してください。[[#リセットに対応していないデバイスのパススルー]]を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを使うことでコントローラや端子とデバイスがどのように PCI デバイスと割り当てられているか確認することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ &amp;lt;nowiki&amp;gt;for usb_ctrl in $(find /sys/bus/usb/devices/usb* -maxdepth 0 -type l); do pci_path=&amp;quot;$(dirname &amp;quot;$(realpath &amp;quot;${usb_ctrl}&amp;quot;)&amp;quot;)&amp;quot;; echo &amp;quot;Bus $(cat &amp;quot;${usb_ctrl}/busnum&amp;quot;) --&amp;gt; $(basename $pci_path) (IOMMU group $(basename $(realpath $pci_path/iommu_group)))&amp;quot;; lsusb -s &amp;quot;$(cat &amp;quot;${usb_ctrl}/busnum&amp;quot;):&amp;quot;; echo; done&amp;lt;/nowiki&amp;gt;|&lt;br /&gt;
Bus 1 --&amp;gt; 0000:00:1a.0 (IOMMU group 4)&lt;br /&gt;
Bus 001 Device 004: ID 04f2:b217 Chicony Electronics Co., Ltd Lenovo Integrated Camera (0.3MP)&lt;br /&gt;
Bus 001 Device 007: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]&lt;br /&gt;
Bus 001 Device 008: ID 0781:5530 SanDisk Corp. Cruzer&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;
Bus 2 --&amp;gt; 0000:00:1d.0 (IOMMU group 9)&lt;br /&gt;
Bus 002 Device 006: ID 0451:e012 Texas Instruments, Inc. TI-Nspire Calculator&lt;br /&gt;
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub}}&lt;br /&gt;
&lt;br /&gt;
上記のノートパソコンには2つの USB コントローラによる3つの USB ポートがあり、それぞれに IOMMU グループが存在します。例として Bus 001 はひとつの USB ポートを管理していますが (SanDisk の USB ペンドライブが接続されています)、内蔵ウェブカメラや bluetooth カードなど内部デバイスも管理されています。一方 Bus 002 は接続されている電卓以外は何も管理していません。3つ目のポートは空で、リスト上には表示されていませんが、実際は Bus 002 によって管理されています。&lt;br /&gt;
&lt;br /&gt;
様々なデバイスを接続してみてどのコントローラがどのポートを管理しているか判断して、どのコントローラをパススルーするか決めたら、ゲスト設定の VM によって制御する PCI ホストデバイスのリストにコントローラを追加してください。他の設定は不要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|USB コントローラがリセットをサポートしていないか、独立したグループにないか、もしくはパススルーできない場合でも、[[udev]] ルールを通じて同様の結果を達成することが可能です。特定の USB ポートに接続された任意のデバイスを仮想マシンに自動的に接続できるようにする [https://github.com/olavmrk/usb-libvirt-hotplug] を参照して下さい。}}&lt;br /&gt;
&lt;br /&gt;
===PulseAudio で仮想マシンの音声出力をホストにパススルー===&lt;br /&gt;
libvirt を使うことで仮想マシンの音声出力をアプリケーションとしてホストに転送することが可能です。複数の音声ストリームをホストの出力に転送でき、パススルーをサポートしていない音声出力デバイスで使うことができます。転送するには [[PulseAudio]] が必要です。&lt;br /&gt;
&lt;br /&gt;
まず、{{ic|&amp;lt;nowiki&amp;gt;#user = &amp;quot;&amp;quot;&amp;lt;/nowiki&amp;gt;}} 行のコメントを削除してください。それからクォートの中にユーザー名を入力してください。これで QEMU はユーザーの PulseAudio ストリームを転送するようになります。&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|&lt;br /&gt;
user &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; &amp;quot;example&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
次に、libvirt の設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
以下の行を:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のように変更してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039; xmlns:qemu&amp;lt;nowiki&amp;gt;=&#039;http://libvirt.org/schemas/domain/qemu/1.0&#039;&amp;lt;/nowiki&amp;gt;&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして libvirt の xml ファイルの末尾に QEMU PulseAudio 環境変数を設定してください。&lt;br /&gt;
&lt;br /&gt;
以下の行を:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
    &amp;lt;/devices&amp;gt;&lt;br /&gt;
   &amp;lt;/domain&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のように変更してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
    &amp;lt;/devices&amp;gt;&lt;br /&gt;
      &amp;lt;qemu:commandline&amp;gt;&lt;br /&gt;
        &amp;lt;qemu:env name&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;QEMU_AUDIO_DRV&#039; value&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pa&#039;/&amp;gt;&lt;br /&gt;
        &amp;lt;qemu:env name&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;QEMU_PA_SERVER&#039; value&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;/run/user/1000/pulse/native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;/qemu:commandline&amp;gt;&lt;br /&gt;
 &amp;lt;/domain&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
user ディレクトリの 1000 はあなたが使用しているユーザーの uid に置き換えてください ({{ic|id}} コマンドを実行することで確認できます)。先に進む前にファイルを保存して終了しないと変更が登録されません。終了後に {{ic|&amp;lt;nowiki&amp;gt;Domain [vmname] XML configuration edited.&amp;lt;/nowiki&amp;gt;}} というメッセージが表示されれば、変更が適用されたということです。&lt;br /&gt;
&lt;br /&gt;
設定したら {{ic|libvirtd}} サービスと {{ic|pulseaudio.service}} の[[Systemd/ユーザー|ユーザーサービス]]を再起動してください。&lt;br /&gt;
&lt;br /&gt;
これで仮想マシンの音声出力はアプリケーションとしてホストに転送されるようになります。{{Pkg|pavucontrol}} アプリケーションを使うことで出力デバイスを制御できます。Windows ゲストの場合、[[#ビデオカードの HDMI 出力からの音声がおかしい|メッセージシグナル割り込み]]を使用しないとノイズが発生するので注意してください。&lt;br /&gt;
&lt;br /&gt;
==== QEMU 3.0 オーディオの変更 ====&lt;br /&gt;
&lt;br /&gt;
QEMU 3.0 以降では、オーディオパッチの一部がマージされました ([https://www.reddit.com/r/VFIO/comments/97iuov/qemu_30_released/e49wmyd/ reddit リンク])。パッチのいくつかはまだ正式に上流にマージされていないため、 {{AUR|qemu-patched}}{{Broken package link|パッケージが存在しません}} パッケージにはオーディオパッチが複数含まれています。&lt;br /&gt;
&lt;br /&gt;
新しいコードパスを使用するにはあなたの VM のセットアップに応じてチップセットを、例えば {{ic|pc-q35-3.0}} または {{ic|pc-i440fx-3.0}} (qemu 3.0 インストール後) に変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;x86_64&#039; machine&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pc-q35-3.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;x86_64&#039; machine&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pc-i440fx-3.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{AUR|qemu-patched}}{{Broken package link|パッケージが存在しません}} のコンパイル時間を早めるには {{ic|1=--target-list=x86_64-softmmu}} を使って qemu の x86_64 ゲストサポートのみコンパイルします。&lt;br /&gt;
* Qemu 3.0 以降で PulseAudio をユーザーとして実行している場合に {{ic|1=/etc/libvirt/qemu.conf}} で {{ic|1= nographics_allow_host_audio = 1}} を有効にしたときは、上記の XML 引数 {{ic|qemu:env}} は必要&#039;&#039;ありません&#039;&#039;。QEMU/Libvirt で別のユーザーを使用する場合は、{{ic|QEMU_PA_SERVER}} 変数を維持する必要があります。そうしないとアクセス許可エラーが発生します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====リセットに対応していないデバイスのパススルー====&lt;br /&gt;
仮想マシンのシャットダウン時、ゲストが使用していたデバイスは全てシャットダウンの準備時に OS によって deinitialize されます。この状態ではデバイスは機能しなくなり、通常通りに機能させるには電源を入れ直さなくてはなりません。Linux は独自にパワーサイクルを処理しますが、デバイスのリセット方法がわからない場合、無効状態のままになりデバイスが利用不可能になります。Libvirt と Qemu はどちらも仮想マシンを完全に停止する前に全てのホスト PCI デバイスが再接続できる状態になっていることを求めるため、デバイスがリセットできない状態になると、&amp;quot;Shutting down&amp;quot; 状態でフリーズしてホストマシンを再起動するまで仮想マシンを再起動できなくなってしまいます。そのため、カーネルによってリセットが可能な PCI デバイスのみパススルーすることを推奨します。PCI デバイスの sysfs ノードに {{ic|reset}} ファイルが存在するかどうかでリセット可能かどうか確認できます (例: {{ic|/sys/bus/pci/devices/0000:00:1a.0/reset}})。&lt;br /&gt;
&lt;br /&gt;
以下の bash コマンドを実行するとどのデバイスがリセットできてどのデバイスがリセットできないか表示されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;for iommu_group in $(find /sys/kernel/iommu_groups/ -maxdepth 1 -mindepth 1 -type d);do echo &amp;quot;IOMMU group $(basename &amp;quot;$iommu_group&amp;quot;)&amp;quot;; for device in $(\ls -1 &amp;quot;$iommu_group&amp;quot;/devices/); do if [[ -e &amp;quot;$iommu_group&amp;quot;/devices/&amp;quot;$device&amp;quot;/reset ]]; then echo -n &amp;quot;[RESET]&amp;quot;; fi; echo -n $&#039;\t&#039;;lspci -nns &amp;quot;$device&amp;quot;; done; done&amp;lt;/nowiki&amp;gt;|&lt;br /&gt;
IOMMU group 0&lt;br /&gt;
	00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v2/Ivy Bridge DRAM Controller [8086:0158] (rev 09)&lt;br /&gt;
IOMMU group 1&lt;br /&gt;
	00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0151] (rev 09)&lt;br /&gt;
	01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208 [GeForce GT 720] [10de:1288] (rev a1)&lt;br /&gt;
	01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)&lt;br /&gt;
IOMMU group 2&lt;br /&gt;
	00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)&lt;br /&gt;
IOMMU group 4&lt;br /&gt;
[RESET]	00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)&lt;br /&gt;
IOMMU group 5&lt;br /&gt;
[RESET]	00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)&lt;br /&gt;
IOMMU group 10&lt;br /&gt;
[RESET]	00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)&lt;br /&gt;
IOMMU group 13&lt;br /&gt;
	06:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
	06:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の場合 00:14.0 の xHCI USB コントローラはリセットができないため、仮想マシンが正しくシャットダウンできなくなります。00:1b.0 の内蔵サウンドカードと 00:1a.0 および 00:1d.0 のコントローラはリセット可能であるため問題が起こりません。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
以下で問題が見つけられない場合、[[QEMU#トラブルシューティング]]も見てください。&lt;br /&gt;
&lt;br /&gt;
===Windows の仮想マシンに NVIDIA の GPU をパススルーした場合に &amp;quot;Error 43 : Driver failed to load&amp;quot;===&lt;br /&gt;
{{Note|以下の設定により Nvidia ドライバーによって起動時に SYSTEM_THREAD_EXCEPTION_NOT_HANDLED でクラッシュする問題も解決します。}}&lt;br /&gt;
&lt;br /&gt;
バージョン 337.88 から、Windows の Nvidia ドライバーはハイパーバイザが動作しているかどうかを確認して、動作していることを認識すると Windows のデバイスマネージャに Error 43 を吐くようになりました。QEMU 2.5.0 と libvirt 1.3.3 以上では、ハイパーバイザの vendor_id を偽装することができ、Nvidia ドライバーを騙してロードさせることができます。QEMU コマンドの cpu パラメータに {{ic|&amp;lt;nowiki&amp;gt;hv_vendor_id=whatever&amp;lt;/nowiki&amp;gt;}} を追加するか、libvirt のドメイン設定に以下の行を追加するだけです。ID は12文字ちょうどの英数字 (例: &#039;1234567890ab&#039;) に設定してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vendor_id state=&#039;on&#039; value=&#039;whatever&#039;/&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;kvm&amp;gt;&lt;br /&gt;
	&amp;lt;hidden state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/kvm&amp;gt;&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
古いバージョンの QEMU や libvirt を使用している場合は、ハイパーバイザの拡張を無効化する必要があり、かなり性能が落ちてしまいます。libvirt のドメイン設定ファイルに以下を記述してください:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		&amp;lt;relaxed state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;vapic state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;spinlocks state=&#039;on&#039; retries=&#039;8191&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
	&amp;lt;timer name=&#039;hypervclock&#039; present=&#039;yes&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
	&amp;lt;timer name=&#039;hypervclock&#039; present=&#039;no&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;kvm&amp;gt;&lt;br /&gt;
	&amp;lt;hidden state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/kvm&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		&amp;lt;relaxed state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;vapic state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;spinlocks state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VM を起動した後に dmesg に &amp;quot;BAR 3: can&#039;t reserve [mem]&amp;quot; エラーが表示される====&lt;br /&gt;
&lt;br /&gt;
上記の方法を試してもコード 43 が発生する場合、dmesg にメモリ予約エラーが記録されていないか確認してください:&lt;br /&gt;
&lt;br /&gt;
 vfio-pci 0000:09:00.0: BAR 3: can&#039;t reserve [mem 0xf0000000-0xf1ffffff 64bit pref]&lt;br /&gt;
&lt;br /&gt;
上記のようなメッセージが出力される場合、グラフィックカードを接続している PCI ブリッジを確認してください。以下のコマンドでデバイスツリーを確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ lspci -t&lt;br /&gt;
&lt;br /&gt;
VM を起動する前に以下のコマンドを実行してください (ID は上記のコマンドで確認できた実際の ID に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/bus/pci/devices/0000\:00\:03.1/remove&lt;br /&gt;
 # echo 1 &amp;gt; /sys/bus/pci/rescan&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.linuxquestions.org/questions/linux-kernel-70/kernel-fails-to-assign-memory-to-pcie-device-4175487043/ こちらの記事] を参照。&lt;br /&gt;
&lt;br /&gt;
{{Note|おそらく {{ic|video&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;efifb:off}} [[カーネルパラメータ]]の設定も必要です [https://pve.proxmox.com/wiki/Pci_passthrough#BAR_3:_can.27t_reserve_.5Bmem.5D_error]。}}&lt;br /&gt;
&lt;br /&gt;
===CPU 例外によってクラッシュが発生する===&lt;br /&gt;
[[QEMU#特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する]]を参照。&lt;br /&gt;
&lt;br /&gt;
===Windows の仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot;===&lt;br /&gt;
[[QEMU#Windows の仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot;]] を参照。&lt;br /&gt;
&lt;br /&gt;
===ビデオカードの HDMI 出力からの音声がおかしい===&lt;br /&gt;
ビデオカードの HDMI 端子を使用したときに、ユーザーによっては仮想マシンの音声出力が遅れたり音が割れたりすることがあります。大抵の場合、グラフィックも遅れるようになります。解決方法としてはデフォルトの割り込み方法 (Line-Based Interrupts) の代わりに MSI (Message Signaled-Based Interrupts) を有効にする方法があります。&lt;br /&gt;
&lt;br /&gt;
MSI がサポートされているか・有効になっているか確認するには、以下のコマンドを root で実行してください:&lt;br /&gt;
 # lspci -vs $device | grep &#039;MSI:&#039;&lt;br /&gt;
`$device` はカードのアドレスに置き換えてください (例: `01:00.0`)。&lt;br /&gt;
&lt;br /&gt;
出力は以下のようになります:&lt;br /&gt;
 Capabilities: [60] MSI: Enable&#039;&#039;&#039;-&#039;&#039;&#039; Count=1/1 Maskable- 64bit+&lt;br /&gt;
&lt;br /&gt;
{{ic|Enable}} の後ろの {{ic|-}} は MSI がサポートされおり VM によって使われていないことを意味します。{{ic|+}} であれば VM によって使われています。&lt;br /&gt;
&lt;br /&gt;
有効にする手順は非常に複雑です。[https://forums.guru3d.com/showthread.php?t=378044 こちら] に設定の手順と概要が載っています。&lt;br /&gt;
&lt;br /&gt;
他にも [http://lime-technology.com/wiki/index.php/UnRAID_6/VM_Guest_Support#Enable_MSI_for_Interrupts_to_Fix_HDMI_Audio_Support lime-technology の wiki] や [http://vfio.blogspot.it/2014/09/vfio-interrupts-and-how-to-coax-windows.html VFIO tips and tricks] の記事にヒントが載っています。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/CHEF-KOCH/MSI-utility MSI Utility (FOSS Version 2)] という UI ツールが64ビットの Windows 10 で動作しこの手順を簡素化します。&lt;br /&gt;
&lt;br /&gt;
nVidia カードの 0 function の MSI を有効にするだけでは問題が解決しない場合 ({{ic|01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1) (prog-if 00 [VGA controller])}})、他の function の MSI も有効にする必要があります ({{ic|01:00.1 Audio device: NVIDIA Corporation Device 0fba (rev a1)}})。&lt;br /&gt;
&lt;br /&gt;
=== intel_iommu を有効にしたときにホスト側で HDMI から音声が出力されない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|intel_iommu}} を有効にしたときにホストの Intel GPU の HDMI 出力デバイスが使えなくなった場合、{{ic|igfx_off}} (i.e. {{ic|intel_iommu&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;on,igfx_off}}) オプションを設定することで音声が出力できるようになることがあります。{{ic|igfx_off}} の設定について詳しくは [https://www.kernel.org/doc/Documentation/Intel-IOMMU.txt Intel-IOMMU.txt] の {{ic|Graphics Problems?}} を読んでください。&lt;br /&gt;
&lt;br /&gt;
=== vfio_pci を有効化したあとに X が起動しない ===&lt;br /&gt;
&lt;br /&gt;
ホスト GPU がセカンダリ GPU として認識されている場合、ゲスト GPU のドライバーをロードしようとしたときに X がエラーを起こします。Xorg の設定でホスト GPU の BusID を指定することで解決します。BusID  は lspci や Xorg のログで確認できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/10-intel.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier &amp;quot;Intel GPU&amp;quot;&lt;br /&gt;
        Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
        BusID  &amp;quot;PCI:0:2:0&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.redhat.com/archives/vfio-users/2016-August/msg00025.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Chromium が内蔵グラフィックをアクセラレーションに使わない ===&lt;br /&gt;
&lt;br /&gt;
Chromium はシステム内の GPU をできるかぎり多く検出してから使用する GPU を選択します (大抵はディスクリートの NVIDIA/AMD グラフィック)。使用する GPU は PCI デバイスによって選択されます。OpenGL レンダラが利用できるかどうかは考慮されません。結果として Chromium は内蔵 GPU を無視して、ゲスト VM が動作していてホスト環境から GPU が使えなくなっているかどうかに関係なく、{{ic|vfio-pci}} ドライバーに紐付けられた専用 GPU を使用しようとすることがあります。その場合 GPU が使えないためにソフトウェアレンダリングが使われることになります (CPU の負担が高まり、動画の再生が途切れがちになったりスクロールがスムーズに機能しなくなったりします)。&lt;br /&gt;
&lt;br /&gt;
解決方法は [[Chromium 設定#特定の GPU の使用を強制する]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== VM がひとつしかコアを使わない ===&lt;br /&gt;
&lt;br /&gt;
IOMMU を有効にしてコアのカウントを 1 よりも大きくしても、VM が使用する CPU コアとスレッドがひとつしか現れないことがあります。解決するには {{ic|virt-manager}} で &amp;quot;Manually set CPU topology&amp;quot; を有効にして使用したい CPU ソケット・コア・スレッド数を設定してください。&amp;quot;Threads&amp;quot; は合計スレッド数ではなく各 CPU ごとのスレッド数なので注意してください。&lt;br /&gt;
&lt;br /&gt;
=== パススルーは機能しているのに出力が表示されない ===&lt;br /&gt;
&lt;br /&gt;
virt-manager を使用している場合、仮想マシンで UEFI ファームウェアが選択されていることを確認してください。また、仮想マシンに適切なデバイスが渡されていることも確認してください。&lt;br /&gt;
&lt;br /&gt;
=== virt-manager のパーミッション問題 ===&lt;br /&gt;
&lt;br /&gt;
virt-manager でパーミッションエラーが発生する場合、以下を {{ic|/etc/libvirt/qemu.conf}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 group=&amp;quot;kvm&amp;quot;&lt;br /&gt;
 user=&amp;quot;&#039;&#039;user&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
上記で解決しない場合は使用しているユーザーアカウントを {{ic|kvm}} と {{ic|libvirt}} [[グループ]]に追加してください。&lt;br /&gt;
&lt;br /&gt;
=== VM シャットダウン後にホストがロックアップする ===&lt;br /&gt;
&lt;br /&gt;
Windows10 ゲストを実行している場合に、VM を長時間実行した後、ホストの複数の CPU コアがロックアップするという問題が発生することがあります ([https://bbs.archlinux.org/viewtopic.php?id=206050&amp;amp;p=2]を参照)。この問題を解決するには、ゲストにパススルーした GPU でメッセージシグナル割り込みを有効にしてみてください。有効化する方法のガイドは [https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts.378044/] にあります。&lt;br /&gt;
&lt;br /&gt;
=== スリープ時にゲストが実行されているとホストがロックアップする ===&lt;br /&gt;
&lt;br /&gt;
VFIO を有効にした仮想マシンを起動したまま、スリープ/復帰を行おうとすると不安定になることがあり、ホストマシンをシャットダウンしようとするとロックアップする既知の問題があります。以下の libvirt フックスクリプトと systemd ユニットを使用して、ゲストを実行している間にホストがスリープ状態になるのを防止することで問題を避けることができます。フックファイルの動作には実行権限が必要です。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/hooks/qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
OBJECT=&amp;quot;$1&amp;quot;&lt;br /&gt;
OPERATION=&amp;quot;$2&amp;quot;&lt;br /&gt;
SUBOPERATION=&amp;quot;$3&amp;quot;&lt;br /&gt;
EXTRA_ARG=&amp;quot;$4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$OPERATION&amp;quot; in&lt;br /&gt;
        &amp;quot;prepare&amp;quot;)&lt;br /&gt;
                systemctl start libvirt-nosleep@&amp;quot;$OBJECT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        &amp;quot;release&amp;quot;)&lt;br /&gt;
                systemctl stop libvirt-nosleep@&amp;quot;$OBJECT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/libvirt-nosleep@.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Preventing sleep while libvirt domain &amp;quot;%i&amp;quot; is running&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/bin/systemd-inhibit --what=sleep --why=&amp;quot;Libvirt domain \&amp;quot;%i\&amp;quot; is running&amp;quot; --who=%U --mode=block sleep infinity&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== ovmf のアップグレード後にブートできない ===&lt;br /&gt;
ovmf-1:r23112.018432f0ce-1 からアップグレードしたときに起動できなくなった場合、 {{ic|/var/lib/libvirt/qemu/nvram}} にある古い *VARS.fd ファイルを削除する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # mv /var/lib/libvirt/qemu/nvram/vmname_VARS.fd /var/lib/libvirt/qemu/nvram/vmname_VARS.fd.old&lt;br /&gt;
&lt;br /&gt;
詳しくは {{Bug|57825}} を参照。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?id=162768 Arch Linux フォーラムの議論] | [https://archive.is/kZYMt アーカイブリンク]&lt;br /&gt;
* [https://docs.google.com/spreadsheet/ccc?key=0Aryg5nO-kBebdFozaW9tUWdVd2VHM0lvck95TUlpMlE ユーザーによるハードウェア互換リスト]&lt;br /&gt;
* [https://pastebin.com/rcnUZCv7 https://www.youtube.com/watch?v=37D2bRsthfI のサンプルスクリプト]&lt;br /&gt;
* [https://vfio.blogspot.com/ PCI パススルーの完全なチュートリアル]&lt;br /&gt;
* [https://www.redhat.com/archives/vfio-users/ VFIO users メーリングリスト]&lt;br /&gt;
* [ircs://chat.freenode.net/vfio-users #vfio-users on freenode]&lt;br /&gt;
* [https://www.youtube.com/watch?v=aLeWg11ZBn0 YouTube: Level1Linux - Ryzen による GPU パススルー]&lt;br /&gt;
* [https://www.reddit.com/r/VFIO /r/VFIO: VFIOについての subreddit]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Mpv&amp;diff=27620</id>
		<title>Mpv</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Mpv&amp;diff=27620"/>
		<updated>2022-10-06T06:20:57Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: config の例が翻訳されてしまっているものを修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:ビデオ]]&lt;br /&gt;
[[Category:オーディオ]]&lt;br /&gt;
[[Category:ストリーミング]]&lt;br /&gt;
[[en:Mpv]]&lt;br /&gt;
[[ru:Mpv]]&lt;br /&gt;
[[zh-hans:Mpv]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|MPlayer}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://mpv.io/ mpv] は [[MPlayer]] と MPlayer2 がベースの動画プレイヤーです。幅広いフォーマットの動画ファイル、オーディオ・ビデオコーデック、字幕タイプをサポートしています。&#039;&#039;mpv&#039;&#039; と前出のプレイヤーとの違いは [https://github.com/mpv-player/mpv/blob/master/DOCS/mplayer-changes.rst このページ] で包括的に (一部不完全ですが) リストアップされています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|mpv}} パッケージを[[インストール]]するか [[Arch User Repository]] から {{AUR|mpv-git}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== フロントエンド ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mpv&#039;&#039; には OSC という名前のすっきりとしたユーザーインターフェイスがあり、マウスを動かした時に表示されます。カジュアルユーザー向けに、他のグラフィカルインターフェイスも存在します:&lt;br /&gt;
&lt;br /&gt;
* {{App|Baka MPlayer|フリーでオープンソース、クロスプラットフォームの、libmpv ベースのマルチメディアプレイヤー。Qt 5 を使用。|http://bakamplayer.u8sand.net/|{{Pkg|baka-mplayer}}, {{AUR|baka-mplayer-git}}}}&lt;br /&gt;
* {{App|bomi|強力で使いやすいマルチメディアプレイヤー (Qt 5)。|https://bomi-player.github.io/|{{AUR|bomi}}, {{AUR|bomi-git}}}}&lt;br /&gt;
* {{App|Celluloid|&#039;&#039;mpv&#039;&#039; のシンプルな GTK フロントエンド。|https://celluloid-player.github.io/|{{AUR|celluloid}}, {{AUR|celluloid-git}}}}&lt;br /&gt;
* {{App|Media Player Classic Qute Theater|Qt で [[Wikipedia:ja:Media Player Classic|Media Player Classic]] を再実装したクローン。|https://github.com/cmdrkotori/mpc-qt|{{AUR|mpc-qt-git}}}}&lt;br /&gt;
* {{App|[[Wikipedia:SMPlayer|SMPlayer]]|CSS テーマや YouTube 統合などの機能が追加された Qt マルチメディアプレイヤー (Qt 5)。|http://smplayer.sourceforge.net/|{{Pkg|smplayer}}}}&lt;br /&gt;
* {{App|xt7-player-mpv|フィルターやドライバー、ladspa プラグインのサポート、ライブラリ・プレイリストの管理、YouTube、オンラインラジオ、ポッドキャスト、[[DVB-T]] などの豊富な設定オプションが存在する mpv の Qt/Gambas による GUI。|https://github.com/kokoko3k/xt7-player-mpv|{{AUR|xt7-player-mpv-git}}}}&lt;br /&gt;
&lt;br /&gt;
{{Note|CMPlayer/&#039;&#039;bomi&#039;&#039; パッケージには内部に &#039;&#039;mpv&#039;&#039; が入っています。}}&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Mpv の設定は {{ic|mpv.conf}} (設定) と {{ic|input.conf}} (キーバインド) と {{ic|lua-settings/osc.conf}} (オンスクリーンディスプレイ) ファイルから読み込まれます。オプションのリストは、man ページや github にあるドキュメントを参照してください: {{man|1|mpv|url=https://mpv.io/manual/master/}} または [https://github.com/mpv-player/mpv/tree/master/DOCS/man GitHub ドキュメント]。&lt;br /&gt;
&lt;br /&gt;
{{ic|XDG_CONFIG_HOME}} [[環境変数]]が設定されてない場合、ユーザーの設定ファイルは {{ic|~/.config/mpv}} フォルダから読み込まれます。全ユーザー共通の設定は {{ic|/etc/mpv}} フォルダから読み込まれます。&lt;br /&gt;
&lt;br /&gt;
=== 一般設定 ===&lt;br /&gt;
&lt;br /&gt;
次の設定を {{ic|~/.config/mpv/mpv.conf}} に追加します。&lt;br /&gt;
&lt;br /&gt;
==== 字幕の設定 ====&lt;br /&gt;
&lt;br /&gt;
ファジー検索を有効にする。&lt;br /&gt;
 sub-auto=fuzzy&lt;br /&gt;
&lt;br /&gt;
字幕を太字にして読みやすくします。&lt;br /&gt;
 sub-bold=yes&lt;br /&gt;
&lt;br /&gt;
==== 高度な設定 ====&lt;br /&gt;
&lt;br /&gt;
これにより、{{ic|1=vo=gpu}} をビデオ出力として使用するときに高品質の OpenGL オプションが読み込まれます(デフォルト)。ほとんどのユーザーは問題なくこれらを実行できますが、実行できない少数のユーザーに問題が発生しないように、デフォルトでは有効になっていません。&lt;br /&gt;
&lt;br /&gt;
 profile=gpu-hq&lt;br /&gt;
&lt;br /&gt;
{{ic|gpu-hq}} プロファイルは、中程度の品質と速度を実現するために、デフォルトで {{ic|spline36}} スケーリングフィルターに設定されています。最高品質のビデオ出力を得るには、ハードウェアで実行できる場合は {{ic|ewa_lanczossharp}} を使用する必要があるとマニュアルに記載されています。&lt;br /&gt;
&lt;br /&gt;
 profile=gpu-hq&lt;br /&gt;
 scale=ewa_lanczossharp&lt;br /&gt;
 cscale=ewa_lanczossharp&lt;br /&gt;
&lt;br /&gt;
これらの最後の3つのオプションは、もう少し複雑です。最初のオプションでは、オーディオとビデオが同期しなくなった場合、ビデオフレームをドロップする代わりに、オーディオをリサンプリングします(オーディオピッチのわずかな変化は、ドロップされたフレームよりも目立たないことがよくあります)。 mpv wiki には、 [https://github.com/mpv-player/mpv/wiki/Display-synchronization DisplaySynchronization] というタイトルの詳細な記事があります。残りの2つは、フレームの表示方法を変更することで、基本的にディスプレイ上で動きがスムーズに見えるようにし、ソースフレームレートがディスプレイのリフレッシュレートとより良く調和するようにします(実際にビデオを60 fpsに変換するSVPの手法と混同しないでください)。 mpv wiki には、 [https://github.com/mpv-player/mpv/wiki/Interpolation Interpolation] というタイトルの詳細な記事がありますが、一般に &#039;&#039;スムーズモーション&#039;&#039; としても知られています。&lt;br /&gt;
&lt;br /&gt;
 profile=gpu-hq&lt;br /&gt;
 scale=ewa_lanczossharp&lt;br /&gt;
 cscale=ewa_lanczossharp&lt;br /&gt;
 video-sync=display-resample&lt;br /&gt;
 interpolation&lt;br /&gt;
 tscale=oversample&lt;br /&gt;
&lt;br /&gt;
{{Note| [[NVIDIA Optimus]] が使用されている場合、行 {{ic|1=video-sync=display-resample}} により、ビデオが高速化される可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
これ以外にもできることはたくさんありますが、物事はより複雑になり、より強力なビデオカードが必要になります。簡単な概要として、画像でトレーニングされたディープニューラルネットワークを実際に使用するものを含む、エキゾチックなスケーリングとシャープニングの手法を実行する特別なシェーダーをロードすることができます(実世界とアニメーションコンテンツの両方)。これについて詳しくは、 [https://github.com/mpv-player/mpv/wiki mpv wiki]、特に [https://github.com/mpv-player/mpv/wiki/User-Scripts user-shaders のセクション] をご覧ください。&lt;br /&gt;
&lt;br /&gt;
あなたが同様に望ましいと思うかもしれない他のたくさんのオプションもあります。 {{man|1|mpv}} を見る価値があります。コマンドラインから &#039;&#039;mpv&#039;&#039; を実行して、構成に関するエラーメッセージを確認することも役立ちます。&lt;br /&gt;
&lt;br /&gt;
==== カスタムプロファイル ====&lt;br /&gt;
&lt;br /&gt;
{{ic|mpv.conf}} では、基本的に次のような &#039;&#039;オプションのグループ&#039;&#039; である &#039;&#039;プロファイル&#039;&#039; を作成できます。&lt;br /&gt;
&lt;br /&gt;
* ファイルを書き直すことなく、異なる構成をすばやく切り替えることができます。&lt;br /&gt;
* 特別なコンテンツ用の特別なプロファイルを作成します。&lt;br /&gt;
* &#039;&#039;ネスト&#039;&#039; プロファイル。これにより、単純なプロファイルからより複雑な &#039;&#039;プロファイル&#039;&#039; を作成できます。&lt;br /&gt;
&lt;br /&gt;
プロファイルの作成は簡単です。 {{ic|mpv.conf}} の上部の領域はトップレベルと呼ばれ、そこに書き込んだオプションはすべて、&#039;&#039;mpv&#039;&#039; が開始されると有効になります。ただし、名前を角かっこで囲んでプロファイルを定義すると、その下に書き込むすべてのオプション(新しいプロファイルを定義するまで)はそのプロファイルの一部と見なされます。 {{ic|mpv.conf}} の例を次に示します。&lt;br /&gt;
&lt;br /&gt;
 profile=myprofile2            #トップレベルエリア、myprofile2をロード&lt;br /&gt;
 ontop=yes                     #最前面に&lt;br /&gt;
 &lt;br /&gt;
 [myprofile1]                  #シンプルなプロファイル、トップレベルの領域はここで終わります&lt;br /&gt;
 profile-desc=&amp;quot;a profile&amp;quot;      #プロファイルのオプションの説明&lt;br /&gt;
 fs=yes                        #フルスクリーンで開始&lt;br /&gt;
 &lt;br /&gt;
 [myprofile2]                  #別の簡単なプロファイル&lt;br /&gt;
 profile=gpu-hq                #mpv に付属する組み込みプロファイル&lt;br /&gt;
 log-file=~~/log               #ログファイルを書き込む場所を設定します。~~/ translates は ~/.config/mpv に変換されます&lt;br /&gt;
&lt;br /&gt;
トップレベルエリア内には2つの線しかなく、その下に2つの別々のプロファイルが定義されています。 &#039;&#039;mpv&#039;&#039; が開始すると、最初の行が表示され、 {{ic|myprofile2}} にオプションが読み込まれます(つまり、{{ic|gpu-hq}} と {{ic|1=log-file=~~/log}})最後に {{ic|1=ontop=yes}} をロードし、起動を終了します。 {{ic|myprofile1}} は最上位領域で呼び出されないため、ロードされないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
または、次のコマンドラインから &#039;&#039;mpv&#039;&#039; を呼び出すこともできます。&lt;br /&gt;
&lt;br /&gt;
 $ mpv --profile=myprofile1 video.mkv&lt;br /&gt;
&lt;br /&gt;
また、{{ic|myprofile1}} のオプションを除くすべてのオプションを無視します。&lt;br /&gt;
&lt;br /&gt;
=== キーバインディング ===&lt;br /&gt;
&lt;br /&gt;
キーの割り当ては、{{ic|/usr/share/doc/mpv/input.conf}} の例と [https://mpv.io/manual/master/#command-interface manual] の関連するセクションを参考にして下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.config/mpv/input.conf}} に次の例を追加します。&lt;br /&gt;
&lt;br /&gt;
 shift+s         screenshot each-frame&lt;br /&gt;
 Shift+UP        seek  600&lt;br /&gt;
 Shift+DOWN      seek -600&lt;br /&gt;
 =               cycle video-unscaled&lt;br /&gt;
 -               cycle-values window-scale 2 3 1 .5&lt;br /&gt;
 WHEEL_UP        add volume 5&lt;br /&gt;
 WHEEL_DOWN      add volume -5&lt;br /&gt;
 WHEEL_LEFT      ignore&lt;br /&gt;
 WHEEL_RIGHT     ignore&lt;br /&gt;
 Alt+RIGHT       add video-rotate 90&lt;br /&gt;
 Alt+LEFT        add video-rotate -90&lt;br /&gt;
 Alt+-           add video-zoom -0.25&lt;br /&gt;
 Alt+=           add video-zoom 0.25&lt;br /&gt;
 Alt+j           add video-pan-x -0.05&lt;br /&gt;
 Alt+l           add video-pan-x 0.05&lt;br /&gt;
 Alt+i           add video-pan-y 0.05&lt;br /&gt;
 Alt+k           add video-pan-y -0.05&lt;br /&gt;
 Alt+BS          set video-zoom 0; set video-pan-x 0; set video-pan-y 0&lt;br /&gt;
&lt;br /&gt;
mpv で MPC-HC キーバインディングを再現する試みについては、 [https://github.com/dragons4life/MPC-HC-config-for-MPV/blob/master/input.conf] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== その他の設定ファイル ===&lt;br /&gt;
&lt;br /&gt;
さらに、いくつかの構成ファイルとディレクトリを作成できます。その中には次のものがあります。&lt;br /&gt;
&lt;br /&gt;
* {{ic|~/.config/mpv/script-opts/osc.conf}} は、 [https://mpv.io/manual/master/#on-screen-controller On Screen Controller] を管理します。&lt;br /&gt;
* Lua スクリプト用の {{ic|~/.config/mpv/scripts/&#039;&#039;script-name&#039;&#039;.lua}}。 例については、 [https://github.com/mpv-player/mpv/issues/3500#issuecomment-305646994] を参照してください。&lt;br /&gt;
&lt;br /&gt;
詳細については、https://mpv.io/manual/master/#files を参照してください。&lt;br /&gt;
&lt;br /&gt;
== スクリプト ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mpv&#039;&#039; にはプレイヤーの機能を拡張する [https://github.com/mpv-player/mpv/wiki/User-Scripts 多種多様なスクリプト] があります。そのために、 Lua と JavaScript の両方の内部バインディングがあります (最近追加されました) 。&lt;br /&gt;
&lt;br /&gt;
スクリプトは通常、 {{ic|~/.config/mpv/scripts/}} ディレクトリに配置してインストールします (最初に作成する必要があります) その後、 mpv の起動時に自動的にロードされます &#039;&#039;mpv&#039;&#039; の場合一部のスクリプトには独自のインストール手順と設定手順が付属していますので、必ず確認してください。また、古いスクリプト、壊れたスクリプト、メンテナンスされていないスクリプトもあります。&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
&lt;br /&gt;
JavaScript (ES5 via [https://mujs.com/ MuJS] ) は、2014から mpv スクリプト言語としてサポートされています。現在利用できるのは [https://github.com/mpv-player/mpv/wiki/User-Scripts#javascript a some scripts] のみですが、 [https://github.com/mpv-player/mpv/blob/master/DOCS/man/javascript.rst documentation exists] は独自のものを作りたい人のためのものです。&lt;br /&gt;
&lt;br /&gt;
まず、 mpv {{ic|scripts}} ディレクトリに、拡張子 {{ic|.js}} を持つスクリプトをドロップします。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/mpv/scripts/fullscreen-off-on-pause.js|&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
function onPauseChange (prop, enabled) {&lt;br /&gt;
    if (enabled) {&lt;br /&gt;
        mp.set_property(&#039;fullscreen&#039;, &#039;no&#039;)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mp.observe_property(&#039;pause&#039;, &#039;bool&#039;, onPauseChange)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|require}} を使用して CommonJS モジュールをロードする方法などの詳細については、 [https://github.com/mpv-player/mpv/blob/master/DOCS/man/javascript.rst#commonjs-modules-and-requireid documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
JavaScript のサポートは {{Pkg|mpv}} パッケージだけでなく、 {{AUR|mpv-full}} や {{AUR|mpv-full-git}} などの AUR パッケージでも利用できます。&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
mpv 用の興味深い Lua スクリプトがたくさんあります。独自のスクリプトを作成したい場合は、 [https://github.com/mpv-player/mpv/blob/master/DOCS/man/lua.rst こちら] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== mpv-ytdlAutoFormat ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Samillion/mpv-ytdlautoformat mpv-ytdlautoformat] は、 Youtube や Twitch やあなたが望むドメインの ytdl-format を 480p やあなたが望む品質に自動変更する Lua スクリプトです。&lt;br /&gt;
&lt;br /&gt;
==== mpv-stats ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Argon-/mpv-stats/ mpv-stats] (または単に &#039;&#039;stats&#039;&#039;) は Lua スクリプトで、現在の状態を示す多くのライブ統計を出力します。これは、ハードウェアが構成に対応できることを確認したり、異なる構成を比較したりする場合に非常に便利です。バージョン [https://github.com/mpv-player/mpv/releases/tag/v0.28.0 v0.28.0] 以降、スクリプトは {{Pkg|mpv}} に組み込まれており、 {{ic|i}} キーまたは {{ic|I}} キー  (デフォルト) を使用してオン/オフを切り替えることができます。&lt;br /&gt;
&lt;br /&gt;
==== mpv-webm ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ekisu/mpv-webm mpv-webm] (または単に &#039;&#039;webm&#039;&#039;) は、ビデオを見ながら WebM ファイルを作成できる非常に使いやすい Lua スクリプトです。いくつかの機能が含まれており、追加の依存関係はありません (完全に mpv に依存します)&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
&lt;br /&gt;
==== mpv-mpris ====&lt;br /&gt;
&lt;br /&gt;
C プラグイン [https://github.com/hoyon/mpv-mpris mpv-mpris] を使用すると、プロトコルを介して他のアプリケーションを [https://wiki.archlinux.org/title/MPRIS MPRIS] と統合できます。たとえば、&#039;&#039;mpv-mpris&#039;&#039; がインストールされている場合、 {{pkg|kdeconnect}} は電話がかかってきたときにビデオ再生を自動的に一時停止できます。別の例として、 bluetooth オーディオデバイスのボタン (play\pauseなど) があります。&lt;br /&gt;
&lt;br /&gt;
{{AUR|mpv-mpris}} をインストールし、 Pacman によって表示されるインストール後の手順に従います。&lt;br /&gt;
&lt;br /&gt;
== Vapoursynth ==&lt;br /&gt;
&lt;br /&gt;
Vapoursynth は AviSynth に代わるもので、 Linux で使用でき、 Python スクリプトによるビデオ操作が可能です。 Python スクリプトの Vapoursynths は &#039;&#039;mpv&#039;&#039; のビデオフィルタとして使うことができます。&lt;br /&gt;
&lt;br /&gt;
vapoursynth フィルターを使用するには、 {{Pkg|vapoursynth}} パッケージ (または {{AUR|vapoursynth-git}}) をインストールし、{{ic|--enable-vapoursynth}} ビルドフラグでコンパイルする必要があります。&lt;br /&gt;
&lt;br /&gt;
これは、Vapoursynth をインストールしてから {{AUR|mpv-git}} をインストールする (すでにインストールされている場合は再インストールする) 方が簡単です。 {{AUR|mpv-git}} の configure スクリプトは (インストールされている限り)  Vapoursynth を自動検出し、手動で設定オプションなどを変更することなく自動的に Vapoursynth をサポートしてコンパイルします。&lt;br /&gt;
&lt;br /&gt;
=== SVP 4 Linux (SmoothVideoProject) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.svp-team.com/wiki/Main_Page SmoothVideoProject SVP] は、ビデオを 60fps に変換することで主に知られているプログラムです。無料で、 64bit Linux でフル機能を利用できます (32bit Linux とは互換性がありません) 。&lt;br /&gt;
&lt;br /&gt;
これには3つの主要な機能があり、それぞれを必要に応じて無効または有効にすることができます (モーション補間の使用は強制されません)&lt;br /&gt;
&lt;br /&gt;
# [https://www.svp-team.com/wiki/Manual:FRC Motion interpolation] ([https://www.youtube.com/watch?v=Wjb6CSe4708 youtube video]) -ビデオを 60fps に変換するアルゴリズム。これは、一部の人々が愛し、他の人々が嫌う、いくぶん物議を醸す &#039;&#039;人工的な効果&#039;&#039; を作り出します。残念なことに、このアルゴリズムは完璧ではなく、奇妙な人工的な効果を大量に含んでいます。アルゴリズムは、パフォーマンスまたは品質のいずれかについて (スライダを介して) 調整できます。また、生成されたフレームで実際のフレームを補間するいくつかの人工的な効果削減設定があり、人工的な効果の通知性が低下します。フレームレート検出は自動または手動に設定できます (一部のユーザでは手動でパフォーマンスの問題を解決できるようです)&lt;br /&gt;
# [https://www.svp-team.com/wiki/Manual:Outer_lighting Black bar lighting]  ([https://www.youtube.com/watch?v=yTzTpW3kTBE youtube video]) -イメージのアスペクト比が黒のバーをディスプレイに表示する場合、 SVP は画面上のコンテンツによって生成される &#039;&#039;lights&#039;&#039; で黒のバーを明るくします。ある程度のカスタマイズはできますが、デフォルトはほぼ最適です。&lt;br /&gt;
# [https://www.svp-team.com/wiki/Manual:SVPlight LED ambient lighting control] ([https://www.youtube.com/watch?v=UUM2n-8kIJ8 youtube video]) -テレビに接続されている LED アンビエント照明をコントロールする機能があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=mpv.conf|2=&lt;br /&gt;
[svp]&lt;br /&gt;
input-ipc-server=/tmp/mpvsocket     # Receives input from SVP&lt;br /&gt;
hr-seek-framedrop=no                # Fixes audio desync&lt;br /&gt;
resume-playback=no                  # Not compatible with SVP&lt;br /&gt;
&lt;br /&gt;
# ノイズが治まる場合もあれば、原因となる場合もあります。ノイズがあったら試してみてください。&lt;br /&gt;
#opengl-early-flush=yes}}&lt;br /&gt;
&lt;br /&gt;
SVP を使用するには、そのプロファイルを使用してファイルを開く前に、 SVP プログラムをバックグラウンドで実行しておく必要があります。次のいずれかを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ mpv --profile=svp video.mkv&lt;br /&gt;
&lt;br /&gt;
または、最上位の部分に {{ic|1=profile=svp}} を設定します。&lt;br /&gt;
&lt;br /&gt;
ハードウェアデコードを使用する場合は、通常のデコーダは Vapoursynth と互換性がないため、コピーバックデコーダを使用する必要があります ({{ic|-copy}} で終わる {{ic|hwdec}} オプションを選択します) 例えば、&lt;br /&gt;
&lt;br /&gt;
 hwdec=auto-copy&lt;br /&gt;
 hwdec-codecs=all&lt;br /&gt;
&lt;br /&gt;
いずれにしても、ハードウェアのデコードは、あまり推奨されず、パフォーマンスに大きな違いをもたらすことはありません。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック‎ ==&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアデコード ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mplayer&#039;&#039; や &#039;&#039;mplayer2&#039;&#039; と違って、&#039;&#039;mpv&#039;&#039; は始めから [[VA-API]] と [[VDPAU]] の両方をサポートしています。利用できる設定については [[man ページ]]の {{ic|1=--hwdec=&amp;lt;api&amp;gt;}} オプションのリファレンスを見て下さい。設定を永続化するには、設定ファイルに {{ic|1=hwdec=&#039;&#039;method&#039;&#039;}} という行を追加します。&lt;br /&gt;
&lt;br /&gt;
ハードウェアデコードを使用するとき、ビデオ出力は {{ic|opengl}}, {{ic|opengl-hq}}, {{ic|vdpau}} ({{ic|1=hwdec=vdpau}} を使う場合) のどれかに設定する必要があります。{{ic|1=hwdec=vaapi}} を使用する場合は {{ic|1=profile=opengl}} を使ってください ({{ic|opengl-hq}} を使用した場合、動画を読み込むときに CPU に過度の負担がかかるときがあります [https://github.com/mpv-player/mpv/blob/master/DOCS/man/vo.rst])。ハードウェアデコードが使用できない場合、&#039;&#039;mpv&#039;&#039; は自動的にソフトウェアデコードにフォールバックします。詳細は [https://github.com/mpv-player/mpv/blob/master/DOCS/man/options.rst options.rst] や [https://github.com/mpv-player/mpv/blob/master/DOCS/man/vo.rst vo.rst] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
h264, vc1, wmv3, hevc, mpeg2video, vp9 コーデックではデフォルトでハードウェアデコードが有効になります。ただし、ハードウェアデコードを使用するコーデックを指定したり (例: {{ic|1=--hwdec-codecs=h264,mpeg2video}})、あるいは全てのコーデックでハードウェアデコードを有効にする ({{ic|1=--hwdec-codecs=all}}) こともできます。&lt;br /&gt;
&lt;br /&gt;
=== 高品質なビデオ出力 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|opengl-hq}} プロファイルは mpv の開発者によって事前に設定された様々なオプションを使用する OpenGL 出力です。{{ic|opengl-hq}} を使用するには、設定ファイルで以下のように指定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=~/.config/mpv/mpv.conf|2=profile=opengl-hq}}&lt;br /&gt;
&lt;br /&gt;
{{ic|opengl-hq}} にはデフォルトで GLSL デバンドフィルダーが有効になっており、ユーザーによっては性能が劣化したりコンテンツの見た目が悪くなることがあります。以下の設定によって、フィルターは簡単に無効化できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=~/.config/mpv/mpv.conf|2=	&lt;br /&gt;
profile=opengl-hq&lt;br /&gt;
deband=no}}&lt;br /&gt;
&lt;br /&gt;
=== 停止した位置からの自動レジューム再生 ===&lt;br /&gt;
&lt;br /&gt;
動画の現在の位置を保存して &#039;&#039;mpv&#039;&#039; を終了するデフォルトのキーは {{ic|Shift+q}} です。このキーはキーバインドの設定ファイルに {{ic|quit_watch_later}} を追加することで変更できます。&lt;br /&gt;
&lt;br /&gt;
プレイヤーの終了時に自動的に現在の再生位置を保存したい場合、{{ic|--save-position-on-quit}} フラグを付けて &#039;&#039;mpv&#039;&#039; を起動してください。オプションを永続化させるには、設定ファイルに {{ic|save-position-on-quit}} という行を追加します。&lt;br /&gt;
&lt;br /&gt;
=== ボリュームが小さすぎる ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルに {{ic|1=volume-max=&#039;&#039;value&#039;&#039;}} を設定して {{ic|1=volume-max=600}} など然るべき値にしてください。さらに (または)、{{ic|1=af=acompressor}} で[[wikipedia:ja:コンプレッサー (音響機器)|ダイナミックレンジ圧縮]]を利用することもできます。&lt;br /&gt;
&lt;br /&gt;
=== 複数のアスペクト比のクイック切り替え ===&lt;br /&gt;
&lt;br /&gt;
バージョン 0.8.0 から {{ic|Shift+a}} を使ってアスペクト比を切り替えることができます。&lt;br /&gt;
&lt;br /&gt;
=== アスペクト比を無視する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--keepaspect=&#039;&#039;no&#039;&#039;}} を使うことでアスペクト比を無視できます。オプションを永続的にしたい場合、設定ファイルに {{ic|1=keepaspect=&#039;&#039;no&#039;&#039;}} という行を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== ルートウィンドウに描画 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--wid=0}} を付けて &#039;&#039;mpv&#039;&#039; を実行してください。これによって &#039;&#039;mpv&#039;&#039; はウィンドウ ID が 0 のウィンドウに描画するようになります。&lt;br /&gt;
&lt;br /&gt;
=== GUI を常時表示 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mpv&#039;&#039; をターミナル以外から起動する場合、音声ファイルなどでも、GUI ウィンドウが表示されていたほうが便利です。{{ic|--force-window}} オプションを使うことで常時表示させることができます。&lt;br /&gt;
&lt;br /&gt;
=== 動画ファイルで GUI を非表示にする ===&lt;br /&gt;
&lt;br /&gt;
動画ファイルでは GUI ウィンドウを隠したい場合もあるでしょう。{{ic|--no-video}} オプションを使うことで非表示にできます。&lt;br /&gt;
&lt;br /&gt;
=== 昔の OSC に戻す ===&lt;br /&gt;
&lt;br /&gt;
バージョン 0.21.0 から、mpv のオンスクリーンコントールはボトムバーに置き換えられました。オンスクリーンコントール (OSC) に戻したい場合、[https://github.com/mpv-player/mpv/wiki/FAQ#i-want-the-old-osc-back こちら] に書かれているように mpv の設定を編集してください。&lt;br /&gt;
&lt;br /&gt;
=== ブラウザプラグインとして使う ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|mozplugger}} を利用することで、サポートされているブラウザにおいて &#039;&#039;mpv&#039;&#039; を使って動画を再生することができます。設定の詳細は [[ブラウザプラグイン#MozPlugger]] を見て下さい。[http://isebaro.com/viewtube/?ln=en ViewTube] などのユーザースクリプトと組み合わせて、&#039;&#039;mpv&#039;&#039; を使用してサイトに埋め込まれた動画プレイヤーを置き換えることもできます。&lt;br /&gt;
&lt;br /&gt;
HTTP ストリーミングを使用するときはユーザーエージェントの設定が必要な場合があります。例: {{ic|1=user-agent=&amp;quot;Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0&amp;quot;}}。&lt;br /&gt;
&lt;br /&gt;
=== Lua スクリプトを使って mpv を音楽プレイヤーとして磨き上げる ===&lt;br /&gt;
&lt;br /&gt;
mpv の Lua スクリプトの開発方法は [https://github.com/mpv-player/mpv mpv リポジトリ] の [https://github.com/mpv-player/mpv/blob/master/DOCS/man/lua.rst DOCS/man/lua.rst] にまとまっており、サンプルが [https://github.com/mpv-player/mpv/tree/master/TOOLS/lua TOOLS/lua] にあります。[https://web.archive.org/web/20160320001546/http://bamos.github.io/2014/07/05/mpv-lua-scripting/ このブログ記事] では Lua スクリプトを使って mpv を使いやすくする例として [https://github.com/bamos/dotfiles/blob/master/.mpv/scripts/music.lua music.lua] スクリプトを紹介しています。&lt;br /&gt;
&lt;br /&gt;
=== mpv で Twitch.tv のストリーミングを視聴 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|youtube-dl}} がインストールされている場合、mpv は直接 Twitch のライブストリームを開くことができます。&lt;br /&gt;
&lt;br /&gt;
また、{{Pkg|streamlink}} を使って Twitch をストリーミングする方法もあります。GUI でストリームを視聴したい場合 {{aur|streamlink-twitch-gui}} を使ってください。[[Streamlink#Twitch]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
さらに Livestreamer を利用する Lua スクリプトが存在します: https://gist.github.com/ChrisK2/8701184fe3ea7701c9cc&lt;br /&gt;
&lt;br /&gt;
=== youtube-dl とフォーマットの選択 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|--ytdl-format}} のデフォルトは {{ic|bestvideo+bestaudio/best}} となっています。4K 解像度で見ることができる YouTube 動画の場合、たとえ接続しているモニターが 4K に対応していなくても、4K の VP9 でエンコードされた動画をソフトウェアデコードすることになります。&lt;br /&gt;
&lt;br /&gt;
youtube-dl のフォーマットを適切に設定することで問題は簡単に解決します。以下の設定例では、縦の解像度が1080ピクセル以下の動画だけが再生されます:&lt;br /&gt;
&lt;br /&gt;
 ytdl-format=bestvideo[height&amp;lt;=?1080]+bestaudio/best&lt;br /&gt;
&lt;br /&gt;
ハードウェアデコードできない特定のコーデックだけを避けたい場合、同じように追加できます。例えば、VP9 を無視するには以下のように設定します:&lt;br /&gt;
&lt;br /&gt;
 ytdl-format=bestvideo[height&amp;lt;=?1080][vcodec!=vp9]+bestaudio/best&lt;br /&gt;
&lt;br /&gt;
=== youtube-dl の音声検索 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|.bashrc}} に以下の関数を記述することでターミナルから {{ic|mm &amp;quot;&#039;&#039;search terms&#039;&#039;&amp;quot;}} を実行して音声を検索・再生できます:&lt;br /&gt;
&lt;br /&gt;
 function mm() {&lt;br /&gt;
     mpv --no-video --ytdl-format=bestaudio ytdl://ytsearch10:&amp;quot;$@&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== コンポジタで mpv を使う ===&lt;br /&gt;
&lt;br /&gt;
コンポジタ (例: KDE Plasma 5) を使っていて、mpv で動画を再生するときにコンポジットが無効になってしまう場合 (Plasma でウィンドウが表示されなくなったりデフォルトのアプリスイッチャでウィンドウのサムネイルが表示されなくなる場合)、{{ic|1=x11-bypass-compositor=no}} を使ってみてください。&lt;br /&gt;
&lt;br /&gt;
===OSC を古いものに戻したい===&lt;br /&gt;
以下のように設定してください:&lt;br /&gt;
{{hc|1=~/.config/mpv/lua-settings/osc.conf|2=layout=box}}&lt;br /&gt;
&lt;br /&gt;
=== スクリーンショットの作成 ===&lt;br /&gt;
再生時間を指定してスクリーンショットを作成するには ({{ic|HH:MM:SS}}):&lt;br /&gt;
&lt;br /&gt;
 $ mpv --no-audio --profile=image --start=00:01:30 --frames=1 /path/to/video/file&lt;br /&gt;
&lt;br /&gt;
スクリーンショットはカレントディレクトリに 00000001.jpg として保存されます。&lt;br /&gt;
&lt;br /&gt;
== Vapoursynth ==&lt;br /&gt;
&lt;br /&gt;
AviSynth の代わりとして Linux では Vapoursynth を使うことができます。Python スクリプトで動画を操作することが可能です。Vapoursynth の Python スクリプトは &#039;&#039;mpv&#039;&#039; の動画フィルターとしても使えます。&lt;br /&gt;
&lt;br /&gt;
Vapoursynth フィルターを使うには {{Pkg|vapoursynth}} パッケージをインストールして {{ic|--enable-vapoursynth}} ビルドフラグを付けて &#039;&#039;mpv&#039;&#039; をコンパイルしてください。&lt;br /&gt;
&lt;br /&gt;
=== バンディングを消去 (flash3kyuu) ===&lt;br /&gt;
&lt;br /&gt;
{{Note|Mpv にはバンディング消去シェーダが同梱されており [[#高品質なビデオ出力|opengl-hq プロファイル]]ではデフォルトで有効になっています。設定を調整する方法はマニュアルを参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|f3k_db}} のバンディング消去フィルターを使うには {{AUR|vapoursynth-plugin-f3kdb}} をインストールして &#039;&#039;vapoursynth&#039;&#039; 拡張を使用する Python スクリプトを書いて下さい。&lt;br /&gt;
&lt;br /&gt;
以下は &#039;&#039;mpv&#039;&#039; でバンディング消去を有効にするサンプルスクリプトです。&lt;br /&gt;
&lt;br /&gt;
 import vapoursynth as vs&lt;br /&gt;
 core = vs.get_core()&lt;br /&gt;
 &lt;br /&gt;
 clip = video_in&lt;br /&gt;
 clip = core.std.Trim(clip, first=0, length=500000)&lt;br /&gt;
 clip = core.f3kdb.Deband(clip, grainy=0, grainc=0, output_depth=16)&lt;br /&gt;
 clip.set_output()&lt;br /&gt;
&lt;br /&gt;
設定ファイルで Python スクリプトを指定するか mpv を実行するときにコマンドライン引数で指定してください:&lt;br /&gt;
 $ mpv --vf=vapoursynth=f3k_db.py &amp;lt;video_file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 一般的なデバッグ ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mpv&#039;&#039; の再生に問題がある場合 (またはフラットアウトが実行できない場合) は、最初に次の3つのことを行う必要があります。&lt;br /&gt;
&lt;br /&gt;
# コマンドラインから &#039;&#039;mpv&#039;&#039; を実行します (-vフラグは冗長性を高めます) 。運が良ければ、そこに何が間違っているかを知らせるエラーメッセージが表示されます。{{ic|$mpv -v video.mkv}}&lt;br /&gt;
# &#039;&#039;mpv&#039;&#039; のログファイルを出力します。ログファイルをふるいにかけるのは難しいかもしれませんが、何かが壊れている場合は、ログファイルを見ることができます。&amp;lt;br&amp;gt;{{ic|1=$ mpv -v --log-file=./log video.mkv}}&lt;br /&gt;
# 設定なしで &#039;&#039;mpv&#039;&#039; を実行します。これがうまく動作するなら、問題は設定のどこかにあります {{ic|$mpv--no-config video.mkv}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mpv&#039;&#039; が実行されても正常に実行されない場合は、 [https://wiki.archlinux.jp/index.php/Mpv#mpv-stats mpv-stats] スクリプトをインストールして、そのスクリプトの実行状況を確認することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
=== 再生が途切れたりティアリングが発生する ===&lt;br /&gt;
&lt;br /&gt;
OpenGL をサポートしているハードウェアを使っている場合 mpv はデフォルトで OpenGL ビデオ出力デバイスを使用します。Intel HD4XXX シリーズなどのカードで 4K ディスプレイに動画を映そうとすると、動画の再生が不安定になって一時的に止まってしまったり盛大にティアリングが発生することがあります。そのような問題が起こる場合、XV (XVideo) ビデオ出力デバイスを使うことで解決できるかもしれません:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=~/.config/mpv/mpv.conf|2=profile=xv}}&lt;br /&gt;
&lt;br /&gt;
現在 XV ビデオ出力は非推奨となっており、新しいバージョンの mpv では osd の表示がおかしくなるなど問題を起こすことがあります。&lt;br /&gt;
&lt;br /&gt;
また、(低性能なハードウェアで) 再生のパフォーマンスを改善するかわりに、動画の品質が著しく落ちるという問題もあります。&lt;br /&gt;
&lt;br /&gt;
動画の再生性能を高める[[#設定|オプション]]として以下のようなものもあります:&lt;br /&gt;
{{hc|~/.config/mpv/mpv.conf|2=&lt;br /&gt;
vd-lavc-fast&lt;br /&gt;
vd-lavc-skiploopfilter=&amp;lt;skipvalue&amp;gt;&lt;br /&gt;
vd-lavc-skipframe=&amp;lt;skipvalue&amp;gt;&lt;br /&gt;
vd-lavc-framedrop=&amp;lt;skipvalue&amp;gt;&lt;br /&gt;
vd-lavc-threads=&amp;lt;threads&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウコンポジタの問題 ===&lt;br /&gt;
&lt;br /&gt;
KWin や Mutter などのウィンドウコンポジタは、再生の滑らかさに問題を引き起こす可能性があります。このような場合は、{{ic|1=x11-bypass-compositor=yes}} を設定して、ウィンドウモードでの再生時にウィンドウの合成も無効にすると便利です (合成機能がサポートしている場合) 。&lt;br /&gt;
&lt;br /&gt;
KWin の合成とハードウェアデコードでは、 {{ic|1=x11-bypass-compositor=no}} を設定して合成をフルスクリーンで有効にしておくこともできます。フルスクリーンから離れた後で合成を再有効にすると、しばらくの間、stutter が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
=== ボリュームバーがないため、ボリュームを変更できません ===&lt;br /&gt;
&lt;br /&gt;
マウスホイールをボリュームアイコンの上で回転させます。&lt;br /&gt;
&lt;br /&gt;
=== GNOME Blank screen (Wayland) ===&lt;br /&gt;
&lt;br /&gt;
Wayland を使用している場合、&#039;&#039;mpv&#039;&#039;は GNOME の省電力設定を一時停止できません。その結果、ビデオの再生中にスクリーンセーバーがモニターをオフにします。この問題を回避するには、 {{ic|mpv.desktop}} の {{ic|1=Exec=}} 行の先頭に {{ic|gnome-session-inhibit}} を追加します。&lt;br /&gt;
&lt;br /&gt;
=== コンポジタで mpv を使用する ===&lt;br /&gt;
&lt;br /&gt;
コンポジタ (例:KDE Plasma 5) を使用していて、ビデオを再生しているときにコンポジションが無効 (例えば Plasma の場合、デフォルトのアプリスイッチャーでウィンドウを表示したり、ウィンドウのサムネイルを表示したりすることができなくなります。)になっている場合は、次の操作を行ってください {{ic|1=x11-bypass-compositor=no}}&lt;br /&gt;
&lt;br /&gt;
=== GNOME Wayland でカーソルテーマが適用されない ===&lt;br /&gt;
&lt;br /&gt;
Wayland には一意の設定ファイルがないため、クライアントは異なるカーソルテーマを表示できます。カーソルテーマの場合、 Qt アプリケーションは通常、 [[環境変数]] {{ic|XCURSOR_THEME}} に設定された値を受け入れます。ただし、 mpv の特定のケースでは、表示されるカーソル・テーマは {{ic|~/.icons/default/index.theme}} で設定したものである必要があります。 GNOME Tweaks でカーソルテーマを変更する場合、 GNOME はこのファイルを更新しないので、手動で行う必要があります。詳細については、 [https://wiki.archlinux.jp/index.php/%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%83%86%E3%83%BC%E3%83%9E#XDG_.E3.81.AE.E4.BB.95.E6.A7.98 XDG の仕様] を参照してください。&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Tgw314&amp;diff=21338</id>
		<title>利用者:Tgw314</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Tgw314&amp;diff=21338"/>
		<updated>2021-08-16T13:12:57Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: 改行を挿入&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i3でverticalなパネルが使いた〜〜〜〜〜〜〜い&amp;lt;br /&amp;gt;&lt;br /&gt;
あ〜〜〜〜〜〜〜〜&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Tgw314&amp;diff=21337</id>
		<title>利用者:Tgw314</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Tgw314&amp;diff=21337"/>
		<updated>2021-08-16T13:11:33Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: 戯言&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i3でverticalなパネルが使いた〜〜〜〜〜〜〜い&lt;br /&gt;
あ〜〜〜〜〜〜〜〜&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Pacman&amp;diff=21336</id>
		<title>Pacman</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Pacman&amp;diff=21336"/>
		<updated>2021-08-16T12:28:25Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: checkupdates が pacman パッケージに含まれているとする古い記述を修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:パッケージ管理]]&lt;br /&gt;
[[Category:Arch プロジェクト]]&lt;br /&gt;
[[Category:コマンド]]&lt;br /&gt;
[[ar:Pacman]]&lt;br /&gt;
[[cs:Pacman]]&lt;br /&gt;
[[da:Pacman]]&lt;br /&gt;
[[de:Pacman]]&lt;br /&gt;
[[el:Pacman]]&lt;br /&gt;
[[en:Pacman]]&lt;br /&gt;
[[es:Pacman]]&lt;br /&gt;
[[fa:Pacman]]&lt;br /&gt;
[[fr:Pacman]]&lt;br /&gt;
[[id:Pacman]]&lt;br /&gt;
[[it:Pacman]]&lt;br /&gt;
[[ko:Pacman]]&lt;br /&gt;
[[nl:Pacman]]&lt;br /&gt;
[[pl:Pacman]]&lt;br /&gt;
[[pt:Pacman]]&lt;br /&gt;
[[ru:Pacman]]&lt;br /&gt;
[[sr:Pacman]]&lt;br /&gt;
[[sv:Pacman]]&lt;br /&gt;
[[zh-hans:Pacman]]&lt;br /&gt;
[[zh-hant:Pacman]]&lt;br /&gt;
{{Lowercase title}}&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|パッケージの作成}}&lt;br /&gt;
{{Related|パッケージのダウングレード}}&lt;br /&gt;
{{Related|Pacman のパフォーマンスの向上}}&lt;br /&gt;
{{Related|Pacman GUI フロントエンド}}&lt;br /&gt;
{{Related|Pacman 比較表}}&lt;br /&gt;
{{Related|Pacman ヒント}}&lt;br /&gt;
{{Related|FAQ#パッケージ管理}}&lt;br /&gt;
{{Related|pacman-key}}&lt;br /&gt;
{{Related|Pacnew と Pacsave ファイル}}&lt;br /&gt;
{{Related|Pacman/ローカルデータベースの復元}}&lt;br /&gt;
{{Related|アプリケーション一覧/ユーティリティ#パッケージ管理}}&lt;br /&gt;
{{Related|Arch Build System}}&lt;br /&gt;
{{Related|公式リポジトリ}}&lt;br /&gt;
{{Related|Arch User Repository}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://www.archlinux.org/pacman/ pacman]&#039;&#039;&#039; [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる[[Arch Build System|ビルドシステム]]から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[公式リポジトリ|公式 Arch リポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。&lt;br /&gt;
&lt;br /&gt;
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。&lt;br /&gt;
&lt;br /&gt;
Pacman は C 言語で書かれており {{ic|.pkg.tar.xz}} パッケージフォーマットを使います。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=公式の {{Pkg|pacman}} パッケージには [[makepkg]] や &#039;&#039;&#039;vercmp&#039;&#039;&#039; などのツールが含まれています。&#039;&#039;&#039;pactree&#039;&#039;&#039; や [[#部分的なアップグレードはサポートされていません|checkupdates]] など他の有用なツールは {{Pkg|pacman-contrib}} パッケージに含まれています([https://git.archlinux.org/pacman.git/commit/?id=0c99eabd50752310f42ec808c8734a338122ec86 以前] は pacman パッケージに含まれていました)。ツールの一覧を見るには {{ic|pacman -Ql pacman pacman-contrib {{!}} grep -E &#039;bin/.+&#039;}} を実行してください。 }}&lt;br /&gt;
&lt;br /&gt;
==使い方==&lt;br /&gt;
&lt;br /&gt;
pacman で何ができるかをちゃんと学びたい場合、{{man|8|pacman}} を参照してください。以下にあるのは pacman でできることのほんの一例です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|他の Linux ディストリビューションを使ったことがある場合、[[Pacman 比較表]]の記事が役に立つでしょう。}}&lt;br /&gt;
&lt;br /&gt;
===パッケージのインストール===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* パッケージには [[PKGBUILD#optdepends|optdepends]] が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。[[#パッケージ・データベースに問い合わせる|パッケージ・データベースに問い合わせる]]ことで情報を参照することができます。&lt;br /&gt;
* 他のパッケージの依存パッケージとしてパッケージをインストールする場合 (そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは[[#インストール理由|インストール理由]]を参照。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新しないでください (つまり {{ic|pacman -Sy &#039;&#039;パッケージ名&#039;&#039;}} をしてはいけない)。これを実行すると依存関係に問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}}&lt;br /&gt;
&lt;br /&gt;
====特定のパッケージのインストール====&lt;br /&gt;
&lt;br /&gt;
ひとつ、あるいは複数の（依存を含む）パッケージをインストールするときは:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S &#039;&#039;パッケージ名1&#039;&#039; &#039;&#039;パッケージ名2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります (例: [extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S extra/&#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
名前に類似パターンが存在するパッケージをインストールしたい場合 (グループ全体ではなくマッチするパッケージのみ、例: {{Grp|plasma}}):&lt;br /&gt;
&lt;br /&gt;
 # pacman -S plasma-{desktop,mediacenter,nm}&lt;br /&gt;
&lt;br /&gt;
もちろん、必要に応じて更に複雑なパターンを指定することもできます:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S plasma-{workspace{,-wallpapers},pa}&lt;br /&gt;
&lt;br /&gt;
====パッケージグループのインストール====&lt;br /&gt;
&lt;br /&gt;
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S gnome&lt;br /&gt;
&lt;br /&gt;
を実行すると {{Grp|gnome}} グループからインストールしたいパッケージを選択するように表示されます。&lt;br /&gt;
&lt;br /&gt;
パッケージグループには大量のパッケージが含まれており、しばしばインストールしたいパッケージはそのうちの少しだけということがあるかもしれません。インストールするパッケージの番号を全て入力するという方法でもよいですが、以下のようにすることで簡単にパッケージを選択することが可能です:&lt;br /&gt;
&lt;br /&gt;
 Enter a selection (default=all): 1-10 15&lt;br /&gt;
&lt;br /&gt;
以上で1番から10番までと15番のパッケージがインストールされます。&lt;br /&gt;
&lt;br /&gt;
 Enter a selection (default=all): ^5-8 ^2&lt;br /&gt;
&lt;br /&gt;
以上で5番から8番までと2番のパッケージ以外の全てのパッケージをインストールします。&lt;br /&gt;
&lt;br /&gt;
どのパッケージが gnome グループに属しているか見るには:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Sg gnome&lt;br /&gt;
&lt;br /&gt;
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}}&lt;br /&gt;
&lt;br /&gt;
===パッケージの削除===&lt;br /&gt;
&lt;br /&gt;
あるパッケージを、そのパッケージが必要としていたものを残したまま削除するには:&lt;br /&gt;
&lt;br /&gt;
 # pacman -R &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
削除したいパッケージと、そのパッケージだけが必要としている他のパッケージを一緒に削除するには:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Rs &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
削除したいパッケージと、そのパッケージが必要としている他のパッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには:&lt;br /&gt;
&lt;br /&gt;
{{Warning|この操作は再帰的です。必要なパッケージを削除してしまうこともあるので、気をつけて使って下さい。}}&lt;br /&gt;
&lt;br /&gt;
 # pacman -Rsc &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Rdd &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、pacman は削除されたパッケージの設定ファイルを *.pacsave という拡張子をつけてバックアップします。もしこれらのファイルも一緒に削除したい場合:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Rn &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|Pacman はパッケージがインストールされた後に作成された設定ファイルを削除しません。$HOME ディレクトリ下の設定ファイルなどは手動で削除してください。}}&lt;br /&gt;
&lt;br /&gt;
===パッケージのアップグレード===&lt;br /&gt;
&lt;br /&gt;
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期して&#039;&#039;それから&#039;&#039;システムのパッケージをアップデートします(リポジトリにない&#039;ローカル&#039;パッケージは別です):&lt;br /&gt;
&lt;br /&gt;
 # pacman -Syu&lt;br /&gt;
&lt;br /&gt;
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}}&lt;br /&gt;
&lt;br /&gt;
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[The Arch Way]] を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。&#039;&#039;&#039;システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です&#039;&#039;&#039;。[[Arch Linux の安定化#Arch のメンテナンス]]を見てください。もし（ユーザーによって作られた）設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために {{ic|.pacnew}} ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは [[Pacnew と Pacsave ファイル]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* Pacman からの出力は {{ic|/var/log/pacman.log}} に記録されています。&lt;br /&gt;
* {{AUR|wat-git}} などのログビューアを使うことで pacman のログを検索できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
アップグレードするまえに、[https://www.archlinux.jp/ Arch Linux ホームページ] の最新ニュースをチェックしておくとよいでしょう (もしくは [https://www.archlinux.jp/feeds/ RSS フィード], [https://lists.archlinux.org/listinfo/arch-announce/ arch-announce メーリングリスト]を講読したり Twitter の [https://twitter.com/archlinux_jp @archlinux_jp] をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。&lt;br /&gt;
&lt;br /&gt;
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。&lt;br /&gt;
&lt;br /&gt;
====部分的なアップグレードはサポートされていません====&lt;br /&gt;
&lt;br /&gt;
Arch Linux はローリングリリースであり、常に新しいバージョンの[[Wikipedia:ja:ライブラリ|ライブラリ]]がリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 ([[Arch User Repository|AUR]] のパッケージなど)、ユーザーは必要に応じて[[Wikipedia:soname|共有ライブラリ]]にあわせてリビルドしなくてはなりません。&lt;br /&gt;
&lt;br /&gt;
つまり部分的なアップグレードは&#039;&#039;&#039;サポートされていません&#039;&#039;&#039;。{{ic|pacman -Sy package}} や、それと同等の {{ic|pacman -Sy}} からの {{ic|pacman -S package}} などをしないでください。どんなときでも、パッケージをインストールする前に ({{ic|pacman -Syu}} で) アップグレードしてください。{{ic|IgnorePkg}} や {{ic|IgnoreGroup}} を使用する場合は気をつけて扱って下さい。{{ic|pacman -Sy}} は基本的に使ってはいけないコマンドで、代わりに {{ic|pacman -Syu}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。&#039;&#039;&#039;シンボリックリンクを張ることでこの問題を&amp;quot;解決&amp;quot;しようとしてはいけません&#039;&#039;&#039;。ライブラリは&#039;&#039;後方互換性がない&#039;&#039;ときには [[Wikipedia:soname|soname]] のバージョンアップに対応します。{{ic|pacman -Syu}} を実行しさえすれば、ミラーと同期して &#039;&#039;pacman&#039;&#039; が壊れていないかぎり問題が修正されます。&lt;br /&gt;
&lt;br /&gt;
インストールされているパッケージのアップグレードを確認したいときは {{Pkg|pacman-contrib}} パッケージに含まれている bash スクリプト &#039;&#039;&#039;checkupdates&#039;&#039;&#039; を使うことで、システムアップデートを行わずに安全に確認が行えます。&lt;br /&gt;
&lt;br /&gt;
===パッケージ・データベースに問い合わせる===&lt;br /&gt;
&lt;br /&gt;
Pacman からローカルデータベースに問い合わせるときは {{ic|-Q}} フラグを、同期データベースに問い合わせるときは {{ic|-S}} フラグを、ファイルデータベースに問い合わせるときは {{ic|-F}} フラグを使います。それぞれのフラグのサブオプションについては {{ic|pacman -Q --help}}, {{ic|pacman -S --help}}, {{ic|pacman -F --help}} を見てください。&lt;br /&gt;
&lt;br /&gt;
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Ss &#039;&#039;検索ワード1&#039;&#039; &#039;&#039;検索ワード2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
場合によって {{Ic|-s}} の組み込みの ERE (拡張正規表現) が望まない結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Ss &#039;^vim-&#039;&lt;br /&gt;
&lt;br /&gt;
既にインストール済みのパッケージから検索するには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qs &#039;&#039;検索ワード1&#039;&#039; &#039;&#039;検索ワード2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
リモートパッケージからパッケージファイルの名前で検索するには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Fs &#039;&#039;検索ワード1&#039;&#039; &#039;&#039;検索ワード2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
パッケージ名が分かっていれば、より詳しい情報を得ることができます:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Si &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
既にインストールしたパッケージの情報を得るには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qi &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-i}} フラグをふたつ付けることでバックアップファイルの一覧と状態を表示できます:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qii &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるパッケージによってインストールされたファイルの一覧を得るには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Ql &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
リモートパッケージによってインストールされるファイルのリストを得るには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Fl &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるファイルがどのパッケージによってインストールされたかを調べるには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qo &#039;&#039;/パス/ファイル名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Fo &#039;&#039;/パス/ファイル名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qdt&lt;br /&gt;
&lt;br /&gt;
{{Tip|上記のコマンドを pacman の post-transaction [[#フック|フック]]に追加することで、トランザクションによってパッケージが孤立したときに通知することができます。(明示的にインストールしたのでない限り) リポジトリから消されたパッケージはローカルでは孤児になるため、パッケージがリポジトリから消されたときに知ることができます。孤児が見つからなかったときに &amp;quot;failed to execute command&amp;quot; エラーを表示しないようにするため、フックの {{ic|Exec}} では次のコマンドを使用してください: {{ic|&amp;lt;nowiki&amp;gt;/usr/bin/bash -c &amp;quot;/usr/bin/pacman -Qtd || /usr/bin/echo &#039;=&amp;gt; None found.&#039;&amp;quot;&amp;lt;/nowiki&amp;gt;}}。}}&lt;br /&gt;
&lt;br /&gt;
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Qet&lt;br /&gt;
&lt;br /&gt;
[[pacman ヒント]]には他の例も載っています。&lt;br /&gt;
&lt;br /&gt;
====Pactree====&lt;br /&gt;
&lt;br /&gt;
パッケージの依存のツリーを見るには:&lt;br /&gt;
&lt;br /&gt;
 $ pactree &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるパッケージを必要としている全てのパッケージを見るには [[pkgtools]] の {{ic|whoneeds}} を使います:&lt;br /&gt;
&lt;br /&gt;
 $ whoneeds &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もしくは &#039;&#039;pactree&#039;&#039; のリバースフラグを使って:&lt;br /&gt;
&lt;br /&gt;
 $ pactree -r &#039;&#039;package_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====データベースの構造====&lt;br /&gt;
&lt;br /&gt;
通常 pacman のデータベースは {{ic|/var/lib/pacman/sync}} に配置され、{{ic|/etc/pacman.conf}} で指定したリポジトリのデータベースファイルがそこに作成されます。データベースファイルは gzip で圧縮された tar アーカイブになっており、パッケージごとにディレクトリが含まれています。例えば {{Pkg|which}} パッケージの場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
% tree which-2.20-6 &lt;br /&gt;
which-2.20-6&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|-- depends&lt;br /&gt;
`-- desc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|depends}} ファイルにはパッケージが依存するパッケージのリストが記載されており、{{ic|desc}} にはファイルサイズや MD5 ハッシュなどのパッケージの情報が入っています。&lt;br /&gt;
&lt;br /&gt;
===パッケージキャッシュの削除===&lt;br /&gt;
&lt;br /&gt;
pacman はダウンロードしたパッケージを {{ic|/var/cache/pacman/pkg/}} に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。&lt;br /&gt;
&lt;br /&gt;
現在インストールされていないパッケージキャッシュを全て削除するオプションは:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Sc&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* インストールしたパッケージが安定していて、[[パッケージのダウングレード|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[Arch Linux Archive]] などから古いパッケージを取得するしか方法がなくなってしまいます。&lt;br /&gt;
* {{ic|pacman -Scc}} でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の欠点のため、{{ic|-Sc}} や {{ic|-Scc}} スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:&lt;br /&gt;
&lt;br /&gt;
*{{Pkg|pacman-contrib}} パッケージに入っている &#039;&#039;paccache&#039;&#039; コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します: {{bc|$ paccache -r}} ただし、この方法では &#039;&#039;paccache&#039;&#039; はパッケージがインストールされているかどうかを確認&#039;&#039;しない&#039;&#039;ため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります: {{bc|$ paccache -ruk0}} 他のオプションは {{ic|paccache -h}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
*もしくは、{{AUR|pkgcacheclean}} をインストールして使うこともできます: {{bc|# pkgcacheclean}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=[[#フック]]を作成して pacman の操作後に上記のコマンドを自動的に実行することができます。サンプルが [https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 こちらのスレッド] に載っています。}}&lt;br /&gt;
&lt;br /&gt;
===追加コマンド===&lt;br /&gt;
&lt;br /&gt;
システムのアップグレードとパッケージのインストール (ワンライナー):&lt;br /&gt;
&lt;br /&gt;
 # pacman -Syu &#039;&#039;パッケージ名1&#039;&#039; &#039;&#039;パッケージ名2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
インストールをしないで、パッケージをダウンロードする:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Sw &#039;&#039;パッケージ名&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
リポジトリに存在しない&#039;ローカル&#039;のパッケージ (例: [[Arch User Repository|AUR]] のパッケージ) をインストール:&lt;br /&gt;
&lt;br /&gt;
 # pacman -U /パス/パッケージ名-version.pkg.tar.xz&lt;br /&gt;
&lt;br /&gt;
リポジトリにない、リモートのパッケージを URI を入力してインストール:&lt;br /&gt;
&lt;br /&gt;
 # pacman -U &amp;lt;nowiki&amp;gt;http://www.example.com/repo/example.pkg.tar.xz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|pacman のキャッシュにローカルパッケージのコピーを残したいときは、次を使って下さい:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|--force}} スイッチを使う時は細心の注意を払って下さい、誤って使用すると大きな問題が起こる場合があります。Arch ニュースでこのスイッチを使うように指示があってとき&#039;&#039;だけ&#039;&#039;使用することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。{{ic|-p}} を使うことで {{ic|-S}}, {{ic|-U}}, {{ic|-R}} などの操作を阻止することができます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは {{ic|--help}} スイッチを付けて呼び出すことでコマンドオプションを表示できます。&lt;br /&gt;
&lt;br /&gt;
===インストール理由===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; データベースではインストールしたパッケージはインストールしたときの理由によって2つのグループに分別されます:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;明示的にインストール&#039;&#039;&#039;: &#039;&#039;pacman&#039;&#039; の {{ic|-S}} や {{ic|-U}} コマンドによって文字通り指定されたパッケージ。&lt;br /&gt;
*&#039;&#039;&#039;依存パッケージ&#039;&#039;&#039;: &#039;&#039;pacman&#039;&#039; のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから[[PKGBUILD#依存関係|必要]]とされたためにインストールされたパッケージ。&lt;br /&gt;
&lt;br /&gt;
パッケージのインストール時、以下のようにすることでインストール理由を&#039;&#039;依存パッケージ&#039;&#039;に強制的に変えることができます:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S --asdeps &#039;&#039;package_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|任意の依存パッケージを {{ic|--asdeps}} でインストールすると、[[Pacman ヒント#使用していないパッケージの削除 (孤立したパッケージ)|孤立したパッケージを削除]]するときに &#039;&#039;pacman&#039;&#039; によって任意の依存パッケージも削除されるようになります。}}&lt;br /&gt;
&lt;br /&gt;
パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。&lt;br /&gt;
&lt;br /&gt;
明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。&lt;br /&gt;
&lt;br /&gt;
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # pacman -D --asdeps &#039;&#039;package_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
インストール理由を「明示的にインストール」に変えたいときは {{ic|--asexplicit}} を使ってください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|pacman -Syu &#039;&#039;package_name&#039;&#039; --asdeps}} のように、アップグレードをするときに {{ic|--asdeps}} や {{ic|--asexplicit}} オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。}}&lt;br /&gt;
&lt;br /&gt;
===特定のファイルが含まれているパッケージを検索===&lt;br /&gt;
&lt;br /&gt;
ファイルデータベースを同期してください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -Fy&lt;br /&gt;
&lt;br /&gt;
ファイルが含まれているパッケージを検索するには:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Fs pacman&lt;br /&gt;
 core/pacman 5.0.1-4&lt;br /&gt;
     usr/bin/pacman&lt;br /&gt;
     usr/share/bash-completion/completions/pacman&lt;br /&gt;
 extra/xscreensaver 5.36-1&lt;br /&gt;
     usr/lib/xscreensaver/pacman&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[cron]] ジョブや [[systemd/タイマー|systemd タイマー]]を設定してファイルデータベースを定期的に同期させることができます。}}&lt;br /&gt;
&lt;br /&gt;
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する [[pkgfile]] をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
==設定==&lt;br /&gt;
&lt;br /&gt;
pacman の設定は {{ic|/etc/pacman.conf}} に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は {{man|5|pacman.conf}} にあります。&lt;br /&gt;
&lt;br /&gt;
===全般設定===&lt;br /&gt;
&lt;br /&gt;
全般的な設定は {{ic|[options]}} セクションにあります。ここで設定されている項目については {{man|5|pacman.conf}} かデフォルトの {{ic|pacman.conf}} を参照してください。 &lt;br /&gt;
&lt;br /&gt;
====カラー出力====&lt;br /&gt;
&lt;br /&gt;
[[コンソールのカラー出力#pacman]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== 並列ダウンロードを有効にする ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; 6.0 はパッケージを同時にダウンロードするオプションを導入しました。この機能を使用するには、{{ic|/etc/pacman.conf}} で {{ic|ParallelDownloads}} を正の整数に (例:{{ic|5}}) など設定する必要があります。このオプションが設定されていない場合、パッケージは順番にダウンロードされます。&lt;br /&gt;
&lt;br /&gt;
====アップデートする前にバージョンを比較====&lt;br /&gt;
&lt;br /&gt;
利用可能なパッケージの新旧バージョンを確認したい場合、{{ic|/etc/pacman.conf}} の &amp;quot;VerbosePkgLists&amp;quot; 行をアンコメントしてください。{{ic|pacman -Syu}} の出力が以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 Package (6)             Old Version  New Version  Net Change  Download Size&lt;br /&gt;
 &lt;br /&gt;
 extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB&lt;br /&gt;
 extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB&lt;br /&gt;
 extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB&lt;br /&gt;
&lt;br /&gt;
====アップグレードさせないパッケージを設定====&lt;br /&gt;
&lt;br /&gt;
ある特定のパッケージをアップデートさせないようにするには:&lt;br /&gt;
&lt;br /&gt;
 IgnorePkg=linux&lt;br /&gt;
&lt;br /&gt;
複数のパッケージを記述するときはスペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。&lt;br /&gt;
&lt;br /&gt;
====アップグレードさせないグループを設定====&lt;br /&gt;
&lt;br /&gt;
パッケージの場合と同様に、アップグレードさせないグループを指定することができます:&lt;br /&gt;
&lt;br /&gt;
 IgnoreGroup=gnome&lt;br /&gt;
&lt;br /&gt;
====アップグレードさせないファイルを設定====&lt;br /&gt;
&lt;br /&gt;
{{Ic|NoUpgrade}} ディレクティブで指定されたファイルはパッケージのインストール・アップグレードで変更を加えられることがなくなり、&#039;&#039;.pacnew&#039;&#039; 拡張子が付いたファイルが新しくインストールされます:&lt;br /&gt;
&lt;br /&gt;
 NoUpgrade=&#039;&#039;path/to/file&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|パスはパッケージ内のファイルを参照します。したがって、一番最初のスラッシュは必要ありません。}}&lt;br /&gt;
&lt;br /&gt;
====インストールさせないファイルを設定====&lt;br /&gt;
&lt;br /&gt;
特定のディレクトリのインストールをさせないようにするには {{Ic|NoExtract}} リストにディレクトリを加えます。例えば、[[systemd]] ユニットのインストールを避けるには:&lt;br /&gt;
&lt;br /&gt;
 NoExtract=usr/lib/systemd/system/*&lt;br /&gt;
&lt;br /&gt;
もしくは {{AUR|localepurge}} と同じように、英語以外のローカライゼーションのインストールを止めるには:&lt;br /&gt;
&lt;br /&gt;
 NoExtract = usr/share/help/* !usr/share/help/en*&lt;br /&gt;
 NoExtract = usr/share/locale/* !usr/share/locale/en* !usr/share/locale/locale.alias&lt;br /&gt;
 NoExtract = usr/share/man/* !usr/share/man/man*&lt;br /&gt;
 NoExtract = usr/share/vim/vim74/lang/*&lt;br /&gt;
&lt;br /&gt;
後ろのルールは前のルールを上書きします。また、{{ic|!}} でルールを打ち消すことで、必要なロケールだけを維持できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|pacman 5 から、&#039;&#039;localepurge&#039;&#039; や &#039;&#039;bleachbit&#039;&#039; で消去したロケールがあるパッケージをアップデートする際に、&#039;&#039;pacman&#039;&#039; はロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには {{ic|pacman.conf}} の {{ic|CheckSpace}} オプションをコメントアウトしてください。ただし容量チェック機能は全てのパッケージで無効になります。}}&lt;br /&gt;
&lt;br /&gt;
====複数の設定ファイルを使用====&lt;br /&gt;
&lt;br /&gt;
設定ファイルが複数あって (メインの設定と [[公式リポジトリ|testing]] リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで {{ic|Include}} オプションを宣言することができます。例:&lt;br /&gt;
&lt;br /&gt;
 Include = /path/to/common/settings&lt;br /&gt;
&lt;br /&gt;
{{ic|/path/to/common/settings}} は共有したいオプションが存在するファイルに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
===フック===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; は {{ic|/usr/share/libalpm/hooks/}} ディレクトリのフックを処理の前後に実行することができます。さらに {{ic|pacman.conf}} の {{ic|HookDir}} オプションでフックディレクトリを指定できます (デフォルトは {{ic|/etc/pacman.d/hooks}} です)。フックファイルの名前には必ず &#039;&#039;.hook&#039;&#039; を後ろに付ける必要があります。&lt;br /&gt;
&lt;br /&gt;
Pacman フックは様々なことに使われています。例えば、{{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として {{pkg|tomcat8}} パッケージでは {{ic|tomcat8}} という名前のシステムユーザーが必要だと指定されており特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの {{ic|systemd-sysusers.hook}} と {{ic|systemd-tmpfiles.hook}} は {{ic|tomcat8}} パッケージにシステムユーザーと一時ファイルが含まれていることを認識して {{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を実行します。&lt;br /&gt;
&lt;br /&gt;
alpm のフックに関する詳細は {{man|5|alpm-hooks}} の man ページを参照。&lt;br /&gt;
&lt;br /&gt;
===リポジトリ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pacman.conf}} に書かれているように、Repositories セクションではどの[[公式リポジトリ|リポジトリ]]を使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル ({{ic|/etc/pacman.d/mirrorlist}}) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定は[[ミラー|ここ]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|[testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている [https://lists.archlinux.org/listinfo/arch-dev-public arch-dev-public メーリングリスト] を購読するのをお薦めします。}}&lt;br /&gt;
&lt;br /&gt;
===パッケージのセキュリティ===&lt;br /&gt;
&lt;br /&gt;
Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。{{ic|SigLevel}} を使うことでリポジトリ毎に（もしくは全体的に）セキュリティレベルを設定することが可能です。デフォルトの設定では {{ic|SigLevel &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
&lt;br /&gt;
===パッケージ XYZ にアップデートしたらシステムが壊れました===&lt;br /&gt;
&lt;br /&gt;
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。&lt;br /&gt;
&lt;br /&gt;
一番重要なことは&amp;quot;やみくもに&amp;quot; Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。&amp;quot;重要な&amp;quot;パッケージ ({{Pkg|linux}}, {{Pkg|xorg-server}} など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.jp/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。&lt;br /&gt;
&lt;br /&gt;
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ ({{ic|/var/log/pacman.log}}) を見て再チェックしてください。&lt;br /&gt;
&lt;br /&gt;
この段階で &#039;&#039;&#039;pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は&#039;&#039;&#039;、助けを求めるのにフォーラムや [[IRC チャンネル|IRC]] を使ったり問題のあるパッケージを[[パッケージのダウングレード|ダウングレード]]してください。&lt;br /&gt;
&lt;br /&gt;
===パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています===&lt;br /&gt;
&lt;br /&gt;
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux.jp/mirrors/status/ MirrorStatus] にミラーの更新状況がのっています。&lt;br /&gt;
&lt;br /&gt;
===アップデートでこんなエラーが出ました: &amp;quot;file exists in filesystem&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
関連: &#039;&#039;Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 error: could not prepare transaction&lt;br /&gt;
 error: failed to commit transaction (conflicting files)&lt;br /&gt;
 package: /path/to/file exists in filesystem&lt;br /&gt;
 Errors occurred, no packages were upgraded.&lt;br /&gt;
&lt;br /&gt;
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。&lt;br /&gt;
&lt;br /&gt;
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo &#039;&#039;/path/to/file&#039;&#039;}}) ことです。ファイルが他のパッケージによって使われている場合、[[バグ報告ガイドライン|バグレポートをしてください]]。他のパッケージによって使われていない場合、&#039;ファイルシステムに存在している&#039;ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。&lt;br /&gt;
&lt;br /&gt;
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。&lt;br /&gt;
&lt;br /&gt;
全てのパッケージはインストールされるとパッケージのメタデータを含んだ {{ic|/var/lib/pacman/local/$package-$version/files}} ファイルを作ります。このファイルが壊れている（または空だったり見つからない）と、パッケージをアップデートしようしたときに &amp;quot;file exists in filesystem&amp;quot; エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、{{ic|pacman -S --overwrite glob パッケージ名}} で pacman に glob に一致するファイルを上書きさせることができます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|一般的に --overwrite スイッチの使用は避けてください。}}&lt;br /&gt;
&lt;br /&gt;
===パッケージのインストール時にこんなエラーが出ました: &amp;quot;not found in sync db&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
まず、パッケージが本当に存在しているか確認しましょう（打ち間違いも見逃さずに！）。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} で全てのパッケージリストを更新してください。&lt;br /&gt;
&lt;br /&gt;
===パッケージをインストールする時にエラーが表示されます: &amp;quot;target not found&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう。&lt;br /&gt;
&lt;br /&gt;
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは &#039;&#039;multilib&#039;&#039; リポジトリにあるが、&#039;&#039;multilib&#039;&#039; が {{ic|pacman.conf}} で有効になっていないということが考えられます。&lt;br /&gt;
&lt;br /&gt;
=== pacman の手動再インストール ===&lt;br /&gt;
&lt;br /&gt;
==== pacman-static を使用====&lt;br /&gt;
&lt;br /&gt;
{{AUR|pacman-static}} は pacman を静的にコンパイルしたものなので、システム上のライブラリが動作していなくても実行できます。これは、 [https://wiki.archlinux.jp/index.php/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9#.E9.83.A8.E5.88.86.E7.9A.84.E3.81.AA.E3.82.A2.E3.83.83.E3.83.97.E3.82.B0.E3.83.AC.E3.83.BC.E3.83.89.E3.81.AF.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.A6.E3.81.84.E3.81.BE.E3.81.9B.E3.82.93 部分的なアップグレード] が実行され、 pacman が実行できなくなった場合にも便利です。&lt;br /&gt;
&lt;br /&gt;
固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法を提供し、 pacman を再インストールしたり、部分的なアップグレードの場合にシステム全体をアップグレードしたりするために使用できます。&lt;br /&gt;
&lt;br /&gt;
==== 外部の pacman を使用する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|pacman-static}} でさえ動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の1つは、 [[archiso]] を使用し、 {{ic|--sysroot}}} または {{ic|--root}} を使用してマウントポイントを指定する方法です。 {{ic|--sysroot}} に必要なファイルシステムをマウントする方法については、 [[Chroot#chrootの使用]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 手動で抽出する ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|以下の方法でシステムをさらに再起不能にまで壊してしまう可能性があります。[[#アップグレード中に Pacman がクラッシュしました]]に書かれている方法で直らない場合の最後の手段として使ってください。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:&lt;br /&gt;
&lt;br /&gt;
#インストールするパッケージを確認&lt;br /&gt;
#適当なミラーからパッケージをそれぞれダウンロード&lt;br /&gt;
#パッケージをルートディレクトリに展開&lt;br /&gt;
#{{ic|pacman -S --force}} でパッケージを再インストールしてパッケージデータベースを更新&lt;br /&gt;
#フルシステムアップグレードを実行&lt;br /&gt;
&lt;br /&gt;
問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ pacman -Q $(pactree -u pacman)&lt;br /&gt;
&lt;br /&gt;
問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します:&lt;br /&gt;
&lt;br /&gt;
 # tar -xvpwf &#039;&#039;package.tar.xz&#039;&#039; -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO&lt;br /&gt;
&lt;br /&gt;
{{ic|w}} フラグを使ってインタラクティブモードにしていることに注意してください。インタラクティブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。[https://bbs.archlinux.org/viewtopic.php?id=95007 こちらのフォーラムの投稿] には &#039;&#039;pacman&#039;&#039; の一部の依存パッケージだけが壊れた時の解決方法の例が載っています。&lt;br /&gt;
&lt;br /&gt;
===アップグレード中に Pacman がクラッシュしました===&lt;br /&gt;
&lt;br /&gt;
パッケージの削除・再インストール・アップグレード中に &amp;quot;database write&amp;quot; エラーを残して pacman がクラッシュする場合:&lt;br /&gt;
&lt;br /&gt;
#Arch インストールメディアを使って起動してください。&lt;br /&gt;
#root でルートファイルシステムをマウントします ({{ic|mount /dev/sdaX /mnt}})。{{ic|df -h}} で十分な空き容量があることを確認してください。&lt;br /&gt;
#proc, sys, dev ファイルシステムもマウントしてください: {{ic|mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev}}。&lt;br /&gt;
#システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で {{ic|1=pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu}} を実行することでシステムの &amp;quot;pacman&amp;quot; データベースを更新してアップグレードすることができます。&lt;br /&gt;
#アップグレード後、アップグレードがないことと壊れているパッケージを確認してください: {{ic|find /mnt/usr/lib -size 0}}。&lt;br /&gt;
#{{ic|1=pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S &#039;&#039;package&#039;&#039;}} で壊れているパッケージを再インストールしてください。&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;make install&amp;quot; を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;conflicting files&amp;quot; エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の&#039;&#039;所有されていない&#039;&#039;ファイルを検索するスクリプトについては [[Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。&lt;br /&gt;
{{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch ニュースで使うように指示が出ている時にだけ使うことを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
===システムをアップグレードした後、再起動すると &amp;quot;unable to find root device&amp;quot; エラーが出て起動できません===&lt;br /&gt;
&lt;br /&gt;
おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。2つの解決方法があります:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; &#039;&#039;Fallback&#039;&#039; エントリを試す:&lt;br /&gt;
&lt;br /&gt;
{{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ([[Syslinux]] の場合) や {{ic|e}} ([[GRUB]] や [[systemd-boot]] の場合) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して（ブートローダによる）新しいパラメータを使って起動できます。}}&lt;br /&gt;
&lt;br /&gt;
システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|# mkinitcpio -p linux}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; それが機能しない場合は、現在の Arch リリース （CD/DVDまたはUSBスティック） から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
 # pacman -Syu mkinitcpio systemd linux&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* もしあなたが現在のリリースを持っていなかったり、他の &amp;quot;Live&amp;quot;  Linux ディストリビューションを持っていないなら、昔ながらの方法で [[chroot]] することができます。もちろん、単に {{ic|arch-chroot}} スクリプトを実行するよりも、より多くの入力が必要になります。&lt;br /&gt;
* &amp;quot;pacman&amp;quot; が {{ic|Could not resolve host}} で失敗した場合は、 [https://wiki.archlinux.jp/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A#.E6.8E.A5.E7.B6.9A.E3.81.AE.E7.A2.BA.E8.AA.8D 接続の確認] をクリックしてください。&lt;br /&gt;
* arch-chroot または chroot 環境に入れないが、パッケージを再インストールする必要がある場合は、ルートパーティションで &amp;quot;pacman&amp;quot; コマンド {{ic|pacman--sysroot/mnt-Syu foo bar}} を使用できます。}}&lt;br /&gt;
&lt;br /&gt;
カーネル ({{Pkg|linux}} パッケージ) を再インストールすると、自動的に {{ic|mkinitcpio-p linux}} で initramfsイメージが再生成されます。これを個別に行う必要はありません。&lt;br /&gt;
&lt;br /&gt;
その後、{{ic|exit}}、{{ic|umount/mnt/{boot,} }} および {{ic|reboot}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
===signature from &amp;quot;User &amp;lt;email@gmail.com&amp;gt;&amp;quot; is unknown trust===&lt;br /&gt;
&lt;br /&gt;
以下の方法を試してみてください:&lt;br /&gt;
&lt;br /&gt;
*{{ic|pacman-key --refresh-keys}} で既知のキーを更新してください。&lt;br /&gt;
*手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください: {{ic|pacman -Sy archlinux-keyring &amp;amp;&amp;amp; pacman -Su}}。&lt;br /&gt;
*[[pacman-key#全ての鍵のリセット]]に従って下さい。&lt;br /&gt;
&lt;br /&gt;
===PGP 鍵のインポートが要求される===&lt;br /&gt;
&lt;br /&gt;
古いバージョンの ISO で Arch を[[インストールガイド|インストール]]しようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり {{Pkg|archlinux-keyring}} をアップグレードしてください ([[#signature from &amp;quot;User &amp;lt;email@gmail.com&amp;gt;&amp;quot; is unknown trust|上]]を参照)。&lt;br /&gt;
&lt;br /&gt;
===エラー: key &amp;quot;0123456789ABCDEF&amp;quot; could not be looked up remotely===&lt;br /&gt;
&lt;br /&gt;
パッケージが {{Pkg|archlinux-keyring}} に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの {{Pkg|archlinux-keyring}} に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。[[#signature from &amp;quot;User &amp;lt;email@gmail.com&amp;gt;&amp;quot; is unknown trust|上]]で書かれているように {{Pkg|archlinux-keyring}} を先にアップグレードしてください。&lt;br /&gt;
&lt;br /&gt;
===signature from &amp;quot;User &amp;lt;email@archlinux.org&amp;gt;&amp;quot; is invalid===&lt;br /&gt;
&lt;br /&gt;
システム[[時刻]]が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 error: &#039;&#039;package&#039;&#039;: signature from &amp;quot;User &amp;lt;email@archlinux.org&amp;gt;&amp;quot; is invalid&lt;br /&gt;
 error: failed to commit transaction (invalid or corrupted package (PGP signature))&lt;br /&gt;
 Errors occured, no packages were upgraded.&lt;br /&gt;
&lt;br /&gt;
パッケージをインストール・アップグレードする前に　{{ic|ntpd -qg}} と {{ic|hwclock -w}} を root で実行して下さい。&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;failed to commit transaction (invalid or corrupted package)&amp;quot; エラー===&lt;br /&gt;
&lt;br /&gt;
{{ic|/var/cache/pacman/pkg}} にある {{ic|*.part}} ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい ({{ic|pacman.conf}} で {{ic|XferCommand}} を設定しているとこのエラーがよく起こります)。&lt;br /&gt;
&lt;br /&gt;
 # find /var/cache/pacman/pkg/ -iname &amp;quot;*.part&amp;quot; -exec rm {} \;&lt;br /&gt;
&lt;br /&gt;
===pacman を使うたびにエラーが表示されます: &#039;warning: current locale is invalid; using default &amp;quot;C&amp;quot; locale&#039;===&lt;br /&gt;
&lt;br /&gt;
そのエラーは、あなたの locale が正しく設定されていないと言っています。[[ロケール]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===pacman でプロキシ設定を使うにはどうすればいいですか？===&lt;br /&gt;
&lt;br /&gt;
環境変数 ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} など) を使って下さい。[[sudo]] と一緒に Pacman を使う時は、[[sudo#環境変数|環境変数を pacman に渡すように]] sudo を設定してください。&lt;br /&gt;
&lt;br /&gt;
===明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか===&lt;br /&gt;
&lt;br /&gt;
ネイティブのパッケージを全て再インストールするには: {{ic|&amp;lt;nowiki&amp;gt;pacman -Qnq | pacman -S -&amp;lt;/nowiki&amp;gt;}} ({{ic|-S}} オプションはデフォルトでインストールの理由を維持します)。&lt;br /&gt;
&lt;br /&gt;
次に自分で作成したパッケージを全て再インストールしてください、{{ic|pacman -Qmq}} でパッケージを確認できます。&lt;br /&gt;
&lt;br /&gt;
===パッケージのダウンロード時にフリーズする===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pacman&#039;&#039; がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [https://bbs.archlinux.org/viewtopic.php?id&amp;amp;#61;68944] [https://bbs.archlinux.org/viewtopic.php?id&amp;amp;#61;65728]。Arch Linux のインストール時にこの問題が発生する場合、&#039;&#039;pacman&#039;&#039; のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは [[pacman のパフォーマンスの向上]]を参照)。[[VirtualBox]] で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで &#039;&#039;NAT&#039;&#039; の代わりに &#039;&#039;Host interface&#039;&#039; を使うことで解決します。&lt;br /&gt;
&lt;br /&gt;
===Failed retrieving file &#039;core.db&#039; from mirror===&lt;br /&gt;
&lt;br /&gt;
[[ミラー]]を正しく設定しているのにこのエラーメッセージが表示される場合、[[Resolv.conf|ネームサーバ]]を設定してみてください。&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
&lt;br /&gt;
*[https://www.archlinux.org/pacman/ Pacman ホームページ]&lt;br /&gt;
*{{man|3|libalpm}}&lt;br /&gt;
*{{man|8|pacman}}&lt;br /&gt;
*{{man|5|pacman.conf}}&lt;br /&gt;
*{{man|8|repo-add}}&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Mkinitcpio&amp;diff=21281</id>
		<title>Mkinitcpio</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Mkinitcpio&amp;diff=21281"/>
		<updated>2021-08-13T04:15:36Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: 誤った記事内リンクを修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:initramfs]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[Category:Arch プロジェクト]]&lt;br /&gt;
[[Category:コマンド]]&lt;br /&gt;
[[da:Mkinitcpio]]&lt;br /&gt;
[[de:Mkinitcpio]]&lt;br /&gt;
[[en:Mkinitcpio]]&lt;br /&gt;
[[es:Mkinitcpio]]&lt;br /&gt;
[[fr:mkinitcpio]]&lt;br /&gt;
[[id:Mkinitcpio]]&lt;br /&gt;
[[it:Mkinitcpio]]&lt;br /&gt;
[[ru:Mkinitcpio]]&lt;br /&gt;
[[zh-hans:Mkinitcpio]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Booster}}&lt;br /&gt;
{{Related|ブートデバッグ}}&lt;br /&gt;
{{Related|dracut}}&lt;br /&gt;
{{Related|カーネルモジュール}}&lt;br /&gt;
{{Related|initramfs の最小化}}&lt;br /&gt;
{{Related|systemd}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://projects.archlinux.org/mkinitcpio.git/ mkinitcpio] は [[Wikipedia:Initial ramdisk|initial ramdisk]] 環境を作成するために使われる Bash スクリプトです。{{man|8|mkinitcpio}} より:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;initial ramdisk は非常に小さい環境（初期ユーザー空間）であり、様々なカーネルモジュールをロードして [[init]] にコントロールを移す前に必要なことをセットアップします。これにより、root ファイルシステムを暗号化したりソフトウェア RAID アレイに root を載せることが可能になります。mkinitcpio はカスタムフックによって簡単に拡張することができ、自動時の自動検知など様々な機能を持っています。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
伝統的には、[[Arch ブートプロセス|ブートプロセス]]の初めにハードウェアを検知したりタスクの初期化を行うのはカーネルで、それから root ファイルシステムがマウントされ {{ic|init}} にコントロールが移されます。しかしながら、先端技術が生まれるにつれ、こういった作業は複雑になりつつあります。&lt;br /&gt;
&lt;br /&gt;
今日、root ファイルシステムが載るハードウェアは SCSI から SATA、USB ドライブまで様々にわたり、それらハードウェアはそれぞれのマニュファクチャーによって作られたいろんなドライブコントローラによってコントロールされています。しかも、root ファイルシステムは暗号化されたり圧縮されたりする可能性もあります; ソフトウェア RAID アレイや論理ボリュームグループに含まれるかもしれません。複雑になったものをシンプルに扱う方法はユーザースペースへ管理を譲渡することです。&lt;br /&gt;
参照: [https://web.archive.org/web/20150430223035/http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ /dev/brain0 &amp;amp;raquo; Blog Archive &amp;amp;raquo; Early Userspace in Arch Linux]。&lt;br /&gt;
&lt;br /&gt;
mkinitcpio は Arch Linux デベロッパーとコミュニティの貢献によって開発されています。[https://projects.archlinux.org/mkinitcpio.git/ Git リポジトリ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|mkinitcpio}} パッケージは[[公式リポジトリ]]で利用可能で {{Pkg|linux}} パッケージの依存パッケージになっています。&lt;br /&gt;
&lt;br /&gt;
上級者は {{AUR|mkinitcpio-git}} パッケージで mkinitcpio の最新開発バージョンをインストールできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|Git から mkinitcpio を使う時は [https://lists.archlinux.org/listinfo/arch-projects arch-projects メーリングリスト]を購読することが&#039;&#039;強く&#039;&#039;推奨されます！}}&lt;br /&gt;
&lt;br /&gt;
== イメージ作成とアクティベーション ==&lt;br /&gt;
&lt;br /&gt;
=== 自動生成 ===&lt;br /&gt;
&lt;br /&gt;
カーネルがインストールまたはアップグレードされるたびに、[https://wiki.archlinux.jp/index.php/Pacman#.E3.83.95.E3.83.83.E3.82.AF pacman フック] は {{ic|/etc/mkinitcpio.d/}} に保存されている &#039;&#039;.preset&#039;&#039; ファイルを自動的に生成します。たとえば、公式の安定した {{Pkg|linux}} カーネルパッケージの場合は {{ic|linux.preset}} です。プリセットは、さまざまなパラメーターや出力ファイルの場所を手動で指定するのではなく、初期ramdiskイメージを作成するために必要な情報のリストです。&lt;br /&gt;
デフォルトでは、2つのイメージを作成するための手順が含まれています。&lt;br /&gt;
&lt;br /&gt;
# mkinitcpio [[#設定]] で指定されたディレクティブに従って作成された &#039;&#039;デフォルト&#039;&#039; の RAM ディスクイメージ、および&lt;br /&gt;
# &#039;&#039;フォールバック&#039;&#039; RAM ディスクイメージ。作成時に &#039;&#039;自動検出&#039;&#039; フックがスキップされることを除いて上記と同じであるため、ほとんどのシステムをサポートするすべてのモジュールが含まれます。&lt;br /&gt;
&lt;br /&gt;
プリセットを作成した後、pacman フックは、プリセットで提供された情報を使用して2つのイメージを生成する &#039;&#039;mkinitcpio&#039;&#039; スクリプトを呼び出します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;.preset&#039;&#039; ファイルは、カーネルの更新後に initramfs を自動的に再生成するために使用されます。編集するときは注意してください。}}&lt;br /&gt;
&lt;br /&gt;
=== 手動生成 ===&lt;br /&gt;
&lt;br /&gt;
スクリプトを手動で実行するには、手順について {{man|8|mkinitcpio}} のマニュアルページを参照してください。特に、カーネルパッケージによって提供されるプリセットを(再)生成するには、 {{ic|-p}}/{{ic|--preset}} オプションを使用してから、使用するプリセットを使用します。たとえば、 {{Pkg|linux}} パッケージの場合、次のコマンドを使用します。&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
既存のすべてのプリセットを(再)生成するには、 {{ic|-P}}/{{ic|--allpresets}} スイッチを使用します。これは通常、グローバル [[#設定]] の変更後にすべての initramfs イメージを再生成するために使用されます。&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -P&lt;br /&gt;
&lt;br /&gt;
ユーザーは、さまざまな構成で initramfs イメージをいくつでも作成できます。目的のイメージは、それぞれの [[ブートローダー]] 構成ファイルで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== カスタマイズされた生成 ===&lt;br /&gt;
&lt;br /&gt;
ユーザーは、代替の構成ファイルを使用してイメージを生成できます。たとえば、次の例では、 {{ic|/etc/mkinitcpio-custom.conf}}の指示に従って初期ramdiskイメージを生成し、 {{ic|/boot/initramfs-custom.img}} として保存します。&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img&lt;br /&gt;
&lt;br /&gt;
現在実行中のカーネル以外のカーネルのイメージを生成する場合は、カーネルリリースバージョンをコマンドラインに追加します。インストールされているカーネルリリースは {{ic|/usr/lib/modules/}} にあり、構文は各カーネルのコマンド{{ic|uname-r}} の出力と一致しています。&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mkinitcpio&#039;&#039; の基本の設定ファイルは {{ic|/etc/mkinitcpio.conf}} です。さらに、カーネルパッケージによって提供されるプリセット定義が {{ic|/etc/mkinitcpio.d}} ディレクトリにあります (例: {{ic|/etc/mkinitcpio.d/linux.preset}})。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトでは &#039;&#039;lvm2&#039;&#039;, &#039;&#039;mdadm&#039;&#039;, &#039;&#039;encrypt&#039;&#039; は有効化されていません。これらのフックが必要なときは注意してこのセクションを読んで下さい。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|ノード名が同一でカーネルモジュールが異なる複数のディスクコントローラを使っている場合 (例: 2つの SCSI/SATA または2つの IDE コントローラ)、{{ic|/etc/mkinitcpio.conf}} で指定するモジュールの順番が正しいことを確認して下さい。再起動で root デバイスの場所が変わってしまって、カーネルパニックが発生する可能性があります。また、[[永続的なブロックデバイスの命名]]を使えば正しいデバイスを確実にマウントすることができます。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|PS/2 キーボードを使っている場合: init でキーボード入力を使えるようにするには、{{ic|HOOKS}} に &#039;&#039;keyboard&#039;&#039; フックを追加してください。マザーボードによっては (特に旧世代のマザーボード)、i8042 コントローラが自動で検出されないことがあります。稀ですが、キーボードがないということもありえます。事前にこの状態を検出することができます。PS/2 端子があって {{ic|i8042: PNP: No PS/2 controller found. Probing ports directly}} メッセージが表示される場合、&#039;&#039;atkbd&#039;&#039; を {{ic|MODULES}} に追加してください。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーは設定ファイルの中にある6つの変数を修正することが可能です:&lt;br /&gt;
&lt;br /&gt;
; {{ic|MODULES}}: boot フックが実行される前にロードするべきカーネルモジュール。 &lt;br /&gt;
; {{ic|BINARIES}}: initramfs イメージに含める追加のバイナリ。&lt;br /&gt;
; {{ic|FILES}}: initramfs イメージに含める追加のファイル。&lt;br /&gt;
; {{ic|HOOKS}}: フックは initial ramdisk で実行するスクリプトです。&lt;br /&gt;
; {{ic|COMPRESSION}}: initramfs イメージを圧縮するのに使われます。&lt;br /&gt;
; {{ic|COMPRESSION_OPTIONS}}: {{ic|COMPRESSION}} プログラムに渡すコマンドラインオプション。この設定の使用はあまり推奨されません。mkinitcpio は圧縮プログラムに特殊な細工を施すので (例: xz には {{ic|1=--check=crc32}} を指定します)、誤って利用するとシステムが起動できなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
=== MODULES ===&lt;br /&gt;
&lt;br /&gt;
MODULES 行では何か他のことが行われる前にロードするモジュールを指定します。&lt;br /&gt;
&lt;br /&gt;
モジュールの後ろに {{ic|?}} を付けると、モジュールが見つからなかったときでもエラーを投げません。これは、フックや設定ファイルにリストアップされたモジュールを含んでコンパイルするカスタムカーネルで有益かもしれません。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &#039;&#039;reiser4&#039;&#039; を使う場合、モジュールのリストに必ず追加するようにしてください。&lt;br /&gt;
* mkinitcpio の実行時ライブでないブートプロセスの間にファイルシステムが必要な場合 (例えば LUKS の暗号化キーファイルが &#039;&#039;ext2&#039;&#039; ファイルシステム上にあって mkinitcpio の実行時には &#039;&#039;ext2&#039;&#039; ファイルシステムはマウントしない場合)、そのファイルシステムのモジュールも MODULES リストに追加する必要があります。詳しくは [[Dm-crypt/システム設定#cryptkey]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
=== BINARIES と FILES ===&lt;br /&gt;
&lt;br /&gt;
ユーザーはオプションを使ってイメージにファイルを追加することができます。{{ic|BINARIES}} と {{ic|FILES}} はフックが実行される前に追加され、フックによって使用されるファイルを上書きすることがあります。{{ic|BINARIES}} は標準の {{ic|PATH}} に自動で配置され、依存関係がパースされます。つまり必要なライブラリも全て追加されます。{{ic|FILES}} は&#039;&#039;そのままの状態で&#039;&#039; (as-is) 追加されます。例:&lt;br /&gt;
&lt;br /&gt;
 FILES=(/etc/modprobe.d/modprobe.conf)&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(kexec)&lt;br /&gt;
&lt;br /&gt;
{{ic|BINARIES}} と {{ic|FILES}} のどちらでも、スペースで区切ることで複数のエントリを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== HOOKS ===&lt;br /&gt;
&lt;br /&gt;
{{ic|HOOKS}} 設定は設定ファイルの中で一番重要な設定です。フックはイメージに追加されるものを記述する小さなスクリプトです。フックによっては、デーモンを起動したりスタックしたブロックデバイスを集めたりするためのランタイムコンポーネントを含んでいるものもあります。フックは名前によって参照され、設定ファイルの {{ic|HOOKS}} にある順番通りに実行されます。&lt;br /&gt;
&lt;br /&gt;
ほとんどのシンプルな、シングルディスクセットアップではデフォルトの {{ic|HOOKS}} 設定で十分なはずです。[[LVM]], [[mdadm]], [[dm-crypt]] などスタックした root デバイスやマルチブロックデバイスを使う時は、関連する wiki ページを見て必要な設定を調べて下さい。&lt;br /&gt;
&lt;br /&gt;
==== ビルドフック ====&lt;br /&gt;
&lt;br /&gt;
ビルドフックは {{ic|/usr/lib/initcpio/install/}} にあります。カスタムビルドフックは {{ic|/etc/initcpio/install/}} に配置します。これらのファイルは mkinitcpio の実行時に bash シェルによって実行されます。ビルドフックには２つの関数が含まれています: {{ic|build}} と {{ic|help}}。{{ic|build}} 関数にはイメージに追加するモジュール・ファイル・バイナリを記述します。これらのアイテムの追加を容易にする {{man|8|mkinitcpio}} による API が用意されています。{{ic|help}} 関数はフックの役割を出力します。&lt;br /&gt;
&lt;br /&gt;
すべてのフックを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ mkinitcpio -L&lt;br /&gt;
&lt;br /&gt;
特定のフックのヘルプを出力するには mkinitcpio の {{ic|-H}}/{{ic|--hookhelp}} オプションを使って下さい、例えば:&lt;br /&gt;
&lt;br /&gt;
 $ mkinitcpio -H udev&lt;br /&gt;
&lt;br /&gt;
==== ランタイムフック ====&lt;br /&gt;
&lt;br /&gt;
ランタイムフックは {{ic|/usr/lib/initcpio/hooks/}} にあります。カスタムランタイムフックは {{ic|/etc/initcpio/hooks/}} に配置します。全てのランタイムフックには同じ名前のビルドフックが存在している必要があり、そのビルドフックは {{ic|add_runscript}} をコールしてランタイムフックをイメージに追加します。これらのファイルは初期ユーザ空間で busybox の ash シェルによって実行されます。cleanup フックを除いて全てのフックは {{ic|HOOKS}} 設定の順番で実行されます。ランタイムフックには複数の関数を含めることができます:&lt;br /&gt;
&lt;br /&gt;
{{ic|run_earlyhook}}: API ファイルシステムがマウントされカーネルコマンドラインがパースされたときに、この名前の関数が実行されます。一般的に udev など初期ユーザ空間が始まったときに必要になる追加のデーモンはこの関数に置きます。&lt;br /&gt;
&lt;br /&gt;
{{ic|run_hook}}: 初期のフックの後すぐに、この名前の関数が実行されます。一番普通のフックポイントで、スタックブロックデバイスのアセンブリなどのオペレーションはここで行なって下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|run_latehook}}: root デバイスがマウントされた後、この名前の関数が実行されます。root デバイスの後のセットアップや {{ic|/usr}} など他のファイルシステムのマウントなどに控えめに使われます。&lt;br /&gt;
&lt;br /&gt;
{{ic|run_cleanuphook}}: 出来る限り最後に、この名前の関数が実行されます。設定ファイルの {{ic|HOOKS}} の順番とは逆に実行されます。これらのフックは初期のフックによって起動したデーモンのシャットダウンなど、最後のクリーンアップに使われます。&lt;br /&gt;
&lt;br /&gt;
{{Note|ランタイムフックは busyboxinit でのみ使用されます。 &#039;&#039;&#039;systemd&#039;&#039;&#039; フックは systemd ベースの init をトリガーします。これはランタイムフックを実行せず、代わりに systemd ユニットを使用します。}}&lt;br /&gt;
&lt;br /&gt;
==== 通常のフック ====&lt;br /&gt;
&lt;br /&gt;
通常のフックとイメージ生成への影響と関連するランタイムを示した表です。パッケージにカスタムフックを入れることができるので、この表は完全ではないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;現行のフック&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! busybox init !! systemd init !! [[#ビルドフック|ビルドフック]] !! [[#ランタイムフック|ランタイムフック]] (busybox init のみ)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;base&#039;&#039;&#039; || 全ての initial directory をセットアップし基本のユーティリティとライブラリをインストールする。何をしようとしているのかわからない限りはこのフックを一番最初のフックにしておいてください。&#039;&#039;&#039;systemd&#039;&#039;&#039; フックを使用している場合、busybox のリカバリシェルが提供されます。 {{Note|initramfs の root アカウントが [https://github.com/archlinux/svntogit-packages/commit/776743d220cbb56e9abca2cc8bcef3a0ab7c8d0a locked] されてるため、リカバリシェルは使用できません。}}&lt;br /&gt;
| --&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;udev&#039;&#039;&#039; ||rowspan=&amp;quot;3&amp;quot;  style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;systemd&#039;&#039;&#039; || イメージに udevd, udevadm, そして udev ルールの小さなサブセットを追加します。 || dev デーモンを起動してカーネルからの uevent を処理します。デバイスノードを作成します。ブートプロセスの単純化として、必要なモジュールを明示的に指定する必要をなくすため、udev フックの使用が推奨されています。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;usr&#039;&#039;&#039; || {{ic|/usr}} の分割パーティションのサポートを追加。 || real root がマウントされた後に {{ic|/usr}} パーティションをマウントします。&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;resume&#039;&#039;&#039; || -- || &amp;quot;ハイバネート&amp;quot; (suspend to disk) 状態からの復帰を試みます。詳しい設定方法は[[ハイバネート]]を見てください。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;btrfs&#039;&#039;&#039; || {{Grey|--}} || root で [[Btrfs]] を有効にしてサブボリュームを使用するために必要なモジュールを設定します。シングルデバイスで Btrfs を使うだけならこのフックは不要です。 || udev フックが存在しないときに {{ic|btrfs device scan}} を実行してマルチデバイスの Btrfs root ファイルシステムを構築します。このフックを使うには {{Pkg|btrfs-progs}} パッケージが必要です。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;autodetect&#039;&#039;&#039; || sysfs のスキャンによってモジュールのホワイトリストを作成して initramfs を小さくします。含まれているモジュールが正しく、欠けているものがないか確認してください。自動検知の利点を活かすためにこのフックは他の subsystem フックより前に実行してください。&#039;autodetect&#039; より前に置かれたフックは完全にインストールされます。 || --&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;modconf&#039;&#039;&#039; || {{ic|/etc/modprobe.d}} と {{ic|/usr/lib/modprobe.d/}} から modprobe 設定ファイルをロードします。 || --&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;block&#039;&#039;&#039; || 全てのブロックデバイスモジュールを追加します。昔は &#039;&#039;fw&#039;&#039;, &#039;&#039;mmc&#039;&#039;, &#039;&#039;pata&#039;&#039;, &#039;&#039;sata&#039;&#039;, &#039;&#039;scsi&#039;&#039; , &#039;&#039;usb&#039;&#039;, &#039;&#039;virtio&#039;&#039; フックに分かれていました。 || --&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;net&#039;&#039;&#039; || {{R|&#039;&#039;未実装&#039;&#039;}} || ネットワークデバイスに必要なモジュールを追加します。PCMCIA net デバイスには &#039;&#039;pcmcia&#039;&#039; フックも追加してください。 || NFS の root ファイルシステムの管理を提供します。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;dmraid&#039;&#039;&#039; || style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;?&#039;&#039; || fakeRAID root デバイスのサポートを提供します。これを使うには {{Pkg|dmraid}} をインストールする必要があります。コントローラがサポートしている場合、fakeRAID では &#039;&#039;mdadm_udev&#039;&#039; フックと一緒に {{ic|mdadm}} を使うことが推奨されます。 || {{ic|dmraid}} を使用して fakeRAID ブロックデバイスを構築します。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;mdadm&#039;&#039;&#039; || {{Grey|--}} || {{ic|/etc/mdadm.conf}} からの RAID アレイの構築や、起動中の自動検出のサポートを提供します。これを使うには {{Pkg|mdadm}} のインストールが必須です。このフックよりも &#039;&#039;mdadm_udev&#039;&#039; フックが推奨されています。 || {{ic|mdassemble}} を使ってソフトウェア RAID ブロックデバイスを構築します。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;mdadm_udev&#039;&#039;&#039; || udev による RAID アレイの構築のサポートを提供します。これを使うには {{Pkg|mdadm}} のインストールが必要です。[[FakeRAID]] アレイでこのフックを使う場合、binaries セクションに {{ic|mdmon}} を含めて &#039;&#039;shutdown&#039;&#039; フックを追加することが推奨されます。再起動時に不必要な RAID を再ビルドしないためです。 || {{ic|udev}} と {{ic|mdadm}} を使ってソフトウェア RAID ブロックデバイスを動的に構築します。mdadm アセンブリの推奨方法です (上記の &#039;&#039;mdadm&#039;&#039; フックを使うよりも)。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;keyboard&#039;&#039;&#039; || キーボードデバイスに必要なモジュールを追加します。あなたが USB キーボードを使っていて、それを初期ユーザ空間で使う必要があるとき (暗号化のパスフレーズを入力したりインタラクティブシェルを使う場合) はこのフックを使って下さい。副作用としてキーボード以外の入力デバイス用のモジュールが追加されることがありますが、困ることはないはずです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|異なるハードウェア構成で起動されるシステム(たとえば、外部キーボードと内部キーボードを備えたラップトップまたは [[Wikipedia:Headless computer|headless systems]]) の場合、このフックを &#039;&#039;&#039;自動検出&#039;&#039;&#039; の前に配置すると便利です。 常にすべてのキーボードドライバを含めるため。 それ以外の場合、外部キーボードは、イメージの作成時に接続されている場合にのみ、初期のユーザースペースで機能します。}}&lt;br /&gt;
|| --&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;keymap&#039;&#039;&#039; ||rowspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;sd-vconsole&#039;&#039;&#039; || {{ic|/etc/vconsole.conf}} から initramfs に指定したキーマップを追加します。システム暗号化 (特に[[Dm-crypt/システム全体の暗号化|完全なシステム暗号化]]) を使用する場合、{{ic|1=encrypt}} フックよりも前に追加するようにしてください。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたキーマップをロードします。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;consolefont&#039;&#039;&#039; || {{ic|/etc/vconsole.conf}} から initramfs に指定したコンソールフォントを追加します。 || 初期ユーザ空間で {{ic|/etc/vconsole.conf}} から指定されたコンソールフォントをロードします。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;encrypt&#039;&#039;&#039; || style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;sd-encrypt&#039;&#039;&#039; || {{ic|dm_crypt}} カーネルモジュールと {{ic|cryptsetup}} ツールをイメージに追加します。これを使うには {{Pkg|cryptsetup}} をインストールする必要があります。 || 暗号化された root パーティションを検知してアンロックします。設定については [[#ランタイムのカスタマイズ]] を見て下さい。&#039;&#039;&#039;sd-encrypt&#039;&#039;&#039; については [[Dm-crypt/システム設定#sd-encrypt フックを使う]]を見てください。&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;lvm2&#039;&#039;&#039; || style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;sd-lvm2&#039;&#039;&#039; || device mapper カーネルモジュールと {{ic|lvm}} ツールをイメージに追加します。これを使うには {{Pkg|lvm2}} をインストールする必要があります。 || 全ての LVM2 ボリュームグループを有効にします。root ファイルシステムが [[LVM]] 上にある場合は必須です。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;fsck&#039;&#039;&#039; || fsck バイナリとファイルシステム特有のヘルパーを追加します。&#039;&#039;autodetect&#039;&#039; フックの後ろに追加した場合、root ファイルシステムのヘルパーだけが追加されます。このフックの使用は強く推奨されており、{{ic|/usr}} パーティションを分割する場合は必須です。 || root デバイス (と分割している場合は {{ic|/usr}}) に対してマウントする前に fsck を実行します。ブートローダーのデフォルト設定で問題ありませんが、疑問がある場合は [https://bbs.archlinux.org/viewtopic.php?pid=1307895#p1307895 こちらの設定] を読んで下さい。&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center;&amp;quot;| &#039;&#039;&#039;filesystems&#039;&#039;&#039; || イメージに必要なファイルシステムモジュールを含めます。ファイルシステムモジュールを MODULES で指定していない限りこのフックが必要になります。 || --&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 廃止されたフック ====&lt;br /&gt;
{{Pkg|mkinitcpio}} 0.13.0 では、{{ic|usbinput}} フックは廃止され {{ic|keyboard}} フックを使うようになりました。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|mkinitcpio}} 0.12.0 では、以下のフックが廃止されました。以下のフックのどれかを使っているときは、{{ic|block}} フックに置き換える必要があります。&lt;br /&gt;
&lt;br /&gt;
*{{ic|fw}}&lt;br /&gt;
*{{ic|mmc}}&lt;br /&gt;
*{{ic|pata}}&lt;br /&gt;
*{{ic|sata}}&lt;br /&gt;
*{{ic|scsi}}&lt;br /&gt;
*{{ic|usb}}&lt;br /&gt;
*{{ic|virtio}}&lt;br /&gt;
&lt;br /&gt;
詳しくは、Git コミット [https://projects.archlinux.org/mkinitcpio.git/commit/?id=97368c0e78f3a4fe4d62f7aedde88d4be13bfdba 97368c0e78] や [https://mailman.archlinux.org/pipermail/arch-projects/2012-November/003426.html arch-projects メーリングリスト]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== COMPRESSION ===&lt;br /&gt;
&lt;br /&gt;
カーネルは、 initramfs の圧縮にいくつかの形式をサポートしています: {{pkg|gzip}}、 {{pkg|bzip2}}、 lzma、 {{pkg|xz}}、 {{pkg|lzo}}、 {{pkg|lz4}} および {{pkg|zstd}} mkinitcpio はデフォルトで zstd 圧縮イメージを使用します。 zstd 圧縮はマルチスレッドモードで実行されます (検出されたコアと同じ数のスレッドを使用します。 {{ic|-T 0}} オプションを使用)&lt;br /&gt;
&lt;br /&gt;
提供されている {{ic|mkinitcpio.conf}} には、さまざまな {{ic|COMPRESSION}} オプションがコメントアウトされています。別の圧縮方法に切り替える場合は、コメントを解除し、対応する圧縮ユーティリティがインストールされていることを確認します。何も指定しない場合は、zstdのデフォルトのメソッドが使用されます。非圧縮イメージを作成する場合は、設定ファイルで {{ic|1=COMPRESSION=&#039;&#039;&#039;cat&#039;&#039;&#039;}} を指定するか、コマンドラインで {{ic|-z cat}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|高圧縮モード (-9) のイメージの圧縮比は通常の約2.5で、解凍速度が非常に速いため、 &#039;&#039;&#039;lz4&#039;&#039;&#039; はより遅いシングルスレッド圧縮を犠牲にして最も速い解凍速度を実現します。わずかに優れた圧縮の、lzo も解凍が速いです。zstd は、マルチスレッド圧縮と、そのオプションを使用した幅広い圧縮レベルを備えた汎用的なソリューションを提供します。 {{man|1|zstd|Operation modifiers}} を参照してください。 xz は、解凍速度がはるかに遅くなりますが、高圧縮プリセット (-9) で約5の縮小係数で最小サイズを実現します。}}&lt;br /&gt;
&lt;br /&gt;
=== COMPRESSION_OPTIONS ===&lt;br /&gt;
&lt;br /&gt;
{{ic|COMPRESSION}} で指定したプログラムに渡す追加のフラグを記述します、例:&lt;br /&gt;
&lt;br /&gt;
 COMPRESSION_OPTIONS=(-9)&lt;br /&gt;
&lt;br /&gt;
mkinitcpio はイメージを作成するときサポートされている圧縮方法に必要なフラグを渡すので、通常はこのオプションは必要ありません。なお、カーネルが作成された圧縮ファイルを解凍できないとき、このオプションを使っていないとシステムをブートできなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
== ランタイムのカスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
ランタイム設定オプションはカーネルコマンドラインを通して {{ic|init}} や特定のフックに渡すことができます。カーネルコマンドラインパラメータはブートローダによって与えられることがほとんどです。下で書かれているオプションをカーネルコマンドラインに追加することでデフォルトの挙動を変えることができます。詳しくは[[カーネルパラメータ]]や [[Arch ブートプロセス]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== init ===&lt;br /&gt;
&lt;br /&gt;
; {{ic|root}}: カーネルコマンドラインで指定する一番重要なパラメータであり、どのデバイスを root デバイスとしてマウントするかを決めます。mkinitcpio は柔軟に様々な形式を使うことができるようになっています、例:&lt;br /&gt;
 root=/dev/sda1                                                # /dev node&lt;br /&gt;
 root=LABEL=CorsairF80                                         # label&lt;br /&gt;
 root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207                # UUID&lt;br /&gt;
 root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660            # GPT partition UUID&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のブートパラメーターは initramfs 環境における {{ic|init}} のデフォルトの挙動を変更します。詳しくは {{ic|/usr/lib/initcpio/init}} を参照。{{ic|systemd}} フックが使われている場合 {{ic|base}} フックの {{ic|init}} は置き換わるため機能しません。}}&lt;br /&gt;
&lt;br /&gt;
; {{ic|break}}: {{ic|&amp;lt;nowiki&amp;gt;break&amp;lt;/nowiki&amp;gt;}} や {{ic|&amp;lt;nowiki&amp;gt;break=premount&amp;lt;/nowiki&amp;gt;}} が指定された場合、(フックをロードした後、root ファイルシステムをマウントする前に) {{ic|init}} はブートプロセスを停止してトラブルシューティングに使うことができるインタラクティブシェルを起動します。{{ic|&amp;lt;nowiki&amp;gt;break=postmount&amp;lt;/nowiki&amp;gt;}} と指定することで root がマウントされた後にこのシェルを起動することもできます。シェルを終了すると通常通りに起動が行われます。&lt;br /&gt;
&lt;br /&gt;
; {{ic|disablehooks}}: {{ic|&amp;lt;nowiki&amp;gt;disablehooks=hook1{,hook2,...}&amp;lt;/nowiki&amp;gt;}} を追加すると実行時にフックを無効化します。例: {{bc|1=disablehooks=resume}}&lt;br /&gt;
&lt;br /&gt;
; {{ic|earlymodules}}: {{ic|&amp;lt;nowiki&amp;gt;earlymodules=mod1{,mod2,...}&amp;lt;/nowiki&amp;gt;}} という風に先にロードするモジュールを指定することでモジュールがロードされる順番を変更することができます (例えば、複数のネットワークインターフェイスの順番を適切に確定したいときなどに使います)。&lt;br /&gt;
&lt;br /&gt;
; {{ic|rootdelay&amp;amp;#61;N}}: {{ic|rootdelay}} を追加すると root ファイルシステムをマウントする前に {{ic|N}} 秒間だけ停止します (例えば、初期化に時間がかかる USB ハードドライブから起動するときなどに使います)。&lt;br /&gt;
&lt;br /&gt;
他のパラメータについては[[ブートデバッグ]]や {{man|8|mkinitcpio}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== RAID を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|mdadm}} は推奨されません。更新時に {{ic|1===&amp;gt; WARNING: Hook &#039;mdadm&#039; is deprecated. Replace it with &#039;mdadm_udev&#039; in your config}} が表示されます。}}&lt;br /&gt;
&lt;br /&gt;
まず、{{ic|/etc/mkinitcpio.conf}} 内の {{ic|HOOKS}} に {{ic|mdadm_udev}} または {{ic|mdadm}} フックを追加し、必要な RAID モジュール全て (例: raid456, ext4) を {{ic|MODULES}} に追加して下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|mdadm}} フックを使う場合、[[カーネルパラメータ]]で RAID アレイを設定する必要はありません。{{ic|mdadm}} フックは {{ic|/etc/mdadm.conf}} ファイルを使うか、またはブート時の init 段階でアレイを自動で検出します。&lt;br /&gt;
&lt;br /&gt;
{{ic|mdadm_udev}} フックを使うことで udev による構築も可能です。上流ではこの方法が推奨されています。{{ic|/etc/mdadm.conf}} は構築されたデバイスに名前を付けるために読み込まれます。&lt;br /&gt;
&lt;br /&gt;
=== net を使う ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|NFSv4 はまだサポートされていません ({{Bug|28287}})。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;必要なパッケージ:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|net}} は {{Pkg|mkinitcpio-nfs-utils}} パッケージを必要とします。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;カーネルパラメータ:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
公式の[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]に最新の情報が載っています。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ip=&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
このパラメータはカーネルに、デバイスの IP アドレスの設定方法と、IP ルーティングテーブルの設定方法を指定します。コロンで区切った9つの引数を指定できます: {{ic|1=ip=&amp;lt;client-ip&amp;gt;:&amp;lt;server-ip&amp;gt;:&amp;lt;gw-ip&amp;gt;:&amp;lt;netmask&amp;gt;:&amp;lt;hostname&amp;gt;:&amp;lt;device&amp;gt;:&amp;lt;autoconf&amp;gt;:&amp;lt;dns0-ip&amp;gt;:&amp;lt;dns1-ip&amp;gt;}}。&lt;br /&gt;
&lt;br /&gt;
カーネルコマンドラインにこのパラメータが存在しなかった場合、全てのフィールドが空とされて、[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]に書かれているデフォルト設定が適用されます。一般的にはカーネルは自動設定を使って全てを設定しようとします。&lt;br /&gt;
&lt;br /&gt;
{{ic|&amp;lt;autoconf&amp;gt;}} パラメータは &#039;ip&#039; パラメータの唯一の値として指定できます (前の全ての &#039;:&#039; 文字を排除)。値が {{ic|1=ip=off}} や {{ic|1=ip=none}} の場合、自動設定は行われません。そうでないなら、自動的に設定されます。最も一般的な使い方は {{ic|1=ip=dhcp}} です。&lt;br /&gt;
&lt;br /&gt;
パラメータの説明は、[https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt カーネルドキュメント]を参照してください。&lt;br /&gt;
  &lt;br /&gt;
; 例&lt;br /&gt;
 ip=127.0.0.1:::::lo:none  --&amp;gt; Enable the loopback interface.&lt;br /&gt;
 ip=192.168.1.1:::::eth2:none --&amp;gt; Enable static eth2 interface.&lt;br /&gt;
 ip=:::::eth0:dhcp --&amp;gt; Enable dhcp protocol for eth0 configuration.&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|&amp;lt;device&amp;gt;}} パラメータにはカーネルのデバイス名を使用してください (例: &#039;&#039;eth0&#039;&#039;)、[[ネットワーク設定#デバイス名|udev]] のデバイス名 (例: &#039;&#039;enp2s0&#039;&#039;) では動作しません。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BOOTIF=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
複数のネットワークカードを使っているときは、このパラメータに起動するインターフェイスの MAC アドレスを含めることができます。インターフェイスの数字が変わってしまったり、pxelinux の IPAPPEND 2 や IPAPPEND 3 オプションを使うときに便利です。指定しなかった場合、eth0 が使われます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;例:&#039;&#039;&lt;br /&gt;
 BOOTIF=01-A1-B2-C3-D4-E5-F6  # Note the prepended &amp;quot;01-&amp;quot; and capital letters.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nfsroot=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|nfsroot}} パラメータがコマンドラインで指定されなかった場合、デフォルトで {{ic|/tftpboot/%s}} が使われます。&lt;br /&gt;
&lt;br /&gt;
 nfsroot=[&amp;lt;server-ip&amp;gt;:]&amp;lt;root-dir&amp;gt;[,&amp;lt;nfs-options&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
パラメータの説明を見るには {{ic|mkinitcpio -H net}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;root=/dev/nfs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|nfsroot}} パラメータを使わない場合、{{ic|1=root=/dev/nfs}} を設定して自動設定により NFS root から起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== LVM を使う ===&lt;br /&gt;
&lt;br /&gt;
root デバイスを [[LVM]] 上に置く場合は、[[LVM#mkinitcpio.conf の設定|lvm2 フックを mkinitcpio.conf に追加する]]必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 暗号化された root を使う ===&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt/システム全体の暗号化|root を暗号化]]している場合、{{ic|filesystems}} の前に {{ic|encrypt}} フックを追加する必要があり、他のフックも必要になります。ブートローダーによって特定のカーネルコマンドラインパラメータを指定しなくてはなりません: 詳しくは [[Dm-crypt/システム設定#mkinitcpio]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== /usr パーティションを分割する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr}} のパーティションを別にする場合、以下を行う必要があります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|fsck}} フックを追加して、{{ic|/etc/fstab}} で {{ic|/usr}} の {{ic|passno}} を {{ic|0}} にする。起動時に {{ic|/usr}} を fsck したい場合は必須です。このフックが存在しないと、{{ic|/usr}} は永遠に fsck されません。&lt;br /&gt;
* systemd フックを使っていない場合、{{ic|usr}} フックを追加。ルートがマウントされた後に {{ic|/usr}} パーティションがマウントされるようになります。0.9.0 以前では、{{ic|/usr}} はルートの {{ic|/etc/fstab}} で確認されたら自動的にマウントされていました。[[Fstab]] を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== イメージの展開 ===&lt;br /&gt;
&lt;br /&gt;
initramfs イメージの中に何が入っているか気になるときは、イメージを展開して中に入っているファイルを調べることができます。&lt;br /&gt;
&lt;br /&gt;
initramfs イメージは SVR4 CPIO アーカイブであり、{{ic|find}} と {{ic|bsdcpio}} コマンドによって生成されています。また、任意でカーネルが対応した圧縮方法によって圧縮されています。圧縮方法について詳しくは [[#COMPRESSION]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
mkinitcpio には {{ic|lsinitcpio}} というユーティリティが含まれており initramfs イメージの中身を一覧・展開することができます。&lt;br /&gt;
&lt;br /&gt;
イメージ内のファイルを一覧するには:&lt;br /&gt;
 $ lsinitcpio /boot/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
作業ディレクトリにファイルを全て展開するには:&lt;br /&gt;
 $ lsinitcpio -x /boot/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
イメージの重要なパーツについて読みやすいリストを取得することもできます:&lt;br /&gt;
 $ lsinitcpio -a /boot/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
=== 展開して修正を加えたイメージの再圧縮 ===&lt;br /&gt;
上記のようにイメージを展開してから修正を加えたら、再圧縮に必要なコマンドを確認します。{{ic|/usr/bin/mkinitcpio}} を編集して以下のように行を変更してください (mkinitcpio v20-1 の場合は531行目):&lt;br /&gt;
 #MKINITCPIO_PROCESS_PRESET=1 &amp;quot;$0&amp;quot; &amp;quot;${preset_cmd[@]}&amp;quot;&lt;br /&gt;
 MKINITCPIO_PROCESS_PRESET=1 /usr/bin/bash -x &amp;quot;$0&amp;quot; &amp;quot;${preset_cmd[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして通常のオプションで {{ic|mkinitcpio}} を実行 ({{ic|mkinitcpio -p linux}}) すると、最後の20行に以下のような表示がされます:&lt;br /&gt;
 + find -mindepth 1 -printf &#039;%P\0&#039;&lt;br /&gt;
 + LANG=C&lt;br /&gt;
 + bsdcpio -0 -o -H newc --quiet&lt;br /&gt;
 + gzip&lt;br /&gt;
&lt;br /&gt;
上記の出力が再圧縮するのに必要なコマンドになります。例:&lt;br /&gt;
 # find -mindepth 1 -printf &#039;%P\0&#039; | LANG=C bsdcpio -0 -o -H newc --quiet | gzip &amp;gt; /boot/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Warning|上書きするまえに自動生成された {{ic|/boot/initramfs-linux.img}} の名前を変更することで、簡単に元に戻すことができるようになります。何か問題が発生して起動できなくなった場合、フォールバックイメージやブート CD で起動して、{{ic|mkinitcpio}} を実行して元のイメージに戻してください。}}&lt;br /&gt;
&lt;br /&gt;
=== マウントされているのに &amp;quot;/dev must be mounted&amp;quot; と表示される ===&lt;br /&gt;
{{ic|/dev}} がマウントされているかどうか確認するのに mkinitcpio は {{ic|/dev/fd/}} が存在するかどうかを確かめます。問題がないようでしたら、手動で作成することができます:&lt;br /&gt;
 # ln -s /proc/self/fd /dev/&lt;br /&gt;
&lt;br /&gt;
当然 {{ic|/proc}} のマウントも必要です。mkinitcpio によって次にチェックされます。&lt;br /&gt;
&lt;br /&gt;
=== LUKS/LVM/resume セットアップで systemd フックを使う ===&lt;br /&gt;
伝統的な {{ic|encrypt}}/{{ic|lvm2}}/{{ic|resume}} の代わりに {{ic|systemd}}/{{ic|sd-encrypt}}/{{ic|sd-lvm2}} フックを使う場合、ブートローダーで別の initrd パラメータを渡す必要があります。詳しくはフォーラムの投稿を見て下さい [https://bbs.archlinux.org/viewtopic.php?pid=1480241]。&lt;br /&gt;
&lt;br /&gt;
=== Possibly missing firmware for module XXXX ===&lt;br /&gt;
&lt;br /&gt;
カーネルのアップデート後に initramfs を再生成する際、以下のような警告が表示されることがあります:&lt;br /&gt;
&lt;br /&gt;
 ==&amp;gt; WARNING: Possibly missing firmware for module: aic94xx&lt;br /&gt;
 ==&amp;gt; WARNING: Possibly missing firmware for module: wd719x &lt;br /&gt;
&lt;br /&gt;
ファームウェアモジュールをインストールしていない Arch Linux ユーザーなら誰でも表示されます。ファームウェアを使用するハードウェアを使っていない場合、上記のメッセージは無視してかまいません。&lt;br /&gt;
&lt;br /&gt;
=== 標準的なレスキュー手順 ===&lt;br /&gt;
&lt;br /&gt;
不適切な初期 RAM ディスクを使用すると、システムが起動できなくなることがよくあります。 したがって、以下のようなシステムレスキュー手順に従ってください。&lt;br /&gt;
&lt;br /&gt;
==== あるマシンでは起動できるが他のマシンでは起動できない ====&lt;br /&gt;
&#039;&#039;mkinitcpio&#039;&#039; の {{ic|autodetect}} フックは {{ic|/sys}} をスキャンしてロードされているカーネルモジュールを確認して不要な[[カーネルモジュール]]を排除します。{{ic|/boot}} ディレクトリを他のマシンに移動して、初期ユーザー空間でブートが失敗する場合、カーネルモジュールが存在しないために新しいハードウェアが検出されていないのが原因かもしれません。USB 2.0 と 3.0 では必要なカーネルモジュールが異なるので注意してください。&lt;br /&gt;
&lt;br /&gt;
修正するには、[[ブートローダー]]から [[#イメージ作成とアクティベーション|fallback]] イメージを選択してください (fallback は {{ic|autodetect}} によるフィルタリングがされていません)。起動したら、新しいマシンで &#039;&#039;mkinitcpio&#039;&#039; を実行して適切なモジュールでイメージを再生成してください。fallback イメージで起動できない場合、Arch Linux のライブ CD/USB で起動して、chroot し、新しいマシンで &#039;&#039;mkinitcpio&#039;&#039; を実行して下さい。それでも駄目な場合、initramfs にモジュールを[[#MODULES|手動]]で追加します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* Linux カーネルドキュメントの [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/filesystems/ramfs-rootfs-initramfs.txt?id=HEAD initramfs] &#039;&#039;What is rootfs?&#039;&#039; でページ内を検索してください&lt;br /&gt;
* Linux カーネルドキュメントの [https://doc.kusakata.com/admin-guide/initrd.html initrd]&lt;br /&gt;
* [[Wikipedia:ja:initrd]]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=21280</id>
		<title>Systemd-boot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Systemd-boot&amp;diff=21280"/>
		<updated>2021-08-13T04:03:20Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: &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;
[[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) または画面上のメニューで選択されます。systemd-boot は systemd 220-2 から [[systemd]] に同梱されるようになりました。&lt;br /&gt;
&lt;br /&gt;
systemd-boot は簡単に設定することができ、Linux カーネルの [[EFISTUB]] や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&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}} コマンドを実行することでチェックできます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; は [[EFI システムパーティション]] (ESP) からしか [[EFISTUB]] カーネルをロードできません。カーネルを最新状態に保つために、ESP は {{ic|/boot}} にマウントすることが&#039;&#039;&#039;推奨&#039;&#039;&#039;されています。ESP を {{ic|/boot}} にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは [[EFISTUB#他の ESP マウントポイント]]を見てください。&lt;br /&gt;
&lt;br /&gt;
このページでは ESP のマウントポイントを {{ic|&#039;&#039;esp&#039;&#039;}} として表します (大抵の場合は {{ic|/boot}} です)。&lt;br /&gt;
&lt;br /&gt;
ESP が {{ic|&#039;&#039;esp&#039;&#039;}} にマウントされているとして、{{man|1|bootctl}} を使用して EFI システムパーティションに &#039;&#039;systemd-boot&#039;&#039; をインストールします:&lt;br /&gt;
 # bootctl --path=&#039;&#039;esp&#039;&#039; install&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで &#039;&#039;systemd-boot&#039;&#039; ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ {{ic|&#039;&#039;esp&#039;&#039;/EFI/systemd/systemd-bootx64.efi}} と {{ic|&#039;&#039;esp&#039;&#039;/EFI/Boot/BOOTX64.EFI}} が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として &#039;&#039;systemd-boot&#039;&#039; が設定されます。&lt;br /&gt;
&lt;br /&gt;
インストールしたら、[[#設定]]セクションに進んで &#039;&#039;systemd-boot&#039;&#039; を正しく機能させるために必要なブートローダーを追加してください。&lt;br /&gt;
&lt;br /&gt;
=== XBOOTLDR を使用したインストール ===&lt;br /&gt;
&lt;br /&gt;
​systemd バージョン 242 以降では、カーネルと initramfs を {{ic|&#039;&#039;esp&#039;&#039;}} パーティションから分離するために、 {{ic|&amp;quot;Linux extended boot&amp;quot;}} タイプの別の {{ic|&#039;&#039;boot&#039;&#039;}} パーティションを作成することができます。​ XBOOTLDR [https://systemd.io/BOOT_LOADER_SPECIFICATION] のパーティションタイプ GUID は {{ic|&amp;quot;bc13c2ff-59e6-4262-a352-b275fd6f7172}} である必要があります。&lt;br /&gt;
&lt;br /&gt;
これは、既存の [[EFI システムパーティション]] が小さすぎる [[Windows と Arch のデュアルブート]] 時に特に役立ちます。 それ以外の場合は、通常どおり{{ic|&#039;&#039;esp&#039;&#039;}} パーティションを作成し、同じ物理ドライブに {{ic|&#039;&#039;boot&#039;&#039;}} 用に別のパーティションを作成します。 {{ic|&#039;&#039;boot&#039;&#039;}} のサイズは、インストールするすべてのカーネルを収容するのに十分なはずです。&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;
インストール中に、{{ic|&#039;&#039;esp&#039;&#039;}} を {{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;
インストールを完了するには [[#Configuration|configure]] &#039;&#039;systemd-boot&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== EFI ブートマネージャの更新 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd-boot&#039;&#039; の新しいバージョンがある場合は、ユーザーが任意でブートマネージャを再インストールできます。手動で実行することも、pacman フックを使用して更新を自動的にトリガすることもできます。その後、2つのアプローチについて説明します。&lt;br /&gt;
&lt;br /&gt;
{{Note|ブートマネージャーはスタンドアロン EFI 実行可能ファイルで、任意のバージョンを使用してシステムをブートできます (pacman は systemd-boot 自体ではなく、systemd-boot インストーラーのみをインストールするため、部分的な更新は適用されません。) ただし、新しいバージョンでは新しい機能が追加されたりバグが修正されたりする可能性があるため、いずれにしても更新することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
==== 手動で更新 ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bootctl&#039;&#039; を使用して &#039;&#039;systemd-boot&#039;&#039; をアップデートしてください。{{ic|path}} パラメータを指定しなかった場合 {{ic|/efi}}, {{ic|/boot}}, {{ic|/boot/efi}} がチェックされます。&lt;br /&gt;
&lt;br /&gt;
 # bootctl update&lt;br /&gt;
&lt;br /&gt;
ESP を別の場所にマウントしている場合、{{ic|path}} オプションを以下のように指定します:&lt;br /&gt;
&lt;br /&gt;
 # bootctl --path=&#039;&#039;esp&#039;&#039; update&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;gummiboot&#039;&#039; から移行する場合、上記のコマンドを使用してからパッケージを削除してください。パッケージを既に削除している場合、{{ic|1=bootctl --path=&#039;&#039;esp&#039;&#039; install}} を実行してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 自動で更新 ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|systemd-boot-pacman-hook}} パッケージには上記のアップデートを自動化する [[Pacman フック]]が含まれています。パッケージを[[インストール]]すると {{Pkg|systemd}} パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、{{ic|/etc/pacman.d/hooks/}} ディレクトリに以下の pacman フックを作成することでも自動更新できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/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 = Updating systemd-boot&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/bootctl update&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88 セキュアブート] を有効にしている場合は、 pacman フックをインストールして、カーネルと systemd-boot が更新されたときに自動的に再署名することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pacman.d/hooks/99-secureboot.hook|2=&lt;br /&gt;
[Trigger]&lt;br /&gt;
Operation = Install&lt;br /&gt;
Operation = Upgrade&lt;br /&gt;
Type = Package&lt;br /&gt;
Target = linux&lt;br /&gt;
Target = systemd&lt;br /&gt;
&lt;br /&gt;
[Action]&lt;br /&gt;
Description = Signing Kernel for SecureBoot&lt;br /&gt;
When = PostTransaction&lt;br /&gt;
Exec = /usr/bin/sh -c &amp;quot;/usr/bin/find /boot/ -type f \( -name &#039;vmlinuz-*&#039; -o -name &#039;systemd*&#039; \) -exec /usr/bin/sh -c &#039;if ! /usr/bin/sbverify --list {} 2&amp;gt;/dev/null {{!}} /usr/bin/grep -q \&amp;quot;signature certificates\&amp;quot;; then /usr/bin/sbsign --key db.key --cert db.crt --output {} {}; fi&#039; \;&amp;quot;&lt;br /&gt;
Depends = sbsigntools&lt;br /&gt;
Depends = findutils&lt;br /&gt;
Depends = grep&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいパッケージを追加するたびに、 {{ic|Target}} を複製する必要があります。 {{ic|find}} ステートメントに関しては、ファイル名の条件があり、APLM フックがスペースで分割されているため、フックが適切に解析されるように、ステートメント全体を引用符で囲む必要がありました。 systemd-boot はサブディレクトリにあるため、 {{ic|-maxdepth}} 引数を削除するように、深さも調整する必要がありました。 煩わしさを避けるために、確信が持てない場合は、テストするパッケージを再インストールして、フックと署名部分が正常に処理されるかどうかを確認してください。 詳細については、 [[Pacman#フック]] または {{man|5|alpm-hooks}} を参照してください。&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}} ファイルに保存され、以下のオプションで設定します:&lt;br /&gt;
&lt;br /&gt;
* {{ic|default}} – [[#ローダーの追加]]で定義されるデフォルト選択エントリ。{{ic|.conf}} 拡張子は付けず、{{ic|arch-*}} のようにワイルドカードを使うこともできます。&lt;br /&gt;
* {{ic|timeout}} – デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中に {{ic|Space}} キーを押した時だけメニューが表示されます。&lt;br /&gt;
* {{ic|editor}} - カーネルパラメータの編集を可能にするかどうかの設定。{{ic|yes}} (デフォルト) は可能になり、{{ic|no}} は無効になります。{{ic|1=init=/bin/bash}} を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは {{ic|no}} に設定することが強く推奨されています。&lt;br /&gt;
* {{ic|auto-entries}} – {{ic|1}} (デフォルト) に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、{{ic|0}} の場合は表示しません。&lt;br /&gt;
* {{ic|auto-firmware}} – {{ic|1}} (デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、{{ic|0}} に設定した場合は表示しません。&lt;br /&gt;
* {{ic|console-mode}} – UEFI コンソールモードを変更します:&lt;br /&gt;
** {{ic|0}} の場合は 80x25;&lt;br /&gt;
** {{ic|1}} の場合は 80x50;&lt;br /&gt;
** {{ic|2}} 以上の場合はデバイスファームウェアによって提供されている非標準モード;&lt;br /&gt;
** {{ic|auto}} は適切なモードを自動的に選択します;&lt;br /&gt;
** {{ic|max}} ​は一番解像度が高いモード;&lt;br /&gt;
** {{ic|keep}} ​(デフォルト) はファームウェアが選択したモードを維持します;&lt;br /&gt;
* {{ic|random-seed-mode}} - ファイル {{ic|&#039;&#039;esp&#039;&#039;/loader/random-seed}} からランダムシードを読み取るかどうかを制御します。 {{ic|with-system-token}} (デフォルト)に設定すると、EFI 変数 {{ic|LoaderSystemToken}} が設定されている場合にのみファイルからシードがロードされます。 {{ic|always}} に設定すると、 EFI 変数が設定されていなくても、ファイルからシードが読み込まれます。 {{ic|off}} に設定すると、ファイルは無視されます。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションの完全な一覧は {{man|5|loader.conf}} を参照。&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;
&lt;br /&gt;
=== ローダーの追加 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bootctl&#039;&#039; は {{ic|&#039;&#039;esp&#039;&#039;/loader/entries/*.conf}} からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション:&lt;br /&gt;
&lt;br /&gt;
* {{ic|title}} – オペレーティングシステムの名前。&#039;&#039;&#039;必須。&#039;&#039;&#039;&lt;br /&gt;
* {{ic|version}} – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。&lt;br /&gt;
* {{ic|machine-id}} – {{ic|/etc/machine-id}} のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。&lt;br /&gt;
* {{ic|efi}} – 起動する EFI プログラム、ESP ({{ic|/boot}}) からの相対パス。例: {{ic|/vmlinuz-linux}}。このオプションか {{ic|linux}} (下を参照) のどちらか一方が&#039;&#039;&#039;必須&#039;&#039;&#039;です。&lt;br /&gt;
* {{ic|options}} – EFI プログラムに渡すコマンドラインオプションまたは[[カーネルパラメータ]]。任意ですが、Linux を起動する場合 {{ic|1=initrd=&#039;&#039;efipath&#039;&#039;}} と {{ic|1=root=&#039;&#039;dev&#039;&#039;}} が最低限必要になります。&lt;br /&gt;
&lt;br /&gt;
Linux を起動する場合、{{ic|efi}} と {{ic|options}} を使う代わりに以下のオプションが使用できます:&lt;br /&gt;
* {{ic|linux}} と {{ic|initrd}} で ESP の適切なファイルの相対パスを指定します。例: {{ic|/vmlinuz-linux}}。この値は自動で {{ic|efi &#039;&#039;path&#039;&#039;}} と {{ic|1=options initrd=&#039;&#039;path&#039;&#039;}} に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;arch_os&#039;&#039; というラベルが付いたパーティションから Arch を起動して Intel CPU の[[マイクロコード]]をロードするローダーファイルの例:&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  /intel-ucode.img&lt;br /&gt;
initrd  /initramfs-linux.img&lt;br /&gt;
options root=LABEL=&#039;&#039;arch_os&#039;&#039; rw}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bootctl&#039;&#039; は自動的に &amp;quot;Windows Boot Manager&amp;quot; ({{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}), &amp;quot;EFI Shell&amp;quot; ({{ic|/shellx64.efi}}), &amp;quot;EFI Default Loader&amp;quot; ({{ic|/EFI/BOOT/bootx64.efi}}) をチェックします。また、{{ic|/EFI/Linux}} にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます ({{ic|auto-windows}}, {{ic|auto-efi-shell}}, {{ic|auto-efi-default}})。これらのエントリを手動でローダー設定する必要はありません。ただし、([[rEFInd]] など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Windows とデュアルブートする場合、Windows のデフォルトオプションである[[Windows と Arch のデュアルブート#高速スタートアップ|高速スタートアップ]]を無効にすることを強く推奨します。&lt;br /&gt;
* 必要な場合は {{ic|initrd}} で Intel のマイクロコードをロードしてください。例は[[マイクロコード#systemd-boot]] を参照。&lt;br /&gt;
* {{ic|1=blkid -s PARTUUID -o value /dev/sd&#039;&#039;xY&#039;&#039;}} コマンドを使うことで root パーティションの PARTUUID を確認できます。{{ic|&#039;&#039;x&#039;&#039;}} はデバイス文字、{{ic|&#039;&#039;Y&#039;&#039;}} はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。{{ic|&#039;&#039;esp&#039;&#039;}} は確認する必要がありません。&lt;br /&gt;
}}&lt;br /&gt;
&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]] などで必要な[[カーネルパラメータ]]についてはそれぞれのページを確認してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== EFI シェルや他の EFI アプリ ====&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.jp/index.php/Unified_Extensible_Firmware_Interface#UEFI_.E3.82.B7.E3.82.A7.E3.83.AB EFI シェル] と [https://wiki.archlinux.jp/index.php/REFInd#.E3.83.84.E3.83.BC.E3.83.AB 他のEFIアプリケーション] を ESP にインストールした場合は、次のスニペットを使用できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|efi}} 行のファイルパスパラメータは、&amp;quot;esp&amp;quot; マウントポイントを基準にしています。 {{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;
カスタム UEFI シェルローダーのロード例:&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/uefi-shell-v1-x86_64.conf|2=&lt;br /&gt;
title  UEFI Shell x86_64 v1&lt;br /&gt;
efi    /EFI/shellx64_v1.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|&#039;&#039;esp&#039;&#039;/loader/entries/uefi-shell-v2-x86_64.conf|2=&lt;br /&gt;
title  UEFI Shell x86_64 v2&lt;br /&gt;
efi    /EFI/shellx64_v2.efi&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== /EFI/Linux のカーネルの準備 ===&lt;br /&gt;
&lt;br /&gt;
カーネル・初期 RAM ディスク (initrd)・カーネルコマンドライン・{{ic|/etc/os-release}} をひとつのファイルにまとめた特殊なカーネルファイルとして &#039;&#039;/EFI/Linux&#039;&#039; が検索されます。セキュアブートするために簡単にファイルに署名することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|systemd-boot}} は ID を生成して自動的にエントリを追加するために {{ic|os-release}} ファイルに {{ic|VERSION_ID}} または {{ic|BUILD_ID}} のどちらかを必要としますが、Arch の {{ic|os-release}} には含まれていません。どちらかを記述したコピーを作成するか、スクリプトで自動的に生成するようにしてください}}&lt;br /&gt;
&lt;br /&gt;
使用したいカーネルコマンドラインをファイルに記述して以下のようにバンドルファイルを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|Kernel packaging command:|2=objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;/usr/lib/os-release&amp;quot; --change-section-vma .osrel=0x20000 \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;kernel-command-line.txt&amp;quot; --change-section-vma .cmdline=0x30000 \&lt;br /&gt;
    --add-section .linux=&amp;quot;vmlinuz-file&amp;quot; --change-section-vma .linux=0x40000 \&lt;br /&gt;
    --add-section .initrd=&amp;quot;initrd-file&amp;quot; --change-section-vma .initrd=0x3000000 \&lt;br /&gt;
    &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; &amp;quot;&#039;&#039;linux&#039;&#039;.efi&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
生成した {{ic|&#039;&#039;linux&#039;&#039;.efi}} ファイルには任意で署名することができます。&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;linux&#039;&#039;.efi}} は {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux}} にコピーしてください。&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;
* {{ic|Up/Down}} - エントリの選択&lt;br /&gt;
* {{ic|Enter}} - 選択したエントリの起動&lt;br /&gt;
* {{ic|d}} - (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動&lt;br /&gt;
* {{ic|t/T}} - (不揮発の EFI 変数に保存された) タイムアウトを調整&lt;br /&gt;
* {{ic|e}} - カーネルコマンドラインを編集。{{ic|editor}} オプションが {{ic|0}} に設定されている場合は使えません&lt;br /&gt;
* {{ic|q}} - 終了&lt;br /&gt;
* {{ic|v}} - systemd-boot と UEFI のバージョンを表示&lt;br /&gt;
* {{ic|p}} - 現在の設定を表示&lt;br /&gt;
* {{ic|h}} - キーマップを表示&lt;br /&gt;
* {{ic|h/?}} - ヘルプ&lt;br /&gt;
&lt;br /&gt;
以下のホットキーを、起動中やメニューで押すことで、特定のエントリを直接起動します:&lt;br /&gt;
* {{ic|l}} - Linux&lt;br /&gt;
* {{ic|w}} - Windows&lt;br /&gt;
* {{ic|a}} - OS X&lt;br /&gt;
* {{ic|s}} - EFI Shell&lt;br /&gt;
* {{ic|1-9}} - エントリの番号&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&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;
=== Unified Kernel Image を使う ===&lt;br /&gt;
&lt;br /&gt;
systemd-boot は {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} 内の unified kernel image を検索します。&lt;br /&gt;
[https://systemd.io/BOOT_LOADER_SPECIFICATION#type-2-efi-unified-kernel-images unified kernel image] はカーネル、initrd、カーネルのコマンドライン、{{ic|/etc/os-release}} およびスプラッシュスクリーンを単一ファイルに格納したもので、[[セキュアブート]] のための署名が容易に可能です。&lt;br /&gt;
&lt;br /&gt;
作成するには、カーネルコマンドラインを指定した上で次のようにします:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
$ objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;/usr/lib/os-release&amp;quot; --change-section-vma .osrel=0x20000 \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;kernel-command-line.txt&amp;quot; --change-section-vma .cmdline=0x30000 \&lt;br /&gt;
    --add-section .splash=&amp;quot;/usr/share/systemd/bootctl/splash-arch.bmp&amp;quot; --change-section-vma .splash=0x40000 \&lt;br /&gt;
    --add-section .linux=&amp;quot;vmlinuz-file&amp;quot; --change-section-vma .linux=0x2000000 \&lt;br /&gt;
    --add-section .initrd=&amp;quot;initrd-file&amp;quot; --change-section-vma .initrd=0x3000000 \&lt;br /&gt;
    &amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot; &amp;quot;&#039;&#039;linux&#039;&#039;.efi&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|&#039;&#039;linux&#039;&#039;.efi}} を [https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88#.E8.87.AA.E5.88.86.E3.81.A7.E7.BD.B2.E5.90.8D.E3.81.97.E3.81.9F.E9.8D.B5.E3.82.92.E4.BD.BF.E3.81.86 署名] することもできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;linux&#039;&#039;.efi}} を {{ic|&#039;&#039;esp&#039;&#039;/EFI/Linux/}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
=== Grml on ESP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|以下の手順は、Grml 専用ではありません。​若干の調整で他のソフト (例: [http://www.system-rescue-cd.org/ SystemRescueCD]) のインストールも可能です。}}&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;
=== 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;
=== BIOS モードで起動後にインストール ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|こちらの起動方法は推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
BIOS モードで OS を起動したいときも &#039;&#039;systemd-boot&#039;&#039; をインストールすることは可能です。ただし、起動時に &#039;&#039;systemd-boot&#039;&#039; の EFI ファイルを実行するようにファームウェアを設定する必要があります:&lt;br /&gt;
* EFI シェルを使用する。&lt;br /&gt;
* ファームウェアのインターフェイスから起動時にロードされる 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 シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの 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 -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&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;
 # bcdedit /copy {bootmgr} /d &amp;quot;Linux Boot Manager&amp;quot;&lt;br /&gt;
 # bcdedit /set {guid} path \EFI\systemd\systemd-bootx64.efi&lt;br /&gt;
&lt;br /&gt;
{{ic|{guid} }} を最初のコマンドによってリターンされた ID に置き換えます。これをデフォルトのエントリとして設定するには:&lt;br /&gt;
&lt;br /&gt;
 # bcdedit /default {guid}&lt;br /&gt;
&lt;br /&gt;
=== Windows をアップグレードした後にメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
[[Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまう]]を見てください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/&lt;br /&gt;
* https://github.com/systemd/systemd/tree/master/src/boot/efi&lt;br /&gt;
* https://bbs.archlinux.org/viewtopic.php?id=254374&lt;br /&gt;
* https://systemd.io/BOOT_LOADER_SPECIFICATION/&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Rust&amp;diff=19180</id>
		<title>Rust</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Rust&amp;diff=19180"/>
		<updated>2021-01-20T09:00:18Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Rust]]&lt;br /&gt;
[[ru:Rust]]&lt;br /&gt;
[http://rust-lang.org/ Rust] は驚異的に高速で、セグメンテーション違反を滅多に起こさず、スレッドとメモリの安全性が保証された、システムプログラミング言語です。&lt;br /&gt;
&lt;br /&gt;
== ライブラリ ==&lt;br /&gt;
&lt;br /&gt;
=== Rust コアライブラリ ===&lt;br /&gt;
&lt;br /&gt;
[https://doc.rust-lang.org/core/ Rust Core Library] は何にも依存しない Rust 標準ライブラリの基礎となるライブラリです。LLVM と直接通じることで、ハードウェアに囚われないプラットフォームとして Rust を使うことができます。LLVM との緊密な統合により、Clang でコンパイルされた C アプリケーションよりも高い性能を発揮することができ、libcore で設計された Rust ソフトウェアは C よりも低レイヤーを扱うことができます。組み込み環境向けのソフトウェアを開発している場合、{{ic|#![no_std]}} で標準ライブラリを省くことでコアライブラリだけを使うことができ、バイナリサイズを小さく、高い性能を発揮させることが可能です。ただし、{{ic|#![no_std]}} を使用すると Rust コミュニティから取得することができる膨大なソフトウェアに制限がかかるため、大抵のライブラリは標準ライブラリを必要としています。&lt;br /&gt;
&lt;br /&gt;
=== Rust 標準ライブラリ ===&lt;br /&gt;
&lt;br /&gt;
[http://doc.rust-lang.org/std/index.html Rust Standard Library] は移植性の高い Rust ソフトウェアによって構成された便利な高水準の抽象ライブラリです。{{ic|Vec}}, {{ic|Iterator}}, {{ic|Option}}, {{ic|Result}}, {{ic|String}} 型や、基本的なメソッド、大量の標準マクロ、I/O やマルチスレッドのサポート、{{ic|Box}} によるヒープメモリ確保などの便利な機能、その他、コアライブラリに存在しない高度な機能が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== リリースサイクル ===&lt;br /&gt;
&lt;br /&gt;
Rust は Firefox のリリースサイクルと同じように6週間ごとに定期的にリリースされます。新しいリリースが出るたびに、コアライブラリや標準ライブラリは改善され、対応プラットフォームが新しく増えたりパフォーマンスが向上したり、あるいは新しい機能の安定化が行われます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
=== ネイティブのインストール方法 ===&lt;br /&gt;
&lt;br /&gt;
Rust の最新安定版を[[インストール]]するには、{{Pkg|rust}} パッケージを[[インストール]]してください。{{ic|rustc}} コンパイラと [[Cargo]] がインストールされます。&lt;br /&gt;
&lt;br /&gt;
Rust コンパイラの開発版は [[AUR]] からインストールできます。ビルド済みの汎用バイナリは {{AUR|rust-nightly-bin}} を、システムライブラリが付属するコンパイラのビルドは {{AUR|rust-git}} を使ってください。[[非公式ユーザーリポジトリ#rust-git|非公式リポジトリ]]を使うことで定期的に更新されるビルド済みの rust-git パッケージを入手することもできます。&lt;br /&gt;
&lt;br /&gt;
=== Rustup によるインストール方法 ===&lt;br /&gt;
&lt;br /&gt;
Rust でソフトウェアを開発するときに、公式に推奨されている Rust のインストール方法は [https://www.rustup.rs/ Rustup ツールチェインマネージャ] を使用する方法です (Rustup は Rust で書かれています)。&lt;br /&gt;
&lt;br /&gt;
ソフトウェアリポジトリに存在するスタンドアロンな Rust を使用しないで、Rustup ツールチェインマネージャを使用する利点として、複数のプラットフォーム (Windows, Mac, Android) やアーキテクチャ (x86, x86_64, arm) 用に複数のツールチェイン (stable, beta, nightly) をインストールすることができる点が挙げられます。&lt;br /&gt;
&lt;br /&gt;
==== 上流のインストールスクリプト ====&lt;br /&gt;
&lt;br /&gt;
{{ic|curl -f &amp;lt;nowiki&amp;gt;https://sh.rustup.rs&amp;lt;/nowiki&amp;gt; &amp;gt; rust.sh}} としてファイルをダウンロードします。そのあと、{{ic|less ./rust.sh}} でファイルの内容を確認した上で、{{ic|./rust.sh}} でスクリプトを実行してください。スクリプトはログインシェルの[[Bash#実行|設定ファイル]]の PATH のみ変更します。一度ログアウトしてからログインしなおすか {{ic|source $HOME/.cargo/env}} を実行する必要があります。rustup をアップデート {{ic|rustup self update}} を実行するだけです。&lt;br /&gt;
&lt;br /&gt;
{{Warning|[https://rustup.rs/ Rustup] のドキュメントに書かれている、{{ic|curl &#039;&#039;some-url&#039;&#039; | sh}} を実行するのは、セキュリティ上のリスクがあると考えられます。ダウンロード中に壊れさえするかもしれない、未知のソースコードを実行するからです。従って、実行する前に、手動でダウンロードし内容を確認することが推奨されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|rustup}} コマンドを実行する前に PATH に {{ic|$HOME/.cargo/bin}} を追加してください。}}&lt;br /&gt;
&lt;br /&gt;
==== Arch Linux パッケージ ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|rustup}} は[[公式リポジトリ]]からインストールすることもできます。公式リポジトリからインストールした場合 {{ic|rustup self update}} は使用できないので注意してください。pacman で直接パッケージをアップデートする必要があります。&lt;br /&gt;
&lt;br /&gt;
この方法だと、Rust のバイナリが {{ic|~/.cargo/bin}} ではなく {{ic|/usr/bin}} にあり、{{ic|PATH}} に別のディレクトリを加えなくてよい利点があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|既定では、{{Pkg|rustup}} パッケージをインストールしても、ツールチェインはインストール&#039;&#039;&#039;されません&#039;&#039;&#039;。かわりに、{{ic|/usr/bin/rustup}} コマンドから {{ic|/usr/bin/rustc}} や {{ic|/usr/bin/cargo}} など一般的なバイナリにシンボリックリンクが張られます。次に述べるように、Rust コマンドを動作させるには、利用者が手動でツールチェインをインストールする必要があります。}}&lt;br /&gt;
&lt;br /&gt;
ツールチェインをインストールするには、{{ic|stable}} か {{ic|nightly}} のどちらのバージョンを使用するか rustup に指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ rustup default stable&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== 使い方 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|stable}}、{{ic|beta}}、{{ic|nightly}} や {{ic|1.23.0}} などのツールチェインを手動でインストールする必要があったり、また、他のツールチェインを使用したりテストするときには次のコマンドを入力します:&lt;br /&gt;
&lt;br /&gt;
 $ rustup toolchain install &#039;&#039;toolchain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
すると、Rust コマンドを {{ic|rustup run &#039;&#039;toolchain&#039;&#039; &#039;&#039;command&#039;&#039;}} として実行できます。これらのコマンドを直接実行するには、ツールチェインをアクティベートする必要があります:&lt;br /&gt;
 $ rustup default toolchain&lt;br /&gt;
&lt;br /&gt;
{{ic|rustc -V}} を使って rust のバージョンを確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ rustc -V |&amp;lt;nowiki&amp;gt;&lt;br /&gt;
rustc 1.26.0 (a77568041 2018-05-07)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Rustup は {{Pkg|rust}} パッケージに含まれている Rust コマンドのうち、{{ic|rustfmt}} や {{ic|rls}} などいくつかをインストールしません。これにより、Rust メンテナが nightly チャンネルを {{ic|rustfmt}}/{{ic|rls}} が壊れていても提供できるようになります。これらをインストールするには、個別に {{ic|rustup component add rls}} および {{ic|rustup component add rustfmt}} を実行します。また、実行することで、{{ic|rustfmt}}/{{ic|rls}} が壊れる場合、nightly チャンネルの更新を保留するようになります。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Rust 自身にはリンカはないので、リンカが別途インストールされてなければなりません。リンカとして例えば {{Pkg|gcc}} をインストールすることができます。リンカがないと Rust は {{ic|error: linker `cc` not found.}} とエラーを出力します。}}&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
以下のようなシンプルなプログラムをビルドして、Rust が正しくインストールされていることを確認してください:&lt;br /&gt;
{{hc|~/hello.rs|&lt;br /&gt;
 fn main() {&lt;br /&gt;
     println!(&amp;quot;Hello, World!&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|rustc}} でコンパイルして実行することができます:&lt;br /&gt;
{{hc|$ rustc hello.rs &amp;amp;&amp;amp; ./hello|&lt;br /&gt;
Hello, World!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== クロスコンパイル ==&lt;br /&gt;
&lt;br /&gt;
=== rustup を使う ===&lt;br /&gt;
&lt;br /&gt;
rustup を使うことで簡単にクロスコンパイルができます。rustup は多数のクロスコンパイルターゲットに対応しています。対応しているプラットフォームの完全なリストは {{ic|rustup target list}} を実行することで確認できます。&lt;br /&gt;
&lt;br /&gt;
例えば、gnu コンパイラを使って Windows 用にコンパイルする stable チャンネルの rust をインストールしたい場合、以下を実行:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ rustup install stable-x86_64-pc-windows-gnu&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでは、コンパイル先のアーキテクチャ用の rust とツールしかインストールされません。場合によってはクロスコンパイルするのに追加でツールが必要になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
このセクションでは、{{ic|$ARCH}} がターゲットのアーキテクチャです ({{ic|x86_64}} または {{ic|i686}})。&lt;br /&gt;
&lt;br /&gt;
# {{AUR|mingw64-w64-gcc-base}}{{Broken package link|パッケージが存在しません}} と {{Pkg|mingw-w64-gcc}} と {{Pkg|wine}} を[[インストール]]。&lt;br /&gt;
# rustup を使っている場合、{{ic|rustup install stable-$ARCH-pc-windows-gnu}} と {{ic|rustup target add $ARCH-pc-windows-gnu}} を実行することで rust と標準ライブラリをインストールできます。rustup を使っていない場合、rustlib ディレクトリ ({{AUR|rust-nightly-bin}} を使用する場合は {{ic|/usr/local/lib/rustlib}}、公式の {{Pkg|rust}} パッケージを使用する場合は {{ic|/usr/lib/rustlib}}) に Windows 用の Rust の標準ライブラリのコピーをインストールします。一番簡単な方法は、ターゲットとするアーキテクチャの Windows 用の Rust インストーラーをダウンロードして、Wine を使ってインストール ({{ic|wine start my-rust-installer.msi}}) してから rustlib ディレクトリにコピー {{ic|$INSTALL_DIR/bin/rustlib/$ARCH-pc-windows-gnu}} する方法です。&lt;br /&gt;
# 最後に、cargo の設定ファイルに以下を追加して MinGW-w64 の gcc/ar のパスを cargo に指定します:&lt;br /&gt;
{{hc|~/.cargo/config|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[target.$ARCH-pc-windows-gnu]&lt;br /&gt;
linker = &amp;quot;/usr/bin/$ARCH-w64-mingw32-gcc&amp;quot;&lt;br /&gt;
ar = &amp;quot;/usr/$ARCH-w64-mingw32/bin/ar&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
cargo に {{ic|--target $ARCH-pc-windows-gnu}} と指定することで Windows 向けのクロスコンパイルができます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ # Build&lt;br /&gt;
$ cargo build --release --target &amp;quot;$ARCH-pc-windows-gnu&amp;quot;&lt;br /&gt;
$ # Run unit tests under wine&lt;br /&gt;
$ cargo test --target &amp;quot;$ARCH-pc-windows-gnu&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== 非公式パッケージ ===&lt;br /&gt;
&lt;br /&gt;
[[非公式ユーザーリポジトリ#archlinuxcn|非公式の archlinuxcn リポジトリ]]には i686, ARM, ARMv7, Windows 32, Windows 64 向けの rust-nightly と Rust 標準ライブラリが含まれています。パッケージをインストールすればクロスコンパイルができます。ただし、ARM のツールチェインは自分で用意する必要があります。32ビット版の Windows を対象にビルドする場合、実行するのに {{ic|libgcc_s_dw2-1.dll}} が必要になります。&lt;br /&gt;
&lt;br /&gt;
== Cargo ==&lt;br /&gt;
&lt;br /&gt;
Rust のパッケージマネージャである [https://crates.io/ Cargo] は {{Pkg|rust}} パッケージに付属しています。ナイトリー版は AUR の {{AUR|cargo-nightly-bin}} でインストールできます。{{Pkg|rustup}} を使用している場合、Cargo は既にインストールされています。&lt;br /&gt;
&lt;br /&gt;
Cargo は Rust プロジェクトの依存関係を宣言することができるようにするツールであり、それによってビルドがいつでも通ることが保証されます。&lt;br /&gt;
&lt;br /&gt;
=== 使用方法 ===&lt;br /&gt;
&lt;br /&gt;
Cargo を使って新しいプロジェクトを作成するには:&lt;br /&gt;
{{bc|$ cargo new hello_world --bin}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Cargo がプロジェクトをコンパイルするのに必要なメタデータを全て含めたマニフェストファイルである {{ic|Cargo.toml}} ファイルを Cargo は使用します:&lt;br /&gt;
{{hc|head=Cargo.toml|&lt;br /&gt;
output=[package]&lt;br /&gt;
name = &amp;quot;hello_world&amp;quot;&lt;br /&gt;
version = &amp;quot;0.1.0&amp;quot;&lt;br /&gt;
authors = [&amp;quot;Your Name &amp;lt;you@example.com&amp;gt;&amp;quot;]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== sccache ===&lt;br /&gt;
[https://github.com/mozilla/sccache sccache] を使うと中間生成物をキャッシュすることで、前回のコンパイル時から変化しない部分の再コンパイル時間を省きます。{{Pkg|sccache}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
Cargo で利用するには以下の方法があります。&lt;br /&gt;
{{ic|RUSTC_WRAPPER}} [[環境変数]]を設定することで一時的に sccache を利用できます:&lt;br /&gt;
 RUSTC_WRAPPER=sccache cargo build&lt;br /&gt;
&lt;br /&gt;
常に利用するようにするには、{{ic|~/.cargo/config}} に以下の設定を加えます:&lt;br /&gt;
{{hc|~/.cargo/config|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[build]&lt;br /&gt;
rustc-wrapper = &amp;quot;sccache&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== IDE のサポート ==&lt;br /&gt;
&lt;br /&gt;
=== ツール ===&lt;br /&gt;
&lt;br /&gt;
==== Racer ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/phildawes/racer Racer] 自動補完エンジンは Rust の自動補完が必要な際に現在最も優れている選択肢です。ただし、Racer を使うには Rust のソースコードのコピーをインストールする必要があります。入手する方法は複数存在します:&lt;br /&gt;
* rustup を使う: {{ic|rustup component add rust-src}}。&lt;br /&gt;
* AUR を使う: {{Aur|rust-src}}{{Broken package link|パッケージが存在しません}} または {{Aur|rust-nightly-src}}。AUR を使用する場合は {{ic|RUST_SRC_PATH}} 環境変数を設定してください。&lt;br /&gt;
ソースコードをインストールしたら、{{pkg|rust-racer}} パッケージをインストールするか、[[#Cargo|Cargo]] を使って Racer をインストールすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ cargo install racer&lt;br /&gt;
&lt;br /&gt;
==== Clippy ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Manishearth/rust-clippy Clippy] は Rust のナイトリービルドに存在するコンパイラプラグイン機能を利用して、様々なエラーや慣習的な警告を検出する文法チェックを行います。安定版の Rust コンパイラでコンパイルするときに clippy を使うことはできません。Clippy は cargo でインストールできます:&lt;br /&gt;
&lt;br /&gt;
 $ cargo install clippy&lt;br /&gt;
&lt;br /&gt;
=== エディタ ===&lt;br /&gt;
&lt;br /&gt;
{{Note|IDE やテキストエディタの対応状況については [https://areweideyet.com/ Are we (I)DE yet?] にも述べられています。}}&lt;br /&gt;
&lt;br /&gt;
==== Atom ====&lt;br /&gt;
&lt;br /&gt;
[[Atom]] はプラグインで Rust 言語をサポートします: [https://atom.io/packages/language-rust language-rust] と [https://atom.io/packages/linter-rust linter-rust]。&lt;br /&gt;
&lt;br /&gt;
==== IntelliJ IDEA ====&lt;br /&gt;
&lt;br /&gt;
[[IntelliJ IDEA]] には [https://github.com/intellij-rust/intellij-rust Rust プラグイン] が存在します。CLion でも同じプラグインが使えます。ツールチェインを設定するときは rustup を使ってソースをダウンロード ({{ic|rustup component add rust-src}}) して、ツールチェインのディレクトリとして {{ic|~/.rustup/toolchains/&amp;lt;your toolchain&amp;gt;/bin}} を選択してください。&lt;br /&gt;
&lt;br /&gt;
==== Visual Studio Code ====&lt;br /&gt;
&lt;br /&gt;
[[VSCode]] の Rust のサポートは [https://marketplace.visualstudio.com/items?itemName=kalitaalexey.vscode-rust Rust] 拡張をインストールすることで得られます。&lt;br /&gt;
&lt;br /&gt;
==== Vim ====&lt;br /&gt;
&lt;br /&gt;
[[Vim]] による Rust のサポートは公式の [https://github.com/rust-lang/rust.vim rust.vim] プラグインで得ることができます。&lt;br /&gt;
&lt;br /&gt;
====Emacs====&lt;br /&gt;
&lt;br /&gt;
Emacs の Rust サポートは公式の [https://github.com/rust-lang/rust-mode rust-mode] プラグインか {{AUR|emacs-rust-mode}}{{Broken package link|パッケージが存在しません}} パッケージで有効にできます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
 &lt;br /&gt;
* [http://rust-lang.org/ Rust プログラミング言語の公式ウェブサイト]&lt;br /&gt;
* [https://www.rust-lang.org/documentation.html Rust ドキュメント]&lt;br /&gt;
* [http://doc.rust-lang.org/stable/book/ 公式 Rust Book]&lt;br /&gt;
* [https://doc.rust-lang.org/std/ 標準ライブラリ API 索引]&lt;br /&gt;
* [http://rustbyexample.com/ 説明が付されているサンプル集]&lt;br /&gt;
* [https://github.com/ctjhoa/rust-learning Rust チュートリアルのページリスト]&lt;br /&gt;
* [https://crates.io/ Cargo で使用できるライブラリ (crate)]&lt;br /&gt;
* [https://this-week-in-rust.org/ 今週の Rust]&lt;br /&gt;
* [http://blog.rust-lang.org/ Rust プログラミング言語ブログ]&lt;br /&gt;
* [https://users.rust-lang.org/ Rust ユーザーフォーラム]&lt;br /&gt;
* [https://internals.rust-lang.org/ Rust Internals フォーラム]&lt;br /&gt;
* [https://rust.libhunt.com/ Awesome Rust: Rust ライブラリやリソースの精選集]&lt;br /&gt;
* [[Wikipedia:ja:Rust (プログラミング言語)|Wikipedia の記事]]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Vivaldi&amp;diff=18208</id>
		<title>Vivaldi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Vivaldi&amp;diff=18208"/>
		<updated>2020-11-11T09:36:31Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: vivaldiの公式パッケージ化に伴いリンクの変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ウェブブラウザ]]&lt;br /&gt;
[[de:Vivaldi]]&lt;br /&gt;
[[en:Vivaldi]]&lt;br /&gt;
[[ru:Vivaldi]]&lt;br /&gt;
[[zh-hans:Vivaldi]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ブラウザプラグイン}}&lt;br /&gt;
{{Related|Chromium}}&lt;br /&gt;
{{Related|Opera}}&lt;br /&gt;
{{Related|Otter Browser}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://vivaldi.com/ Vivaldi] は旧 [[Opera]] の開発メンバーによる新しいウェブブラウザです。Chromium をベースとしておりユーザーの手に馴染むブラウザを目指しています。&lt;br /&gt;
&lt;br /&gt;
==インストール==&lt;br /&gt;
Vivaldi は {{Pkg|vivaldi}} または {{AUR|vivaldi-snapshot}} のいずれかで[[インストール]]することができます。もしくは非公式の [[非公式ユーザーリポジトリ#herecura|herecura]] リポジトリを追加して、ビルド済みのパッケージを使用することも可能です。&lt;br /&gt;
&lt;br /&gt;
== 拡張 ==&lt;br /&gt;
&lt;br /&gt;
Vivaldi では Chrome の多数の拡張が使えます。[https://chrome.google.com/webstore/category/extensions Chrome ウェブストア] から直接インストールできます。{{ic|vivaldi://extensions}} あるいは {{ic|extensions}} からどの拡張がインストール・有効化できるか確認できます。&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Google Chrome Extension]] も参照。&lt;br /&gt;
&lt;br /&gt;
==メディアの再生==&lt;br /&gt;
音声や動画の再生については、インストールした Vivaldi のバージョンにあわせて適当なパッケージをインストールしてください: {{Pkg|vivaldi-ffmpeg-codecs}}, {{AUR|vivaldi-snapshot-ffmpeg-codecs}}。&lt;br /&gt;
&lt;br /&gt;
また、{{Pkg|pepper-flash}} をインストールすることで flash メディアを再生することができます。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
===Vivaldi をデフォルトのウェブブラウザに設定できない===&lt;br /&gt;
[[デフォルトアプリケーション]]を手動で編集する必要があります。Vivaldi は自力でデフォルトアプリケーションを設定することができません。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://vivaldi.com/ 公式ウェブページ]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Mozc&amp;diff=17272</id>
		<title>Mozc</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Mozc&amp;diff=17272"/>
		<updated>2020-08-08T07:07:42Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:インプットメソッド]]&lt;br /&gt;
[[en:Mozc]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Uim を使って日本語を入力}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://github.com/google/mozc プロジェクトホームページ]より:&lt;br /&gt;
:&#039;&#039;Mozc は Android OS、Chromium OS、Windows、macOS、あるいは GNU/Linux など、マルチプラットフォームで動作するよう設計された日本語インプットメソッドエディタ (IME) であり、このオープンソースプロジェクトは [https://www.google.com/intl/ja/ime/ Google 日本語入力] から派生したものです。Mozc と Google 日本語入力との差異は [https://github.com/google/mozc/blob/master/docs/about_branding.md About Branding] で説明されています。&#039;&#039; (簡単に言うと、Mozc は辞書やその関連データが Google 日本語入力と異なっているか省略されており、Google 日本語入力と同等の変換品質は持ちません)&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
どういうセットアップにしたいかによって、複数の Mozc パッケージから適切なパッケージを選択してください。まず、Mozc のコアパッケージとお好きなインプットメソッドフレームワーク ([[Fcitx]], [[IBus]], [[UIM|uim]] など) のモジュールをインストールする必要があります。ただし一部の Fcitx パッケージにはコアパッケージが同梱されています。&lt;br /&gt;
&lt;br /&gt;
次に、非公式の辞書がいくつか存在します: Google/Yahoo のヒット件数や Wikipedia などを元に作成された 1代目 UT (開発終了) と UT2 辞書と、mecab-ipadic-NEologd Neologism 辞書を元に作られた NEologd UT 辞書、UT2 と NEologd UT 辞書をまとめた 2代目 UT 辞書があります。現在は 2代目 UT 辞書と NEologd UT 辞書の開発が続けられています。(UT2 辞書の開発は終わっていますが、2代目 UT 辞書の一部として開発が続けられています)&lt;br /&gt;
&lt;br /&gt;
以下の表ではコンポーネントと辞書の組み合わせに従ってどのパッケージをインストールするべきか示しています。1つのセル内に複数のパッケージがある場合、それらは分割パッケージです。一部のパッケージは [[非公式ユーザーリポジトリ#pnsft-pur|pnsft-pur]] リポジトリからインストールできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 標準&lt;br /&gt;
! UT(1代目)&lt;br /&gt;
! UT2&lt;br /&gt;
! NEologd UT&lt;br /&gt;
! UT(2代目)&lt;br /&gt;
|-&lt;br /&gt;
| Fcitx 統合&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{Pkg|fcitx-mozc}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-ut}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{AUR|fcitx-mozc-ut2}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-neologd-ut}}&amp;lt;br /&amp;gt;{{AUR|mozc-neologd-ut}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-ut-unified}}&amp;lt;br /&amp;gt;{{AUR|mozc-ut-unified}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Mozc コア&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|mozc}}&amp;lt;br /&amp;gt;{{AUR|ibus-mozc}}&amp;lt;br /&amp;gt;{{AUR|emacs-mozc}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{AUR|mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|ibus-mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|emacs-mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|uim-mozc-ut2}}&lt;br /&gt;
|-&lt;br /&gt;
| IBus 統合&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Emacs 統合&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uim 統合&lt;br /&gt;
| {{AUR|uim-mozc}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
上記のパッケージでは、PKGBUILD の中に特定の機能を有効化・無効化する定義が含まれていることがあります。特に、emacs パッケージをビルドする場合は {{ic|_emacs_mozc}} 行をアンコメントする必要があります:&lt;br /&gt;
 ## If you will be using mozc.el on Emacs, uncomment below.&lt;br /&gt;
 _emacs_mozc=&amp;quot;yes&amp;quot;&lt;br /&gt;
同じように uim-mozc-ut2 もビルドするときは手動で有効にしてください。&lt;br /&gt;
&lt;br /&gt;
Mozc をインストールしたら、X やインプットメソッドフレームワークを再起動することで Mozc を使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== IBus ===&lt;br /&gt;
&#039;&#039;IBus の設定については [[IBus]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mozc をデフォルトのインプットメソッドにするには、&#039;&#039;ibus-setup&#039;&#039; で設定します:&lt;br /&gt;
 $ ibus-setup&lt;br /&gt;
「インプットメソッド」タブを選び、&#039;&#039;Mozc&#039;&#039; をインプットメソッドリストの先頭に移動します。&lt;br /&gt;
&lt;br /&gt;
インプットメソッドの切り替えは、{{ic|Alt + Shift_L}} (IBus のデフォルト) で行えます。&lt;br /&gt;
&lt;br /&gt;
=== uim ===&lt;br /&gt;
&#039;&#039;uim の設定については [[UIM]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行して GUI を立ち上げて uim を設定してください (もしくは uim-pref-gtk3/uim-pref-qt4 を使用):&lt;br /&gt;
 $ uim-pref-gtk&lt;br /&gt;
&lt;br /&gt;
「標準の入力方式」としてお好きなインプットメソッドを選択してください。&lt;br /&gt;
{{Note|初めて Mozc をインストールした直後は、Mozc は選択できません。これは Mozc が「使用可能にする入力方式」で有効になっていないためです。その右の「編集」ボタンをクリックして Mozc を有効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;uim&#039;&#039;&#039; をアップグレード・再インストールしたときは次のコマンドを実行する必要があります: {{ic|# uim-module-manager --register mozc}}。}}&lt;br /&gt;
&lt;br /&gt;
=== Fcitx ===&lt;br /&gt;
&#039;&#039;Fcitx の設定については [[Fcitx]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行して Fcitx の設定ダイアログを開いてください:&lt;br /&gt;
 $ fcitx-configtool&lt;br /&gt;
&#039;&#039;Input Method&#039;&#039; タブからプラス記号をクリックしてダイアログのリストから Mozc を選択してください。設定によっては、Mozc を使うために &#039;&#039;Only Show Current Language&#039;&#039; オプションを無効化する必要があります。ダイアログの確認後、標準のキーボードショートカットを使って Mozc をインプットメソッドとして有効にできます。&lt;br /&gt;
&lt;br /&gt;
=== Emacs で Mozc を使う ===&lt;br /&gt;
&lt;br /&gt;
mozc.el (mozc-mode) を使用して LEIM (Library of Emacs Input Method) 経由で日本語を入力することができます。mozc-mode を使用するには、以下を {{ic|.emacs.d/init.el}} あるいはその他の Emacs カスタム設定用ファイルに追加します:&lt;br /&gt;
 (require &#039;mozc)  ; or (load-file &amp;quot;/path/to/mozc.el&amp;quot;)&lt;br /&gt;
 (setq default-input-method &amp;quot;japanese-mozc&amp;quot;)&lt;br /&gt;
mozc.el は変換候補の表示スタイルに、候補のリストを入力中文字列のそばに表示する &amp;quot;overlay&amp;quot; モードを提供しています (Mozc r77以降)。このモードをデフォルトで利用する場合は、以下の設定を追加します:&lt;br /&gt;
 (setq mozc-candidate-style &#039;overlay)&lt;br /&gt;
&lt;br /&gt;
{{ic|C-\}} (&#039;&#039;toggle-input-method&#039;&#039;) で mozc-mode のオン/オフを切り替えます。&lt;br /&gt;
&lt;br /&gt;
==== Emacs 上で C-SPC が IM のオン・オフで使われてしまうのを抑止する ====&lt;br /&gt;
&lt;br /&gt;
デスクトップ環境上で IM のオン・オフのキー割り当てに C-SPC を設定しており、Emacs 上でもそちらが優先されて C-SPC/C-@ で set-mark-command が使えなくて困る、という場合は、{{ic|~/.Xresources}} か {{ic|~/.Xdefaults}} に以下を追加します。&lt;br /&gt;
 Emacs*UseXIM: false&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 現在使用している Mozc のバージョンを表示する ===&lt;br /&gt;
&lt;br /&gt;
Mozc 起動中に &amp;quot;ばーじょん&amp;quot; と入力し変換すると、変換候補の中に現在の Mozc のバージョン番号が表示されます:&lt;br /&gt;
{{hc|&amp;lt;u&amp;gt;ばーじょん&amp;lt;/u&amp;gt;&lt;br /&gt;
|バージョン&lt;br /&gt;
ヴァージョン&lt;br /&gt;
ばーじょん&lt;br /&gt;
Mozc-1.6.1187.102  &#039;&#039;⇐ Mozc のバージョン&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
=== コマンドラインから Mozc ツールを起動 ===&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで Mozc のツールを起動できます:&lt;br /&gt;
* Mozc 設定: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=config_dialog}}&lt;br /&gt;
* Mozc 辞書ツール: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=dictionary_tool}}&lt;br /&gt;
* Mozc 単語登録: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=word_register_dialog}}&lt;br /&gt;
* Mozc 手書き文字入力: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=hand_writing}}&lt;br /&gt;
* Mozc 文字パレット: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=character_palette}}&lt;br /&gt;
&lt;br /&gt;
=== ASCII キーボードで CapsLock キーを英数キーとして使用する ===&lt;br /&gt;
&lt;br /&gt;
Mozc のプリセットのキーバインドや多くの日本語入力メソッドでは、変換前入力中の英数入力切り替えは、{{ic|英数}}キー、{{ic|ひらがな/カタカナ}}キー、あるいは{{ic|無変換}}キーなどに割り当てられていますが、ASCII キーボードにそれらはありません。CapsLock キーに英数キー (Eisu_toggle) を割り当てることで日本語キーボードと同じように使用できます (Mozc は CapsLock キーを認識しないようです)。&lt;br /&gt;
&lt;br /&gt;
以下の設定では、OADG キーボードと等価な、Eisu_toggle を {{ic|CapsLock}} キーに、Caps_Lock を {{ic|Shift + CapsLock}} キーに割り当てます。&lt;br /&gt;
{{Warning|この設定はデスクトップ全体に作用します。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.Xmodmap}} を以下のように編集します:&lt;br /&gt;
 keycode 66 = Eisu_toggle Caps_Lock&lt;br /&gt;
 clear Lock&lt;br /&gt;
&lt;br /&gt;
X 再起動するか、xmodmap コマンドを実行して編集を適用します:&lt;br /&gt;
 $ xmodmap ~/.Xmodmap&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Mozc のビルドに失敗する (プロセスが強制終了される) ===&lt;br /&gt;
&lt;br /&gt;
ビルドが以下のようなメッセージで異常終了した場合:&lt;br /&gt;
 ...&lt;br /&gt;
 /bin/sh: 1 行:  xxxx 強制終了&lt;br /&gt;
 ...&lt;br /&gt;
 make: *** [xxx/xxx ...] エラー 137&lt;br /&gt;
 ...&lt;br /&gt;
メモリ不足になっていないか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== Mozc をアップグレードし、X または IBus を再起動しても (リブートはしていない) 古い Mozc が動いている ===&lt;br /&gt;
&lt;br /&gt;
古いバージョンの Mozc が終了されずにずっとメモリ上で動作しているのかもしれません。Mozc のプロセスを一度 kill してみてください:&lt;br /&gt;
 $ killall mozc_server&lt;br /&gt;
&lt;br /&gt;
=== mozc_server が defunct になる ===&lt;br /&gt;
&lt;br /&gt;
Mozc の仕様により、root で Mozc を起動することはできません。一般ユーザーで X を起動してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/google/mozc Mozc 公式サイト]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Mozc&amp;diff=17271</id>
		<title>Mozc</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Mozc&amp;diff=17271"/>
		<updated>2020-08-08T07:02:01Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: UT辞書に関する記述を現在の状況に即した形に変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:インプットメソッド]]&lt;br /&gt;
[[en:Mozc]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Uim を使って日本語を入力}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://github.com/google/mozc プロジェクトホームページ]より:&lt;br /&gt;
:&#039;&#039;Mozc は Android OS、Chromium OS、Windows、macOS、あるいは GNU/Linux など、マルチプラットフォームで動作するよう設計された日本語インプットメソッドエディタ (IME) であり、このオープンソースプロジェクトは [https://www.google.com/intl/ja/ime/ Google 日本語入力] から派生したものです。Mozc と Google 日本語入力との差異は [https://github.com/google/mozc/blob/master/docs/about_branding.md About Branding] で説明されています。&#039;&#039; (簡単に言うと、Mozc は辞書やその関連データが Google 日本語入力と異なっているか省略されており、Google 日本語入力と同等の変換品質は持ちません)&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
どういうセットアップにしたいかによって、複数の Mozc パッケージから適切なパッケージを選択してください。まず、Mozc のコアパッケージとお好きなインプットメソッドフレームワーク ([[Fcitx]], [[IBus]], [[UIM|uim]] など) のモジュールをインストールする必要があります。ただし一部の Fcitx パッケージにはコアパッケージが同梱されています。次に、非公式の辞書がいくつか存在します: Google/Yahoo のヒット件数や Wikipedia などを元に作成された 1代目 UT (開発終了) と UT2 辞書と、mecab-ipadic-NEologd Neologism 辞書を元に作られた NEologd UT 辞書、UT2 と NEologd UT 辞書をまとめた 2代目 UT 辞書があります。現在は 2代目 UT 辞書と NEologd UT 辞書の開発が続いています。(UT2 辞書の開発は終わっていますが、2代目 UT 辞書の一部として開発が続けられています)&lt;br /&gt;
&lt;br /&gt;
以下の表ではコンポーネントと辞書の組み合わせに従ってどのパッケージをインストールするべきか示しています。1つのセル内に複数のパッケージがある場合、それらは分割パッケージです。一部のパッケージは [[非公式ユーザーリポジトリ#pnsft-pur|pnsft-pur]] リポジトリからインストールできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 標準&lt;br /&gt;
! UT(1代目)&lt;br /&gt;
! UT2&lt;br /&gt;
! NEologd UT&lt;br /&gt;
! UT(2代目)&lt;br /&gt;
|-&lt;br /&gt;
| Fcitx 統合&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{Pkg|fcitx-mozc}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-ut}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{AUR|fcitx-mozc-ut2}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-neologd-ut}}&amp;lt;br /&amp;gt;{{AUR|mozc-neologd-ut}}&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|fcitx-mozc-ut-unified}}&amp;lt;br /&amp;gt;{{AUR|mozc-ut-unified}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Mozc コア&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{AUR|mozc}}&amp;lt;br /&amp;gt;{{AUR|ibus-mozc}}&amp;lt;br /&amp;gt;{{AUR|emacs-mozc}}&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{AUR|mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|ibus-mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|emacs-mozc-ut2}}&amp;lt;br /&amp;gt;{{AUR|uim-mozc-ut2}}&lt;br /&gt;
|-&lt;br /&gt;
| IBus 統合&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Emacs 統合&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uim 統合&lt;br /&gt;
| {{AUR|uim-mozc}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
上記のパッケージでは、PKGBUILD の中に特定の機能を有効化・無効化する定義が含まれていることがあります。特に、emacs パッケージをビルドする場合は {{ic|_emacs_mozc}} 行をアンコメントする必要があります:&lt;br /&gt;
 ## If you will be using mozc.el on Emacs, uncomment below.&lt;br /&gt;
 _emacs_mozc=&amp;quot;yes&amp;quot;&lt;br /&gt;
同じように uim-mozc-ut2 もビルドするときは手動で有効にしてください。&lt;br /&gt;
&lt;br /&gt;
Mozc をインストールしたら、X やインプットメソッドフレームワークを再起動することで Mozc を使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== IBus ===&lt;br /&gt;
&#039;&#039;IBus の設定については [[IBus]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mozc をデフォルトのインプットメソッドにするには、&#039;&#039;ibus-setup&#039;&#039; で設定します:&lt;br /&gt;
 $ ibus-setup&lt;br /&gt;
「インプットメソッド」タブを選び、&#039;&#039;Mozc&#039;&#039; をインプットメソッドリストの先頭に移動します。&lt;br /&gt;
&lt;br /&gt;
インプットメソッドの切り替えは、{{ic|Alt + Shift_L}} (IBus のデフォルト) で行えます。&lt;br /&gt;
&lt;br /&gt;
=== uim ===&lt;br /&gt;
&#039;&#039;uim の設定については [[UIM]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行して GUI を立ち上げて uim を設定してください (もしくは uim-pref-gtk3/uim-pref-qt4 を使用):&lt;br /&gt;
 $ uim-pref-gtk&lt;br /&gt;
&lt;br /&gt;
「標準の入力方式」としてお好きなインプットメソッドを選択してください。&lt;br /&gt;
{{Note|初めて Mozc をインストールした直後は、Mozc は選択できません。これは Mozc が「使用可能にする入力方式」で有効になっていないためです。その右の「編集」ボタンをクリックして Mozc を有効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;&#039;uim&#039;&#039;&#039; をアップグレード・再インストールしたときは次のコマンドを実行する必要があります: {{ic|# uim-module-manager --register mozc}}。}}&lt;br /&gt;
&lt;br /&gt;
=== Fcitx ===&lt;br /&gt;
&#039;&#039;Fcitx の設定については [[Fcitx]] の記事を参照してください。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行して Fcitx の設定ダイアログを開いてください:&lt;br /&gt;
 $ fcitx-configtool&lt;br /&gt;
&#039;&#039;Input Method&#039;&#039; タブからプラス記号をクリックしてダイアログのリストから Mozc を選択してください。設定によっては、Mozc を使うために &#039;&#039;Only Show Current Language&#039;&#039; オプションを無効化する必要があります。ダイアログの確認後、標準のキーボードショートカットを使って Mozc をインプットメソッドとして有効にできます。&lt;br /&gt;
&lt;br /&gt;
=== Emacs で Mozc を使う ===&lt;br /&gt;
&lt;br /&gt;
mozc.el (mozc-mode) を使用して LEIM (Library of Emacs Input Method) 経由で日本語を入力することができます。mozc-mode を使用するには、以下を {{ic|.emacs.d/init.el}} あるいはその他の Emacs カスタム設定用ファイルに追加します:&lt;br /&gt;
 (require &#039;mozc)  ; or (load-file &amp;quot;/path/to/mozc.el&amp;quot;)&lt;br /&gt;
 (setq default-input-method &amp;quot;japanese-mozc&amp;quot;)&lt;br /&gt;
mozc.el は変換候補の表示スタイルに、候補のリストを入力中文字列のそばに表示する &amp;quot;overlay&amp;quot; モードを提供しています (Mozc r77以降)。このモードをデフォルトで利用する場合は、以下の設定を追加します:&lt;br /&gt;
 (setq mozc-candidate-style &#039;overlay)&lt;br /&gt;
&lt;br /&gt;
{{ic|C-\}} (&#039;&#039;toggle-input-method&#039;&#039;) で mozc-mode のオン/オフを切り替えます。&lt;br /&gt;
&lt;br /&gt;
==== Emacs 上で C-SPC が IM のオン・オフで使われてしまうのを抑止する ====&lt;br /&gt;
&lt;br /&gt;
デスクトップ環境上で IM のオン・オフのキー割り当てに C-SPC を設定しており、Emacs 上でもそちらが優先されて C-SPC/C-@ で set-mark-command が使えなくて困る、という場合は、{{ic|~/.Xresources}} か {{ic|~/.Xdefaults}} に以下を追加します。&lt;br /&gt;
 Emacs*UseXIM: false&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 現在使用している Mozc のバージョンを表示する ===&lt;br /&gt;
&lt;br /&gt;
Mozc 起動中に &amp;quot;ばーじょん&amp;quot; と入力し変換すると、変換候補の中に現在の Mozc のバージョン番号が表示されます:&lt;br /&gt;
{{hc|&amp;lt;u&amp;gt;ばーじょん&amp;lt;/u&amp;gt;&lt;br /&gt;
|バージョン&lt;br /&gt;
ヴァージョン&lt;br /&gt;
ばーじょん&lt;br /&gt;
Mozc-1.6.1187.102  &#039;&#039;⇐ Mozc のバージョン&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
=== コマンドラインから Mozc ツールを起動 ===&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで Mozc のツールを起動できます:&lt;br /&gt;
* Mozc 設定: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=config_dialog}}&lt;br /&gt;
* Mozc 辞書ツール: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=dictionary_tool}}&lt;br /&gt;
* Mozc 単語登録: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=word_register_dialog}}&lt;br /&gt;
* Mozc 手書き文字入力: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=hand_writing}}&lt;br /&gt;
* Mozc 文字パレット: {{ic|1=$ /usr/lib/mozc/mozc_tool --mode=character_palette}}&lt;br /&gt;
&lt;br /&gt;
=== ASCII キーボードで CapsLock キーを英数キーとして使用する ===&lt;br /&gt;
&lt;br /&gt;
Mozc のプリセットのキーバインドや多くの日本語入力メソッドでは、変換前入力中の英数入力切り替えは、{{ic|英数}}キー、{{ic|ひらがな/カタカナ}}キー、あるいは{{ic|無変換}}キーなどに割り当てられていますが、ASCII キーボードにそれらはありません。CapsLock キーに英数キー (Eisu_toggle) を割り当てることで日本語キーボードと同じように使用できます (Mozc は CapsLock キーを認識しないようです)。&lt;br /&gt;
&lt;br /&gt;
以下の設定では、OADG キーボードと等価な、Eisu_toggle を {{ic|CapsLock}} キーに、Caps_Lock を {{ic|Shift + CapsLock}} キーに割り当てます。&lt;br /&gt;
{{Warning|この設定はデスクトップ全体に作用します。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.Xmodmap}} を以下のように編集します:&lt;br /&gt;
 keycode 66 = Eisu_toggle Caps_Lock&lt;br /&gt;
 clear Lock&lt;br /&gt;
&lt;br /&gt;
X 再起動するか、xmodmap コマンドを実行して編集を適用します:&lt;br /&gt;
 $ xmodmap ~/.Xmodmap&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Mozc のビルドに失敗する (プロセスが強制終了される) ===&lt;br /&gt;
&lt;br /&gt;
ビルドが以下のようなメッセージで異常終了した場合:&lt;br /&gt;
 ...&lt;br /&gt;
 /bin/sh: 1 行:  xxxx 強制終了&lt;br /&gt;
 ...&lt;br /&gt;
 make: *** [xxx/xxx ...] エラー 137&lt;br /&gt;
 ...&lt;br /&gt;
メモリ不足になっていないか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== Mozc をアップグレードし、X または IBus を再起動しても (リブートはしていない) 古い Mozc が動いている ===&lt;br /&gt;
&lt;br /&gt;
古いバージョンの Mozc が終了されずにずっとメモリ上で動作しているのかもしれません。Mozc のプロセスを一度 kill してみてください:&lt;br /&gt;
 $ killall mozc_server&lt;br /&gt;
&lt;br /&gt;
=== mozc_server が defunct になる ===&lt;br /&gt;
&lt;br /&gt;
Mozc の仕様により、root で Mozc を起動することはできません。一般ユーザーで X を起動してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/google/mozc Mozc 公式サイト]&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Docker&amp;diff=17062</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Docker&amp;diff=17062"/>
		<updated>2020-07-26T03:31:04Z</updated>

		<summary type="html">&lt;p&gt;Tgw314: ストレージドライバーの確認方法を修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:仮想化]]&lt;br /&gt;
[[Category:サンドボックス]]&lt;br /&gt;
[[en:Docker]]&lt;br /&gt;
[[ru:Docker]]&lt;br /&gt;
[[zh-hant:Docker]]&lt;br /&gt;
[[zh-hans:Docker]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|systemd-nspawn}}&lt;br /&gt;
{{Related|Linux Containers}}&lt;br /&gt;
{{Related|Vagrant}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://www.docker.com Docker] は軽量コンテナとしてあらゆるアプリケーションを詰めて運んで実行できるユーティリティです。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|docker}} パッケージ (または開発版を使いたい場合は {{Aur|docker-git}} パッケージ) を[[インストール]]してください。それから {{ic|docker.service}} を[[起動]]して有効化してください。動作検証をするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # docker info&lt;br /&gt;
&lt;br /&gt;
有効な vpn 接続がある場合 docker サービスの起動に失敗することがあることに注意してください。このような場合、docker サービスの起動前に vpn を切断してみて下さい。その後すぐに vpn に再接続できます。[https://stackoverflow.com/questions/45692255/how-make-openvpn-work-with-docker ネットワークの衝突開始を試してみることも可能です]。&lt;br /&gt;
&lt;br /&gt;
docker を通常ユーザーで実行できるようにしたい場合は、ユーザーを {{ic|docker}} [[グループ]]に追加してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ユーザーを {{ic|docker}} グループに追加することは root にするのと同義です。詳しくは [https://github.com/docker/docker/issues/9976 こちら] や [https://docs.docker.com/engine/security/security/ こちら] を参照。}}&lt;br /&gt;
&lt;br /&gt;
=== Rootless モード ===&lt;br /&gt;
Docker の rootless モードを使うと root 権限より低い権限にて Docker を動かせます。&lt;br /&gt;
&lt;br /&gt;
{{Aur|docker-rootless}} を追加でインストールし、AUR パッケージ作者によるコメント [https://aur.archlinux.org/packages/docker-rootless/#pinned-724406] に記された設定を行ってください。&lt;br /&gt;
&lt;br /&gt;
一部の機能が動作しないなどの制限もあります。詳細は Docker 公式ドキュメント&lt;br /&gt;
[https://docs.docker.com/engine/security/rootless/ Run the Docker daemon as a non-root user (Rootless mode)] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== ストレージドライバー ===&lt;br /&gt;
&lt;br /&gt;
docker のストレージドライバー (グラフドライバー) は性能に大きな影響を与えます。ストレージドライバーはコンテナのイメージレイヤーを効率的に保存し、複数のイメージでレイヤーを共有している場合、ディスク容量を使用するレイヤーはひとつだけになります。デフォルトのストレージドライバーである {{ic|devicemapper}} は次善的な性能しか発揮できず、ハードディスクでは問題外です。したがって、プロダクション環境で {{ic|devicemapper}} を使用することは推奨されません。&lt;br /&gt;
&lt;br /&gt;
Arch Linux のカーネルは新しいため、古いドライバーを使用する意味はありません。{{ic|overlay2}} が新しいドライバーです。&lt;br /&gt;
&lt;br /&gt;
現在のストレージドライバーを確認するには {{ic|# docker info {{!}} grep &amp;quot;Storage Driver&amp;quot;}} を実行してください。最近の docker 環境では {{ic|overlay2}} がデフォルトで使われます。&lt;br /&gt;
&lt;br /&gt;
ストレージドライバーを自分で選択して設定するには、{{ic|/etc/docker/daemon.json}} を編集してください (ファイルが存在しない場合は作成してください):&lt;br /&gt;
{{hc|/etc/docker/daemon.json|2=&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;storage-driver&amp;quot;: &amp;quot;overlay2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、docker を[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
オプションに関する詳細は [https://docs.docker.com/engine/userguide/storagedriver/selectadriver/ ユーザーガイド] を見てください。{{ic|daemon.json}} の中のオプションの詳細は [https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file dockerd のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== Remote API ===&lt;br /&gt;
&lt;br /&gt;
ポート {{ic|4243}} で Remote API を手動で開くには:&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
{{ic|-H tcp://0.0.0.0:4243}} で Remote API が開かれます。&lt;br /&gt;
&lt;br /&gt;
{{ic|-H unix:///var/run/docker.sock}} はターミナルからホストマシンにアクセスできるようにします。&lt;br /&gt;
&lt;br /&gt;
==== Remote API と systemd ====&lt;br /&gt;
&lt;br /&gt;
docker デーモンで Remote API を起動するには、以下の内容で[[ドロップインスニペット]]を作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/override.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== デーモンのソケットの設定 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;docker&#039;&#039; デーモンはデフォルトで [[Wikipedia:ja:UNIXドメインソケット|Unix ソケット]]を使います。特定のポートを listen させるには、以下の内容の[[ドロップインスニペット]]を作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.socket.d/socket.conf|2=&lt;br /&gt;
[Socket]&lt;br /&gt;
ListenStream=0.0.0.0:2375&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシの設定は2つに分けられます。ひとつは Docker デーモンのホストの設定で、もうひとつはコンテナからプロキシにアクセスできるようにするための設定です。 &lt;br /&gt;
&lt;br /&gt;
==== プロキシの設定 ====&lt;br /&gt;
&lt;br /&gt;
以下の内容で[[ドロップインスニペット]]を作成:&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/proxy.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;HTTP_PROXY=192.168.1.1:8080&amp;quot;&lt;br /&gt;
Environment=&amp;quot;HTTPS_PROXY=192.168.1.1:8080&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|これはあなたのプロクシサーバが {{ic|192.168.1.1}} だと仮定しています、{{ic|127.0.0.1}} は使わないでください。}}&lt;br /&gt;
&lt;br /&gt;
設定がロードされたことを確認:&lt;br /&gt;
&lt;br /&gt;
{{hc|# systemctl show docker --property Environment|2=&lt;br /&gt;
Environment=HTTP_PROXY=192.168.1.1:8080 HTTPS_PROXY=192.168.1.1:8080&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== コンテナの設定 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|docker.service}} ファイルの設定はコンテナには適用されません。{{ic|Dockerfile}} で {{ic|ENV}} 変数を設定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 FROM base/archlinux&lt;br /&gt;
 ENV http_proxy=&amp;quot;&amp;lt;nowiki&amp;gt;http://192.168.1.1:3128&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
 ENV https_proxy=&amp;quot;&amp;lt;nowiki&amp;gt;https://192.168.1.1:3128&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[https://docs.docker.com/engine/reference/builder/#env Docker] は Dockerfile で {{ic|ENV}} を使って設定する方法について詳しい情報を提供しています。&lt;br /&gt;
&lt;br /&gt;
=== DNS の設定 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、docker はホストマシンにある {{ic|resolv.conf}} と同じ中身の {{ic|resolv.conf}} をコンテナに作成します。その際、ローカルアドレス (例: {{ic|127.0.0.1}}) は消されます。それによって {{ic|resolv.conf}} が空ファイルになった場合、[https://developers.google.com/speed/public-dns/ Google の DNS サーバー] が記述されます。[[dnsmasq]] などのサービスを利用して名前を解決するようにしたい場合、設定が消されないように docker のネットワークインターフェイス用にエントリを {{ic|/etc/resolv.conf}} に追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== systemd-networkd 上に手動で定義したネットワークで Docker を実行 ===&lt;br /&gt;
&lt;br /&gt;
バージョン &#039;&#039;220&#039;&#039; 以上の [[systemd-networkd]] を使ってネットワークを手動設定している場合、Docker で起動したコンテナがネットワークにアクセスできない場合があります。バージョン 220 から、ネットワークの転送設定 ({{ic|net.ipv4.conf.&amp;lt;interface&amp;gt;.forwarding}}) はデフォルトで {{ic|off}} です。この設定で IP フォワーディングが使えません。また、コンテナの中で Docker によって有効になる {{ic|net.ipv4.conf.all.forwarding}} の設定と衝突します。&lt;br /&gt;
&lt;br /&gt;
インターネットにアクセスするには、Docker のホスト側で {{ic|/etc/systemd/network/}} にある {{ic|&amp;lt;interface&amp;gt;.network}} ファイルを編集して {{ic|1=IPForward=kernel}} を追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/network/&amp;lt;interface&amp;gt;.network|2=&lt;br /&gt;
[Network]&lt;br /&gt;
...&lt;br /&gt;
IPForward=kernel&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
上記の設定でコンテナから IP フォワーディングが使えるようになります。&lt;br /&gt;
&lt;br /&gt;
=== イメージの置き場所 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、docker のイメージは {{ic|/var/lib/docker}} に保存されます。置き場所は別のパーティションに移動することが可能です。&lt;br /&gt;
まず、{{ic|docker.service}} を[[停止]]してください。&lt;br /&gt;
&lt;br /&gt;
docker イメージを起動したことがある場合、イメージが完全にアンマウントされていることを確認します。そうしたら、イメージを {{ic|/var/lib/docker}} から好きな場所に移動してください。&lt;br /&gt;
&lt;br /&gt;
その後、{{ic|docker.service}} の[[ドロップインスニペット]]を作成して、{{ic|ExecStart}} に {{ic|-g}} パラメータを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/docker-storage.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart= &lt;br /&gt;
ExecStart=/usr/bin/dockerd -g &#039;&#039;/path/to/new/location/docker&#039;&#039; -H fd://}}&lt;br /&gt;
&lt;br /&gt;
=== 安全ではないレジストリ ===&lt;br /&gt;
&lt;br /&gt;
もしプライベートレジストリに自己署名証明書を使うことに決めた場合、あなたが信頼すると宣言するまで Docker はその使用を拒否します。{{ic|docker.service}} の[[ドロップインスニペット]]を追加して、{{ic|--insecure-registry}} パラメータを {{ic|dockerd}} に追加してください:&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/override.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry my.registry.name:5000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== イメージ ==&lt;br /&gt;
=== Arch Linux ===&lt;br /&gt;
次のコマンドは [https://hub.docker.com/r/archlinux/base/ archlinux/base] x86_64 イメージを取得します。これはネットワークなどを削減した Arch コア環境です:&lt;br /&gt;
 # docker pull archlinux/base&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://github.com/archlinux/archlinux-docker/blob/master/README.md README.md] を参照してください。&lt;br /&gt;
&lt;br /&gt;
完全な Arch ベース環境を得るには、リポジトリを clone して自分でイメージを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://github.com/archlinux/archlinux-docker.git&lt;br /&gt;
&lt;br /&gt;
&#039;base&#039; のみを含めるように {{ic|packages}} ファイルを編集してください。そして以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # make docker-image&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
以下のコマンドで [https://hub.docker.com/r/_/debian/ debian] x86_64 イメージが取得されます:&lt;br /&gt;
 # docker pull debian&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|debootstrap}} で Debian イメージを作成:&lt;br /&gt;
&lt;br /&gt;
 # mkdir jessie-chroot&lt;br /&gt;
 # debootstrap jessie ./jessie-chroot http://http.debian.net/debian/&lt;br /&gt;
 # cd jessie-chroot&lt;br /&gt;
 # tar cpf - . | docker import - debian&lt;br /&gt;
 # docker run -t -i --rm debian /bin/bash&lt;br /&gt;
&lt;br /&gt;
== Docker とイメージの削除 ==&lt;br /&gt;
&lt;br /&gt;
Docker を完全に削除したい場合は以下の手順に従ってください。&lt;br /&gt;
&lt;br /&gt;
{{Note|コマンドを実行する前にどういう意味なのか考えてください。何も考えずにコピーアンドペーストしてはいけません。}}&lt;br /&gt;
&lt;br /&gt;
実行中のコンテナをチェック:&lt;br /&gt;
&lt;br /&gt;
 # docker ps&lt;br /&gt;
&lt;br /&gt;
削除するホストで実行中の全てのコンテナを確認:&lt;br /&gt;
&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
実行中のコンテナを停止:&lt;br /&gt;
&lt;br /&gt;
 # docker stop &amp;lt;CONTAINER ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
停止しないコンテナを終了:&lt;br /&gt;
&lt;br /&gt;
 # docker kill &amp;lt;CONTAINER ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ID で指定して全てのコンテナを削除:&lt;br /&gt;
&lt;br /&gt;
 # docker rm &amp;lt;CONTAINER ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
全ての Docker イメージを確認:&lt;br /&gt;
&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
ID で指定して全てのイメージを削除:&lt;br /&gt;
&lt;br /&gt;
 # docker rmi &amp;lt;IMAGE ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
全ての Docker データを削除:&lt;br /&gt;
&lt;br /&gt;
 # rm -R /var/lib/docker&lt;br /&gt;
&lt;br /&gt;
== 便利なヒント ==&lt;br /&gt;
&lt;br /&gt;
実行中のコンテナの IP アドレスを取得するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;$ docker inspect --format=&#039;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&#039; &amp;lt;container-name OR id&amp;gt; &amp;lt;/nowiki&amp;gt;|&lt;br /&gt;
172.17.0.37}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行中のコンテナについて、{{ic|/etc/hosts}} で使うために名前と対応する IP アドレスを出力:&lt;br /&gt;
&lt;br /&gt;
{{bc|#!/usr/bin/env sh&lt;br /&gt;
&amp;lt;nowiki&amp;gt;for ID in $(docker ps -q | awk &#039;{print $1}&#039;); do&lt;br /&gt;
    IP=$(docker inspect --format=&amp;quot;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&amp;quot; &amp;quot;$ID&amp;quot;)&lt;br /&gt;
    NAME=$(docker ps | grep &amp;quot;$ID&amp;quot; | awk &#039;{print $NF}&#039;)&lt;br /&gt;
    printf &amp;quot;%s %s\n&amp;quot; &amp;quot;$IP&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== systemd 232 でコンテナが起動できない ===&lt;br /&gt;
[[カーネルパラメータ]]として {{ic|1=systemd.legacy_systemd_cgroup_controller=yes}} を追加してください。詳しくは [https://github.com/opencontainers/runc/issues/1175 バグレポート] を参照。&lt;br /&gt;
&lt;br /&gt;
=== Btrfs ファイルシステムで Docker イメージを消去 ===&lt;br /&gt;
&lt;br /&gt;
[[btrfs]] ファイルシステムで docker イメージを削除すると {{ic|/var/lib/docker/btrfs/subvolumes/}} にサイズが0のイメージが残されてしまいます。これを削除しようとするとパーミッションエラーが表示されます:&lt;br /&gt;
 # docker rm bab4ff309870&lt;br /&gt;
 # rm -Rf /var/lib/docker/btrfs/subvolumes/*&lt;br /&gt;
 rm: cannot remove &#039;/var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab&#039;: Operation not permitted&lt;br /&gt;
&lt;br /&gt;
このエラーは btrfs が docker イメージのためにサブボリュームを作成したのが原因です。したがって削除するときの正しいコマンドは次のようになります:&lt;br /&gt;
 # btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab&lt;br /&gt;
&lt;br /&gt;
=== docker0 ブリッジが IP を取得できない / コンテナからインターネットにアクセスできない ===&lt;br /&gt;
&lt;br /&gt;
Docker は自分で IP フォワーディングを有効にしますが、デフォルトでは [[systemd-networkd]] によって sysctl の設定が上書きされてしまいます。ネットワークプロファイルに {{ic|1=IPForward=yes}} を設定してください。詳しくは[[インターネット共有#パケット転送の有効化]]を参照してください。&lt;br /&gt;
	&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|systemd-networkd.service}} や {{ic|iptables.service}} を[[再起動]]したときは {{ic|docker.service}} を[[再起動]]する必要があります。&lt;br /&gt;
* [[nftables]] によって docker の接続がデフォルトでブロックされる可能性があります。{{ic|nft list ruleset}} を使ってブロックしているルールを確認してください。{{ic|nft flush chain inet filter forward}} で一時的に全ての転送ルールを削除できます。変更を永続化するには {{ic|/etc/nftables.conf}} を編集してください。設定ファイルからルールをリロードするには {{ic|nftables.service}} を[[再起動]]してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== デフォルトで使用できるプロセスやスレッドの数が少なすぎる ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 # e.g. Java&lt;br /&gt;
 java.lang.OutOfMemoryError: unable to create new native thread&lt;br /&gt;
 # e.g. C, bash, ...&lt;br /&gt;
 fork failed: Resource temporarily unavailable&lt;br /&gt;
&lt;br /&gt;
systemd によって許可されるプロセスの数を調整する必要があります。デフォルトは 500 ですが ({{ic|system.conf}} を参照)、複数の docker コンテナを動作させるには少なすぎます。以下のスニペットで {{ic|docker.service}} を[[編集]]してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# systemctl edit docker.service|2=&lt;br /&gt;
[Service]&lt;br /&gt;
TasksMax=infinity&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Error initializing graphdriver: devmapper ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemctl&#039;&#039; で docker の起動に失敗して以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Error starting daemon: error initializing graphdriver: devmapper: Device docker-8:2-915035-pool is not a thin pool&lt;br /&gt;
&lt;br /&gt;
エラーを解消するには、サービスを停止して、{{ic|/var/lib/docker/}} を (必要に応じて) バックアップし、{{ic|/var/lib/docker/}} の中身を消してから、サービスを起動してみてください。詳しくは [https://github.com/docker/docker/issues/21304 GitHub issue] を参照。&lt;br /&gt;
&lt;br /&gt;
=== Failed to create some/path/to/file: No space left on device ===&lt;br /&gt;
&lt;br /&gt;
以下のようにエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ERROR: Failed to create some/path/to/file: No space left on device&lt;br /&gt;
&lt;br /&gt;
Docker イメージの作成・実行時、ディスク容量が十分に存在するにもかかわらず、上記のメッセージが表示されるときは以下を確認してください:&lt;br /&gt;
&lt;br /&gt;
* [[Tmpfs]] が無効になっている、あるいは十分なメモリが割り当てられている。Docker が {{ic|/tmp}} にファイルを書き出そうとしていて、ディスク容量ではなくメモリ使用量が制限となっている可能性があります。&lt;br /&gt;
* [[XFS]] を使っている場合、{{ic|/etc/fstab}} の ({{ic|/tmp}} や {{ic|/var/lib/docker}} がある) エントリから {{ic|noquota}} マウントオプションを削除すると良いかもしれません。詳しくは[[ディスククォータ]]を参照してください。Docker ストレージドライバーの {{ic|overlay2}} を使用するときは特に注意してください。&lt;br /&gt;
* XFS クォータのマウントオプション ({{ic|uquota}}, {{ic|gquota}}, {{ic|prjquota}} など) がファイルシステムの再マウント時に失敗している。ルートファイルシステムでクォータを使うには、マウントオプションを {{ic|1=rootflags=}} [[カーネルパラメータ]]で initramfs に渡す必要があります。その場合、root ({{ic|/}}) ファイルシステムのマウントオプションとして {{ic|/etc/fstab}} に指定してはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Note|XFS のクォータと Linux 標準の[[ディスククォータ]]には違いが存在します。詳しくは [http://inai.de/linux/adm_quota] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネル 4.19.1 で Invalid cross-device link ===&lt;br /&gt;
&lt;br /&gt;
docker 内で &#039;dpkg&#039; のようなコマンドの実行に失敗することがあります。例:&lt;br /&gt;
&lt;br /&gt;
 dpkg: error: error creating new backup file &#039;/var/lib/dpkg/status-old&#039;: Invalid cross-device link&lt;br /&gt;
&lt;br /&gt;
その場合 {{ic|1=overlay.metacopy=N}} [[カーネルパラメータ]]を追加するか、[https://github.com/docker/for-linux/issues/480 この問題] が解決するまで 4.18.x にダウングレードしてください。詳しくは [https://bbs.archlinux.org/viewtopic.php?id=241866 Arch フォーラム] を参照。&lt;br /&gt;
&lt;br /&gt;
=== virtualbox ドライバーを使用したときに Docker-machine が仮想マシンの作成に失敗する ===&lt;br /&gt;
&lt;br /&gt;
以下のように virtualbox ドライバーで docker-machine が仮想マシンの作成に失敗する場合:&lt;br /&gt;
&lt;br /&gt;
 VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{ic|vboxreload}} で CLI から virtualbox をリロードしてください。&lt;br /&gt;
&lt;br /&gt;
=== Docker を起動すると KVM のブリッジネットワークが壊れる ===&lt;br /&gt;
&lt;br /&gt;
[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=865975 既知のバグ] が原因です。以下の方法で回避できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/docker/daemon.json|2=&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;iptables&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.docker.com 公式ウェブサイト]&lt;br /&gt;
* [https://docs.docker.com/engine/installation/linux/archlinux/ Arch Linux on docs.docker.com]&lt;br /&gt;
* [http://opensource.com/business/14/7/docker-security-selinux Are Docker containers really secure?] — opensource.com&lt;/div&gt;</summary>
		<author><name>Tgw314</name></author>
	</entry>
</feed>