<?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=Sanlun</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=Sanlun"/>
	<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/Sanlun"/>
	<updated>2026-04-12T13:50:02Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Msmtp&amp;diff=40363</id>
		<title>Msmtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Msmtp&amp;diff=40363"/>
		<updated>2025-06-06T07:54:29Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: 英語版の最新の内容に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:メールクライアント]]&lt;br /&gt;
[[Category:OpenPGP]]&lt;br /&gt;
[[en:Msmtp]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|mutt}}&lt;br /&gt;
{{Related|OfflineIMAP}}&lt;br /&gt;
{{Related|SSMTP}}&lt;br /&gt;
{{Related|S-nail}}&lt;br /&gt;
{{Related|OpenSMTPD}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[http://msmtp.sourceforge.net/ msmtp] はとてもシンプルで使いやすい SMTP クライアントです。[[sendmail]] と完全な互換性があります。&lt;br /&gt;
&lt;br /&gt;
==インストール==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|msmtp}} パッケージで[[インストール]]できます。さらに {{Pkg|msmtp-mta}} をインストールすることで msmtp に sendmail エイリアスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==基本設定==&lt;br /&gt;
&lt;br /&gt;
msmtp バージョン 1.8.6 以降、設定ファイルを {{ic|~/.msmtprc}} か {{ic|$XDG_CONFIG_HOME/msmtp/config}} に配置することができます。以下は msmtp の設定例です (パッケージに含まれている、{{ic|/usr/share/doc/msmtp/msmtprc-user.example}} にある通常ユーザーのサンプルが基になっています。システム設定ファイルは {{ic|/etc/msmtprc}} にあり、サンプルは {{ic|/usr/share/doc/msmtp/msmtprc-system.example}} にあります):&lt;br /&gt;
&lt;br /&gt;
{{Tip|Gmail を使う場合は、以下のどちらかが必要です:&lt;br /&gt;
* [[#OAuth2 設定]] で OAuth を使う。&lt;br /&gt;
* 二段階認証を使う場合は [https://myaccount.google.com/apppasswords アプリパスワードを作成します]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.msmtprc|&lt;br /&gt;
# Set default values for all following accounts.&lt;br /&gt;
defaults&lt;br /&gt;
auth           on&lt;br /&gt;
tls            on&lt;br /&gt;
tls_trust_file /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
logfile        ~/.msmtp.log&lt;br /&gt;
&lt;br /&gt;
# Gmail&lt;br /&gt;
account        gmail&lt;br /&gt;
host           smtp.gmail.com&lt;br /&gt;
port           465&lt;br /&gt;
from           &#039;&#039;username&#039;&#039;@gmail.com&lt;br /&gt;
user           &#039;&#039;username&#039;&#039;&lt;br /&gt;
password       &#039;&#039;plain-text-password&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# A freemail service&lt;br /&gt;
account        freemail&lt;br /&gt;
host           smtp.freemail.example&lt;br /&gt;
from           joe_smith@freemail.example&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# Accounts can inherit info from another account&lt;br /&gt;
account        postmasterfreemail : freemail&lt;br /&gt;
from           postmaster*@freemail.example&lt;br /&gt;
&lt;br /&gt;
# Set a default account&lt;br /&gt;
account default : gmail&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|SSL/TLS を使っていて &amp;quot;Server sent empty reply&amp;quot; エラーメッセージが表示される場合、[[#Server sent empty reply]] を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーの設定ファイルは所有者が読み書きできるように明示的に設定しないと msmtp がエラーを吐きます:&lt;br /&gt;
&lt;br /&gt;
 $ chmod 600 ~/.msmtprc&lt;br /&gt;
&lt;br /&gt;
設定ファイルに平文でパスワードを保存したくない場合、&#039;&#039;passwordeval&#039;&#039; を使って外部プログラムを起動するか、あるいは下の[[#パスワード管理|パスワード管理]]セクションを見てください。以下は [[GnuPG]] を使ってパスワードを暗号化する例です:&lt;br /&gt;
&lt;br /&gt;
 $ echo -e &amp;quot;password\n&amp;quot; | gpg --encrypt -o .msmtp-gmail.gpg # enter id (email...)&lt;br /&gt;
&lt;br /&gt;
{{Warning|ほとんどのシェルはコマンド履歴を保存します (例: {{ic|.bash_history}} や {{ic|.zhistory}})。GPG でシェルの標準入力を使いたくない場合 {{ic|gpg --encrypt -o .msmtp-gmail.gpg -r &amp;lt;email&amp;gt; -}} コマンドを使ってください。最後のダッシュは打ち間違えではなく標準入力を使うために必要な文字です。コマンドを実行したら、パスワードを入力してから Control-d を押せば GPG によってパスワードが暗号化されます。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.msmtprc|&lt;br /&gt;
passwordeval    &amp;quot;gpg --quiet --for-your-eyes-only --no-tty --decrypt ~/.msmtp-gmail.gpg&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== OAuth2 設定 ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:OAuth2|OAuth2]] は、基本的なユーザー名/パスワード認証がサイト構成によってサポートされていない場合、または他の点で望ましくない場合に、msmtp を安全に認証するために使用できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|[https://superuser.com/questions/1723180/how-to-continue-using-msmtp-oauth-2-0-for-gmail-in-mutt-after-oob-deprecation この投稿] では、現在 Gmail に許可されている極めて制限されている機能について説明しています。}}&lt;br /&gt;
&lt;br /&gt;
==== oama ====&lt;br /&gt;
&lt;br /&gt;
msmtp だけでは OAuth2 資格情報を更新・認証することができません。包括的な解決方法は、[https://github.com/pdobsan/oama oama] ユーティリティを使うことです。これは IMAP/SMTP クライアントに OAuth2 資格情報の更新能力と認証を提供します。&lt;br /&gt;
&lt;br /&gt;
oama を使うには、{{AUR|oama-bin}} を [[インストール]] し、 msmtp を設定して使用できるようにします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # account at Google with oauth2 access&lt;br /&gt;
    account YOUR_EMAIL_NAME@gmail.com&lt;br /&gt;
    from YOUR_EMAIL_NAME@gmail.com&lt;br /&gt;
    user YOUR_EMAIL_NAME@gmail.com&lt;br /&gt;
    auth oauthbearer&lt;br /&gt;
    passwordeval oama access YOUR_EMAIL_NAME@gmail.com&lt;br /&gt;
    host smtp.gmail.com&lt;br /&gt;
    port 587&lt;br /&gt;
    tls on&lt;br /&gt;
    tls_trust_file /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
&lt;br /&gt;
アクセストークン更新は、ユーザーには見えないバックグラウンドで自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
==mail コマンドを使う==&lt;br /&gt;
&lt;br /&gt;
{{ic|mail}} コマンドを使ってメールを送信するには {{Pkg|s-nail}} パッケージをインストールする必要があります。これは、 {{ic|mailx}} コマンドも提供します。それに加えて {{ic|sendmail}} 互換の MTA が必要です。{{Pkg|msmtp-mta}} をインストールするか(これは {{ic|sendmail} を {{ic|msmtp}} へシンボリックリンクします) {{ic|/etc/mail.rc}} を編集して sendmail クライアントを設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mail.rc|2=set mta=/usr/bin/msmtp}}&lt;br /&gt;
&lt;br /&gt;
システム共通の {{ic|/etc/msmtprc}} ファイルを使用するか、{{ic|.msmtprc}} ファイルをメールを送信したい全てのユーザーのホームディレクトリに配置する必要があります。&lt;br /&gt;
&lt;br /&gt;
msmtp ではエイリアスが使えます。以下の行を msmtprc のデフォルトセクションかローカルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/msmtprc|2=aliases               /etc/aliases}}&lt;br /&gt;
&lt;br /&gt;
そして {{ic|/etc}} にエイリアスファイルを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/aliases|2=# Example aliases file&lt;br /&gt;
&lt;br /&gt;
# Send root to Joe and Jane&lt;br /&gt;
root: joe_smith@example.com, jane_chang@example.com&lt;br /&gt;
&lt;br /&gt;
# Send everything else to admin&lt;br /&gt;
default: admin@domain.example}}&lt;br /&gt;
&lt;br /&gt;
==動作のテスト==&lt;br /&gt;
&lt;br /&gt;
アカウントオプション ({{ic|1=--account=,-a}}) で送信元として使用するアカウントを指定します:&lt;br /&gt;
&lt;br /&gt;
 $ echo &amp;quot;hello there username.&amp;quot; | msmtp -a default &#039;&#039;username&#039;&#039;@domain.com&lt;br /&gt;
&lt;br /&gt;
もしくは、件名と本文の両方を送信するには:&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;Subject: Test\n\nhello there username.&amp;quot; | msmtp -a default &#039;&#039;username&#039;&#039;@domain.com&lt;br /&gt;
&lt;br /&gt;
もしくは、ファイルにアドレスを書いて使用するには:&lt;br /&gt;
&lt;br /&gt;
 To: &#039;&#039;username&#039;&#039;@domain.com&lt;br /&gt;
 From: &#039;&#039;username&#039;&#039;@gmail.com&lt;br /&gt;
 Subject: A test&lt;br /&gt;
&lt;br /&gt;
 Hello there.&lt;br /&gt;
&lt;br /&gt;
 $ cat test.mail | msmtp -a default &amp;lt;username&amp;gt;@domain.com&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;-a default&#039;&#039; の代わりに &#039;&#039;--read-envelope-from&#039;&#039; を使うことで送信するメッセージの &#039;&#039;From:&#039;&#039; に使われるアカウントが自動的に選択されます。また、 {{ic|--read-recipients,-t}} を使うことで、コマンドラインで指定した受信者に加えてメールの To、CC、Bcc ヘッダーから受信者のアドレスを読み込むことができます。}}&lt;br /&gt;
&lt;br /&gt;
==Cronie のデフォルトメールクライアント==&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Arch は cronie の代わりに [[systemd/タイマー]] を使います。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|cronie}} で sendmail ではなく msmtp を使うようにするには、{{Pkg|msmtp-mta}} をインストールするか、{{ic|cronie.service}} systemd ユニットを編集してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/cronie.service.d/msmtp.conf|[Service]&lt;br /&gt;
ExecStart&amp;amp;#61;&lt;br /&gt;
ExecStart&amp;amp;#61;/usr/bin/crond -n -m &#039;/usr/bin/msmtp -t&#039;}}&lt;br /&gt;
&lt;br /&gt;
それから cronie あるいは msmtp にメールアドレスを設定してください:&lt;br /&gt;
&lt;br /&gt;
*{{ic|/etc/msmtprc}} に追加: {{bc|aliases /etc/aliases}} それから {{ic|/etc/aliases}} を作成: {{bc|your_username: email@address.com}}または：&lt;br /&gt;
*crontab の {{ic|MAILTO}} 行に追加: {{bc|MAILTO&amp;amp;#61;email@address.com}}&lt;br /&gt;
&lt;br /&gt;
==パスワード管理==&lt;br /&gt;
&lt;br /&gt;
msmtp のパスワードはプレーンテキスト・暗号化ファイル・キーリングのどれかに保存できます [http://msmtp.sourceforge.net/doc/msmtp.html#Authentication]。&lt;br /&gt;
&lt;br /&gt;
===GNOME Keyring===&lt;br /&gt;
&lt;br /&gt;
[[GNOME Keyring]] にパスワードを保存することができます。Wiki ページに従ってキーリングを設定したら {{Pkg|libsecret}} をインストールしてください。以下のコマンドでパスワードを保存できます:&lt;br /&gt;
&lt;br /&gt;
 $ secret-tool store --label=msmtp host &#039;&#039;smtp.your.domain&#039;&#039; service smtp user &#039;&#039;yourusername&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
msmtp は自動的にパスワードを確認します。&lt;br /&gt;
&lt;br /&gt;
===GnuPG===&lt;br /&gt;
&lt;br /&gt;
{{Ic|password}} ディレクティブは省略できます。省略した場合、アカウントの {{Ic|auth}} を {{Ic|off}} 以外の値に設定することで、インタラクティブシェルから msmtp を起動したときにメールの送信前にパスワードが要求されるようになります。[[Mutt]] などの他のアプリケーションから呼び出されたときは msmtp はパスワードを要求しません。そのようなときは {{ic|--passwordeval}} パラメータを使って [[GnuPG]] などの外部のキーリングツールを使用することができます。&lt;br /&gt;
&lt;br /&gt;
[[GnuPG]] と [[GnuPG#gpg-agent|gpg-agent]] を設定してパスワードを毎回入力しなくてもよいようにしてください。それから、以下のように msmtp 用に暗号化したパスワードファイルを作成してください。{{ic|700}} パーミッションで [[tmpfs]] 上にディレクトリを作成することで、ディスクに暗号化されていないパスワードが書き込まれないようにすることができます。ディレクトリの中にはメールアカウントのパスワードを記述したプレーンテキストファイルを作成してください。そして、秘密鍵を使ってファイルを暗号化してください:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --default-recipient-self -e &#039;&#039;/path/to/plain/password&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
プレーンテキストファイルを削除して、暗号化したファイルを適切なディレクトリに移動してください (例: {{ic|~/.mail/.msmtp-credentials.gpg}})。{{ic|~/.msmtprc}} に以下を追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.msmtprc|passwordeval  &amp;quot;gpg --quiet --for-your-eyes-only --no-tty --decrypt ~/.mail/.msmtp-credentials.gpg&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
[[Mutt]] などからメールを送信するときに GUI のパスワードプロンプトを表示するだけなら上記で十分です。gpg によってパスフレーズのプロンプトが表示されない場合、先に [[GPG#gpg-agent|gpg-agent]] を起動してください。muttrc に {{ic| ` command ` }} のようにバッククォートを使って外部コマンドを指定することでエージェントを起動できます。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|muttrc|set my_msmtp_pass&amp;amp;#61;`gpg -d mypwfile.gpg`}}&lt;br /&gt;
&lt;br /&gt;
Mutt は起動時にこれを実行し、gpg-agent はあなたのパスワードをキャッシュし、 msmtp は喜んでメールを送れるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note| この場合、再びメールの受信を開始するには gpg-agent がパスワードをクリアした後 mutt を再起動する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
An alternative is to place passwords in {{ic|~/.netrc}}, a file that can act as a common pool for msmtp, [[OfflineIMAP]], and associated tools.&lt;br /&gt;
&lt;br /&gt;
代替案としては、 msmtp、[[OfflineIMAP]]及び関連ツールで共通して管理できる {{ic|~/.netrc}}にパスワードを置く方法があります。&lt;br /&gt;
&lt;br /&gt;
=== pass ===&lt;br /&gt;
&lt;br /&gt;
認証情報を [[pass]] パスワードマネージャ内に保存することができます。&lt;br /&gt;
&lt;br /&gt;
メインパスワード(通常はpassファイルの1行目に格納)で SMTP サーバにログインする場合は、以下を {{ic|.msmptrc}} に追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.msmtprc|&lt;br /&gt;
passwordeval   &amp;quot;pass your_email_password_entry {{!}} head -n1&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://www.google.com/gmail/ Gmail] を使っていて[https://myaccount.google.com/apppasswords アプリパスワード]の設定が済んでいるのなら、以下の設定がふさわしいでしょう。アプリパスワードを {{ic|pass}} パスワードファイルに保存しますが、{{ic|msmtp:}} プレフィックスを付けて下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|your_email_password_entry|&lt;br /&gt;
your_main_password&lt;br /&gt;
&lt;br /&gt;
login: your_username&lt;br /&gt;
url: the_url_of_your_email&lt;br /&gt;
&#039;&#039;&#039;msmtp: your_msmtp_app_password&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
そして、{{ic|.msmptrc}} に以下を追加して下さい。:&lt;br /&gt;
{{hc|~/.msmtprc|&lt;br /&gt;
passwordeval   &amp;quot;pass your_email_password_entry {{!}} awk &#039;/^msmtp:/ { print $2; }&#039;&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
どちらの場合も、  msmtpでメールを送信しようとすると {{ic|pass}} が起動します。最近入力していないのであれば、 {{ic|pass}} のマスターパスワードを求められるかもしれません。&lt;br /&gt;
&lt;br /&gt;
==ヒントとテクニック==&lt;br /&gt;
&lt;br /&gt;
===msmtp をオフラインで使う===&lt;br /&gt;
&lt;br /&gt;
msmtp は素晴らしいツールですが、使用するにはオンラインになる必要があります。インターネットに常時接続することができないノートパソコンなどではあまり好ましくありません。この問題を解決するためのスクリプトが複数存在し、まとめて msmtpqueue と呼ばれます。&lt;br /&gt;
&lt;br /&gt;
スクリプトは {{ic|/usr/share/doc/msmtp/msmtpqueue}} にインストールされます。スクリプトはどこか便利な場所にコピーすると良いでしょう ({{ic|/usr/local/bin}} を推奨します)。&lt;br /&gt;
&lt;br /&gt;
そして MUA でメールを送信するときに msmtp のかわりに msmtp-enqueue.sh を使うようにしてください。デフォルトでは、キューに入ったメッセージは {{ic|~/.msmtpqueue}} に保存されます。保存場所を変更したい場合はスクリプトの {{ic|QUEUEDIR&amp;amp;#61;$HOME/.msmtpqueue}} 行を変更してください (もしくは行を削除して、{{ic|.bash_profile}} で QUEUEDIR 変数をエクスポートしてください: {{ic|export QUEUEDIR&amp;amp;#61;&amp;quot;$XDG_DATA_HOME/msmtpqueue&amp;quot;}})。&lt;br /&gt;
&lt;br /&gt;
作成したメールを送信したいときは以下のコマンドを実行:&lt;br /&gt;
 $ /usr/local/bin/msmtp-runqueue.sh&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/local/bin}} を PATH に追加することでキーストロークを少なくすることができます。スクリプトに付属している README ファイルには有用な情報が載っているため、読むことを推奨します。&lt;br /&gt;
&lt;br /&gt;
===Vim のシンタックスハイライト===&lt;br /&gt;
msmtp のソースディストリビューションには [[Vim]] 用の {{ic|msmtprc}} のシンタックスハイライトスクリプトが含まれています。{{ic|/usr/share/vim/vimfiles/syntax/msmtp.vim}} で利用できます。ファイルタイプは自動的に認識されません。[http://vimdoc.sourceforge.net/htmldoc/options.html#modeline modeline] をファイルの一番上あるいは下に追加するのが簡単です:&lt;br /&gt;
&lt;br /&gt;
 # vim:filetype=msmtp&lt;br /&gt;
&lt;br /&gt;
===msmtp を使って PHP でメールを送信===&lt;br /&gt;
{{ic|php.ini}} の &#039;&#039;sendmail_path&#039;&#039; オプションを以下のように編集してください:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
sendmail_path = &amp;quot;/usr/bin/msmtp -C /path/to/your/config -t&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
msmtp を php などで sendmail の代替として使う場合、ユーザーの設定ファイル(つまり ~/ 以下にあるもの)は&#039;&#039;&#039;使えない&#039;&#039;&#039;ことに注意して下さい。&lt;br /&gt;
その場合は /etc/msmtprc を作成し、ユーザー設定ファイルを削除してください(他の用途で使う場合は削除しないで下さい)。また、使うもの(php、django等)で読み取り可能にしておいて下さい。&lt;br /&gt;
&lt;br /&gt;
msmtp マニュアルより: &#039;&#039;ユーザー設定ファイルで定義されたアカウントはシステム設定ファイル&#039;により上書きされます。ユーザー設定ファイルには、ユーザーが読み書きできる以上の権限を与えてはいけません。&#039;&lt;br /&gt;
&lt;br /&gt;
そのため、conf ファイルを ~/ 以下 に置き、php ユーザーが読めるようにすることは不可能です。&lt;br /&gt;
&lt;br /&gt;
テストするにはこのファイルを php が有効なサーバが置くか、php-cli を使って下さい。&lt;br /&gt;
{{bc|&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
mail(&amp;quot;your@email.com&amp;quot;, &amp;quot;Test email from PHP&amp;quot;, &amp;quot;msmtp as sendmail for PHP&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
/etc/msmtprc のパーミションをユーザーが読み書きできる(600)ようにしない限り、{{ic|php-fpm}} はメール送信に失敗し、以下の警告をログに出すでしょう: {{ic|PHP Warning:  mail(mail.log): failed to open stream}} &lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
===TLS の問題===&lt;br /&gt;
以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 msmtp: TLS certificate verification failed: the certificate hasn&#039;t got a known issuer&lt;br /&gt;
&lt;br /&gt;
 msmtp: TLS certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown.&lt;br /&gt;
&lt;br /&gt;
おそらく設定ファイルの {{ic|tls_trust_file}} パラメータが正しくありません。&lt;br /&gt;
&lt;br /&gt;
[https://marlam.de/msmtp/msmtp.html#Transport-Layer-Security 素晴らしいマニュアル]に従って下さい。指定した SMTP サーバの証明書発行者を調べる方法が説明されています。そして、 {{ic|/usr/share/ca-certificates/}} ディレクトリを探索して、必要な証明書がひょっとしてそこにあるか調べることができます。ない場合は、自分で証明書を取得する必要があります。独自の証明書を使用している場合は、以下を {{ic|~/.msmtprc}}に追加することで msmtp にその証明書を信頼させることができます。&lt;br /&gt;
&lt;br /&gt;
 tls_fingerprint &amp;lt;SHA1 (recommended) or MD5 fingerprint of the certificate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ユーザーがサーバで使用されている証明書を [https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail PEM] ファイルで持っている場合は、 {{ic|openssl}} を使うことによって保存されている証明書のフィンガープリントを見つけることができます:&lt;br /&gt;
&lt;br /&gt;
 openssl x509 -in &#039;&#039;CERT.pem&#039;&#039; -inform PEM -fingerprint&lt;br /&gt;
&lt;br /&gt;
Gmail でメールを送信しようとしてこのエラーを受け取った場合、[https://www.mail-archive.com/msmtp-users@lists.sourceforge.net/msg00141.html この]スレッドを読むか、上記二番目の Gmail の例を使って下さい。&lt;br /&gt;
&lt;br /&gt;
本当に困っているが、100% 正しいサーバに接続していると確信している場合は、いつでも証明書チェックを一時的に無効化することができます:&lt;br /&gt;
&lt;br /&gt;
 $ msmtp --tls-certcheck off&lt;br /&gt;
&lt;br /&gt;
以下のメッセージが表示される場合:&lt;br /&gt;
  msmtp: TLS handshake failed: the operation timed out&lt;br /&gt;
{{Bug|44994}} のバグが原因です。{{ic|1=--with-ssl=openssl}} を使って msmtp を再コンパイルしてください (デフォルトでは GnuTLS が有効になっています)。&lt;br /&gt;
&lt;br /&gt;
===Server sent empty reply===&lt;br /&gt;
&amp;quot;server sent empty reply&amp;quot; エラーが表示される場合、メールサーバーがポート 587 での STARTTLS を許可しておらず、非標準のポート 465 での SSL/TLS を必要としています [https://www.fastmail.com/help/technical/ssltlsstarttls.html]。&lt;br /&gt;
&lt;br /&gt;
msmtp でポート 465 の SSL/TLS を使うには、以下の行を {{ic|~/.msmtprc}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 tls_starttls off&lt;br /&gt;
&lt;br /&gt;
==== Zoho SMTP サーバ ====&lt;br /&gt;
&lt;br /&gt;
Zoho SMTP サーバでも、メールヘッダと本文の間に空行な無い場合発生する場合があります(Debianのバグ [https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1650762.html #917260] を参照)。この解決法としては、間に余分なスペースを追加して下さい:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;test-header\n\ntest-body&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===GSSAPI の問題===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 GNU SASL: GSSAPI error in client while negotiating security context in gss_init_sec_context() in SASL library.  This is most likely due insufficient credentials or malicious interactions.&lt;br /&gt;
&lt;br /&gt;
.msmtprc ファイルの auth 設定を gssapi から plain に変更してみてください [https://bbs.archlinux.org/viewtopic.php?id=138727]:&lt;br /&gt;
&lt;br /&gt;
 auth plain&lt;br /&gt;
&lt;br /&gt;
=== Envelope not accepted ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 msmtp: envelope from address mail@server not accepted by the server&lt;br /&gt;
 msmtp: server message: 530 5.5.1 Authentication Required.&lt;br /&gt;
 msmtp: could not send mail (account default from /etc/msmtprc)&lt;br /&gt;
&lt;br /&gt;
以下で認証の有効化を試みるか、&lt;br /&gt;
&lt;br /&gt;
 auth on&lt;br /&gt;
&lt;br /&gt;
他の方法で認証を有効化して下さい。&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40360</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40360"/>
		<updated>2025-06-05T06:52:25Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: 誤字の訂正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:メール取得エージェント]]&lt;br /&gt;
[[Category:OpenPGP]]&lt;br /&gt;
[[en:OfflineIMAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|isync}}&lt;br /&gt;
{{Related|notmuch}}&lt;br /&gt;
{{Related|msmtp}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/OfflineIMAP/offlineimap3 OfflineIMAP] は IMAP サーバーからメールを同期する Python ユーティリティです。POP3 プロトコルや mbox は使えないため、通常 [[Mutt]] などの MUA と組み合わされて使われます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|offlineimap}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Offlineimap には2つのデフォルト設定ファイルが付属しており、どちらも {{ic|/usr/share/offlineimap/}} にあります。{{ic|offlineimap.conf}} には全ての設定が含まれておりコメントが付与されています。一方、{{ic|offlineimap.conf.minimal}} にはコメントが付いておらず多少の設定しか含まれていません (参照: [[#最小]])。&lt;br /&gt;
&lt;br /&gt;
デフォルト設定ファイルのどちらかを {{ic|~/.offlineimaprc}} または {{ic|$XDG_CONFIG_HOME/offlineimap/config}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{note|同じ行内に、オプションや値の後ろにコメントを書くのは無効な構文なので、コメントは別の独立した行に書いて下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 最小 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|offlineimap.conf.minimal}} のコメントが付いたバージョンは以下になります:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
# 同期するアカウントのリスト。コンマで区切る。&lt;br /&gt;
accounts = main&lt;br /&gt;
&lt;br /&gt;
[Account main]&lt;br /&gt;
# ローカルリポジトリの識別子。例: IMAP経由で同期されるmaildir。&lt;br /&gt;
localrepository = main-local&lt;br /&gt;
# リモートリポジトリの識別子。すなわち実際のIMAPで、通常はローカルではありません。&lt;br /&gt;
remoterepository = main-remote&lt;br /&gt;
&lt;br /&gt;
[Repository main-local]&lt;br /&gt;
# OfflineImapは、Maildir、GmailMaildir、およびIMAPをローカルリポジトリとしてサポートしています。&lt;br /&gt;
type = Maildir&lt;br /&gt;
# メールを配置する場所&lt;br /&gt;
localfolders = ~/mail&lt;br /&gt;
&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# リモートレポジトリはIMAPまたはGmailであり、後者は事前に設定されたIMAPです。&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = host.domain.tld&lt;br /&gt;
remoteuser = username&lt;br /&gt;
# OfflineImapのバージョンが6.5.4より高い場合、SSL接続に必要です。&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダの同期の選択 ===&lt;br /&gt;
&lt;br /&gt;
特定のフォルダだけを同期したい場合、{{ic|~/.offlineimaprc}} でアカウントの &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに [http://offlineimap.org/doc/nametrans.html#folderfilter folderfilter] を使います。例えば、以下の設定では {{ic|Inbox}} と {{ic|Sent}} フォルダだけが同期されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# InboxとSentフォルダーのみ同期します:&lt;br /&gt;
folderfilter = lambda foldername: foldername in [&amp;quot;Inbox&amp;quot;, &amp;quot;Sent&amp;quot;]&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のオプションについては、[http://offlineimap.org/doc/nametrans.html#folderfilter 公式ドキュメント] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== カスタムポート ===&lt;br /&gt;
&lt;br /&gt;
IMAPサーバーの中には、デフォルトの993ポートではなく、カスタムポートの接続を要求してくるものがあります。そのようにするには、{{ic|~/.offlineimaprc}}の &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに &#039;&#039;remoteport&#039;&#039; オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
remoteport=&#039;&#039;1234&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
offlineimap を実行する前に、ローカルリポジトリに割り当てる親ディレクトリを作成してください:&lt;br /&gt;
 $ mkdir ~/Maildir&lt;br /&gt;
&lt;br /&gt;
そして、プログラムを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ offlineimap&lt;br /&gt;
&lt;br /&gt;
メールアカウントが同期されます。何か問題が発生した場合、エラーメッセージをよく見て下さい。OfflineIMAP は基本的に問題について詳しい出力を表示します。最終的な製品からのトレースバックを取得するのに開発者が悩む必要がないようにするためです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== バックグラウンドで offlineimap を実行 ===&lt;br /&gt;
&lt;br /&gt;
{{Style|コメント付きの設定ファイルをドキュメントとして使うのではなく、テキストに記述する方が良いのでは？}}&lt;br /&gt;
&lt;br /&gt;
大抵のメール転送エージェントはデフォルトで、プログラムを定期的に同期させることで[[デーモン]]としてツールを使うのが前提になっています。offlineimap では、バックグラウンドで作業を制御する設定はあまりありません。&lt;br /&gt;
&lt;br /&gt;
紛らわしいことに、バックグラウンドの設定は設定ファイルのあらゆるところに散らばっています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
# generalセクション&lt;br /&gt;
[general]&lt;br /&gt;
# 同時に同期するアカウントの数を制御します&lt;br /&gt;
maxsyncaccounts = 1&lt;br /&gt;
&lt;br /&gt;
# アカウント識別子&lt;br /&gt;
[Account main]&lt;br /&gt;
# 同期の間隔(分)&lt;br /&gt;
autorefresh = 0.5&lt;br /&gt;
# IMAPフラグにのみ変更があった場合、quick-syncsは更新されません。&lt;br /&gt;
# autorefresh=0.5 と quick=10 を組み合わせると、&lt;br /&gt;
# タイプに関係なく、各完全更新の間に0.5分の間隔で&lt;br /&gt;
# 10回のクイック更新が行われます。&lt;br /&gt;
quick = 10&lt;br /&gt;
&lt;br /&gt;
# リモートリポジトリ識別子&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# 同期が完了すると接続を閉じる代わりに、offlineimapはサーバーに空のデータを送信して接続を維持します。&lt;br /&gt;
# この値を60に設定すると、同期（クイックと自動更新の両方）の間に1分間接続を維持しようとします。&lt;br /&gt;
# この設定は、autorefresh と holdconnectionopen の両方が設定されていない場合は無効です。&lt;br /&gt;
keepalive = 60&lt;br /&gt;
# OfflineIMAPは通常、autorefreshグローバルオプションが指定されている場合、更新の合間にIMAPサーバ接続を閉じます。&lt;br /&gt;
# 接続を維持したい場合は、この設定をtrueに設定してください。&lt;br /&gt;
# autorefreshが設定されていない場合、この設定は効果がありません。&lt;br /&gt;
holdconnectionopen = yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ログイン時にデーモンを自動的に起動するには、[[systemd/ユーザー]]サービスである{{ic|offlineimap.service}}を{{ic|--user}}フラグ付きで[[起動/有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
複数のアカウントを設定している場合は、maxsyncaccountsパラメータ[https://www.offlineimap.org/configuration/2016/01/29/why-i-m-not-using-maxconnctions.html]を増やすのではなく、{{ic|offlineimap@.service}}を使用することをお勧めします。{{ic|offlineimap@youraccountname.service}}を[[起動/有効化]]するだけです。&lt;br /&gt;
&lt;br /&gt;
==== systemd timer ====&lt;br /&gt;
&lt;br /&gt;
あるいは、systemd-user [[systemd/タイマー|タイマー]]を使って、{{ic|offlineimap-oneshot.timer}}を{{ic|--user}}フラグで起動/有効化することで、OfflineIMAPを完全に管理することもできます。&lt;br /&gt;
&lt;br /&gt;
このタイマーはデフォルトで15分ごとにOfflineIMAPを実行します。これは、[[ドロップインファイル]]を作成することで変更することができます。例えば、以下では5分ごとにチェックするようにタイマーを修正しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.timer.d/timer.conf|2=&lt;br /&gt;
[Timer]&lt;br /&gt;
OnUnitInactiveSec=5m&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Accuracy|これは、OfflineIMAPのローカルデータベースに矛盾をもたらす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
より堅牢な解決法としては、フリーズした場合にOfflineIMAPをkillするウォッチドッグを設定することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.service.d/service.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
WatchdogSec=300&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== mutt 用に自動的にメールボックスを作成 ===&lt;br /&gt;
&lt;br /&gt;
[[Mutt]]は 単にIMAP や Maildir のディレクトリを指し示したり、どのサブディレクトリがメールボックスであるかを推測することはできませんが、 offlineimap は同期するメールボックスを含む muttrc フラグメントを生成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[mbnames]&lt;br /&gt;
enabled = yes&lt;br /&gt;
filename = ~/.mutt/mailboxes&lt;br /&gt;
header = &amp;quot;mailboxes &amp;quot;&lt;br /&gt;
peritem = &amp;quot;+%(accountname)s/%(foldername)s&amp;quot;&lt;br /&gt;
sep = &amp;quot; &amp;quot;&lt;br /&gt;
footer = &amp;quot;\n&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして以下の行を{{ic|~/.mutt/muttrc}}に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mutt/muttrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# IMAP: offlineimap&lt;br /&gt;
set folder = &amp;quot;~/Mail&amp;quot;&lt;br /&gt;
source ~/.mutt/mailboxes&lt;br /&gt;
set spoolfile = &amp;quot;+account/INBOX&amp;quot;&lt;br /&gt;
set record = &amp;quot;+account/Sent\ Items&amp;quot;&lt;br /&gt;
set postponed = &amp;quot;+account/Drafts&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|account}}は{{ic|~/.offlineimaprc}}でIMAPアカウントにつけた名前です。&lt;br /&gt;
&lt;br /&gt;
=== Gmail の設定 ===&lt;br /&gt;
&lt;br /&gt;
このリモートリポジトリは Gmail をサポートするために特別に設定されており、フォルダ名を大文字から小文字に置き換えたり、その他の細かい追加を行います。この設定では「すべてのメール」フォルダーを同期しないことに注意して下さい。「すべてのメール」は通常不要であり、この同期をスキップすることにより帯域幅コストを抑えるためです:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository gmail-remote]&lt;br /&gt;
type = Gmail&lt;br /&gt;
remoteuser = user@gmail.com&lt;br /&gt;
remotepass = password&lt;br /&gt;
nametrans = lambda foldername: re.sub (&#039;^\[gmail\]&#039;, &#039;bak&#039;,&lt;br /&gt;
                               re.sub (&#039;sent_mail&#039;, &#039;sent&#039;,&lt;br /&gt;
                               re.sub (&#039;starred&#039;, &#039;flagged&#039;,&lt;br /&gt;
                               re.sub (&#039; &#039;, &#039;_&#039;, foldername.lower()))))&lt;br /&gt;
folderfilter = lambda foldername: foldername not in [&#039;[Gmail]/All Mail&#039;]&lt;br /&gt;
# OfflineImap 6.5.4 で必要&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
# https://github.com/OfflineIMAP/offlineimap/issues/573（バージョン7.0.12、7.2.1）の対処に必要&lt;br /&gt;
ssl_version = tls1_2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Gmailが別の言語に設定されている場合、フォルダ名も翻訳されているように見える場合があります。 例: 「sent_mail」の代わりに「送信済みメール」&lt;br /&gt;
* バージョン6.3.5以降では、offlineimapはローカルのフォルダに合わせてリモートのフォルダも作成します。そのため、この名前の翻訳ルールの効果を逆転させる名前の翻訳ルールがローカルリポジトリにも必要になるかもしれません。名前の逆翻訳ルールを作りたくない場合は、リモートの設定に次のように記述することで、リモートフォルダの作成を無効にできます: {{ic|&amp;lt;nowiki&amp;gt;createfolders = False&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* 2012年10月1日現在、gmail の SSL 証明書のフィンガープリントはいつも同じだとは限りません。このため {{ic|cert_fingerprint}} を使うよりも {{ic|sslcacertfile}} を使って SSL の確認をするほうが良いでしょう ([[#SSL フィンガープリントが一致しない]]を参照)。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== oama経由のOAuth2アクセストークン ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pdobsan/oama oama] ({{AUR|oama-bin}})は、IMAP/SMTPクライアントにOAuth2認証の更新機能と承認を提供するユーティリティです。&lt;br /&gt;
&lt;br /&gt;
OfflineIMAPは、設定からPythonコードを呼び出すことができます。したがって、まず{{ic|[general]}}セクションで、以下の行を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Pythonファイルに以下のコードを追加して、&#039;&#039;oama&#039;&#039;を経由してOAuth2アクセストークンを取得します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
import subprocess&lt;br /&gt;
&lt;br /&gt;
def get_token(email_address):&lt;br /&gt;
    return subprocess.run([&amp;quot;oama&amp;quot;, &amp;quot;access&amp;quot;, email_address], capture_output=True, text=True).stdout&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして設定ファイルに戻り、Gmailアカウントのrepositoryセクションに以下を追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
auth_mechanisms = XOAUTH2&lt;br /&gt;
oauth2_client_id = &#039;&#039;YOUR_OAUTH2_CLIENT_ID&#039;&#039;&lt;br /&gt;
oauth2_client_secret = &#039;&#039;YOUR_OAUTH2_CLIENT_SECRET&#039;&#039;&lt;br /&gt;
oauth2_request_url = &amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/token&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oauth2_access_token_eval = get_token(&amp;quot;&#039;&#039;YOUR_EMAIL_ADDRESS_FOR_THIS_ACCOUNT&#039;&#039;&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パスワードの管理 ===&lt;br /&gt;
&lt;br /&gt;
==== .netrc ====&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|~/.netrc}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 machine hostname.tld&lt;br /&gt;
     login [your username]&lt;br /&gt;
     password [your password]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ファイルに600や700のような適切な権限を与えることを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
 $ chmod 600 ~/.netrc&lt;br /&gt;
&lt;br /&gt;
{{Note|OfflineIMAPは、{{ic|.netrc}}ファイルに複数のアカウントが保存されている場合、パスワードを取得する方法を[https://github.com/OfflineIMAP/offlineimap/issues/295 知りません]。}}&lt;br /&gt;
&lt;br /&gt;
==== GPG を使う ====&lt;br /&gt;
&lt;br /&gt;
GNU Privacy Guard を使うことで暗号化ファイルにパスワードを保存することができます。このセクションの設定を行う前にまず [[GnuPG]] をセットアップしてください。[[GnuPG#gpg-agent|パスワードを入力しなくても]] GPG の秘密鍵をいつでも使えるようにしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
まずプレーンテキストファイルにメールアカウントのパスワードを入力してください。暗号化されていないパスワードがディスクに書き込まれないように、ファイルの作成は [[tmpfs]] 上の {{ic|700}} パーミッションの安全なディレクトリで行って下さい。それから、GnuPGで自身を受信者にしてファイルを[[GnuPG#暗号化と復号化|暗号化]]します:&lt;br /&gt;
&lt;br /&gt;
必要なくなったプレーンテキストファイルは削除してください。暗号化したファイルは最終的に必要な場所 (例: {{ic|~/.offlineimappass.gpg}}) に移動してください。&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass():&lt;br /&gt;
    return check_output(&amp;quot;gpg -dq ~/.offlineimappass.gpg&amp;quot;, shell=True).rstrip(b&amp;quot;\n&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のファイルを {{ic|~/.offlineimaprc}} からロードして、定義した関数を指定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository &#039;&#039;example&#039;&#039;]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass()&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== pass を使う ====&lt;br /&gt;
&lt;br /&gt;
[[pass]] は GPG ベースのシンプルなコマンドラインのパスワードマネージャです。&lt;br /&gt;
&lt;br /&gt;
最初にメールアカウントのパスワードを作成:&lt;br /&gt;
&lt;br /&gt;
 $ pass insert Mail/&#039;&#039;account&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;pass Mail/&amp;quot; + account, shell=True).splitlines()[0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記はマルチアカウントセットアップの例です。前述の &#039;&#039;pass&#039;&#039; の引数はカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}} からファイルをロードして、定義した関数を指定:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;Gmail&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Gnome Keyring ====&lt;br /&gt;
&lt;br /&gt;
リモートリポジトリの設定では、remoteusereval/remotepassevalフィールドを、ユーザー名/パスワードに評価するカスタムPythonコードに設定できます。このコードは、&#039;pythonfile&#039; 設定フィールドで示されたpythonスクリプト上で定義された関数への呼び出しにすることができます。以下のサブセクションに従って{{ic|~/.offlineimap.py}}を作成し、設定で使用します。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
&lt;br /&gt;
[Repository examplerepo]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = mail.example.com&lt;br /&gt;
remoteusereval = get_username(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
remotepasseval = get_password(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===== gkgetsecret.py =====&lt;br /&gt;
&lt;br /&gt;
{{Style|これは単一のサブセクションであるため、上記の導入と統合する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|gnome-keyring}}、{{AUR|python2}}、{{AUR|python2-gobject}}、{{Pkg|libsecret}}がインストールされていることを確認して下さい。そして、{{ic|~/.offlineimap.py}}を次の内容で作成します: [https://pastebin.com/wzVfSac8 gkgetsecret.py]。さらに、上記のように{{ic|~/.offlineimaprc}}に{{ic|1=pythonfile = ~/.offlineimap.py}}を設定します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|seahorse}}を使ってパスワードを作成した場合、その説明からパスワードを取得できます。例えば、&#039;&#039;Password for me@myworkemail.com&#039;&#039; という説明つきのgnome-keyringに保存された &#039;&#039;work&#039;&#039; レポジトリのパスワードは、{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remotepasseval = get_pw_from_desc(&amp;quot;Password for me@myworkemail.com&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
同様にユーザー名も保存したい設定の場合、 &#039;&#039;secret-tool&#039;&#039; でパスワードを生成する方が、ユーザー名やリポジトリ名などの属性を設定するのに使えるのでよいでしょう。以下のコマンドでパスワードを作成することを検討して下さい。&lt;br /&gt;
 $ secret-tool store --label &amp;quot;Password for Work Email&amp;quot; username me@myworkemail.com repo Work&lt;br /&gt;
&lt;br /&gt;
このアカウントのユーザー名とパスワードは{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remoteusereval = get_val_from_attrs(&amp;quot;username&amp;quot;, &amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
 remotepasseval = get_pw_from_attrs(&amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== python-keyring ====&lt;br /&gt;
&lt;br /&gt;
どのキーリングでも使える一般的な解決策があります。{{Pkg|python-keyring}}をインストールし、~/.offlineimaprcを以下のように変更して下さい。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = /home/user/offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
[Repository RemoteEmail]&lt;br /&gt;
remoteuser = username@host.net&lt;br /&gt;
remotepasseval = keyring.get_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして、 ~/offlineimap.py のどこかに {{ic|import keyring}} を追加して下さい.&lt;br /&gt;
&lt;br /&gt;
あとはパスワードを設定するだけです。次のようなpythonスクリプトか、&lt;br /&gt;
&lt;br /&gt;
{{bc|$ python&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import keyring&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; keyring.set_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;, &amp;quot;MYPASSWORD&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
あるいはpython-keyringパッケージで提供されているkeyringコマンドを使えます。&lt;br /&gt;
&lt;br /&gt;
 $ keyring --help&lt;br /&gt;
 $ keyring set host username&lt;br /&gt;
 Password for &#039;username&#039; in &#039;host&#039;:&lt;br /&gt;
 $ keyring get host username&lt;br /&gt;
 password&lt;br /&gt;
&lt;br /&gt;
これで、平文として保存したり毎回入力したりする必要なく、(kwallet/gnome-)キーリングからパスワードを取り出せるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Emacs EasyPG ====&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/OfflineIMAP#toc2 を見てください。&lt;br /&gt;
&lt;br /&gt;
==== KeePassXCとFreedesktop.orgのsecret-service  ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libsecret}}をインストールし、KeepassXCの設定でFreedesktop.org secret-service統合を有効化、&#039;&#039;Database Settings &amp;gt; Secret Service Integration&#039;&#039;でエントリを公開し、&#039;&#039;Edit Entry &amp;gt; Advanced&#039;&#039;設定で{{ic|Title}}追加属性に{{ic|account@name.org}}を追加します。これで、{{ic|secret-tool lookup Title account@name.org}}コマンドでパスワードがコンソールに表示されるはずです。次に、pythonスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import os&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;secret-tool lookup Title &amp;quot; + account, shell=True).splitlines()[0].decode(&amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python-secretstorage}}に依存する同等のスクリプトは以下の通りです:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import secretstorage&lt;br /&gt;
from contextlib import closing&lt;br /&gt;
def get_pass(title):&lt;br /&gt;
    with closing(secretstorage.dbus_init()) as conn:&lt;br /&gt;
        assert(secretstorage.check_service_availability(conn))&lt;br /&gt;
        collection = secretstorage.get_default_collection(conn)&lt;br /&gt;
        if collection.is_locked():&lt;br /&gt;
            collection.unlock()&lt;br /&gt;
        matches = collection.search_items({&amp;quot;Title&amp;quot;: title})&lt;br /&gt;
        entry = next(matches)&lt;br /&gt;
        if entry.is_locked():&lt;br /&gt;
            entry.unlock()&lt;br /&gt;
        return(entry.get_secret())&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}}からこのファイルをロードし、定義された関数を指定します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.script.py&lt;br /&gt;
...&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;account@name.org&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== UI の上書きと自動更新の設定 ===&lt;br /&gt;
&lt;br /&gt;
トラブルシューティングのために、より詳細なUI、バックグラウンド同期なし、場合によってはデバッグレベルでofflineimapを起動すると便利な場合があります:&lt;br /&gt;
 $ offlineimap [ -o ] [ -d &amp;lt;debug_type&amp;gt; ] [ -u &amp;lt;ui&amp;gt; ]&lt;br /&gt;
;-o&lt;br /&gt;
:自動更新、キープアライブ等を無効にします。&lt;br /&gt;
&lt;br /&gt;
;-d &amp;lt;debug_type&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;debug_type&amp;gt;&#039;&#039;は{{Ic|imap}}、{{Ic|maildir}}、{{Ic|thread}}のいずれかです。imapとmaildirのデバッグが圧倒的に最も便利です。&lt;br /&gt;
&lt;br /&gt;
;-u &amp;lt;ui&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;ui&amp;gt;&#039;&#039;は{{Ic|CURSES.BLINKENLIGHTS}}、{{Ic|TTY.TTYUI}}、{{Ic|NONINTERACTIVE.BASIC}}、{{Ic|NONINTERACTIVE.QUIET}}、{{Ic|MACHINE.MACHINEUI}}のいずれかです。デバッグ目的ではTTY.TTYUIで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しいバージョンでは以下を&amp;lt;ui&amp;gt;に使います: {{Ic|blinkenlights}}、{{Ic|ttyui}}、{{Ic|basic}}、{{Ic|quiet}}、{{Ic|machineui}}}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダが作成できない ===&lt;br /&gt;
&lt;br /&gt;
[https://alioth-lists.debian.net/pipermail/offlineimap-project/2011-September/010200.html こちら]にあるように、バージョン6.5.3でofflineimapはリモートリポジトリにフォルダを作成できるようになりました。&lt;br /&gt;
&lt;br /&gt;
これにより、リモートリポジトリで{{Ic|nametrans}}を使用すると以下のようなエラーが発生する可能性があります:&lt;br /&gt;
 ERROR: Creating folder bar on repository foo-remote&lt;br /&gt;
   Folder &#039;bar&#039;[foo-remote] could not be created. Server responded: (&#039;NO&#039;, [&#039;[ALREADYEXISTS] Duplicate folder name bar (Failure)&#039;])&lt;br /&gt;
&lt;br /&gt;
解決策は、ローカルリポジトリに逆{{Ic|nametrans}}ラムダを提供することです。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository foo-local]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;bar&#039;, &#039;BAR&#039;)&lt;br /&gt;
&lt;br /&gt;
[Repository foo-remote]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;BAR&#039;, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 正しい逆マッピングを行うには、{{Ic|offlineimap --info}}の出力が役に立つでしょう。&lt;br /&gt;
* マッピングを更新したら、影響を受けるアカウントの{{Ic|$HOME/.offlineimap/}}下のフォルダを全て削除する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== SSL フィンガープリントが一致しない ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Server SSL fingerprint &#039;keykeykey&#039; for hostname &#039;example.com&#039; does not match configured fingerprint. Please verify and set &#039;cert_fingerprint&#039; accordingly if not set yet.&lt;br /&gt;
&lt;br /&gt;
これを解決するには、{{ic|~/.offlineimaprc}} ({{ic|1=ssl = yes}}と同じセクション)に以下のいずれかを追加します。&lt;br /&gt;
* リモートサーバーの証明書のフィンガープリントを{{ic|cert_fingerprint}}に追加します。これは、リモートサーバーの証明書が与えられたフィンガープリントに一致するかチェックします。&lt;br /&gt;
 cert_fingerprint = keykeykey&lt;br /&gt;
* もしくは、システムのCA証明書ファイルを{{ic|sslcacertfile}}に追加します。{{Pkg|ca-certificates}}のインストールが必要です。これは、リモートのSSL証明書チェーンを、そのファイルの認証局に対して検証します。&lt;br /&gt;
{{bc|1=sslcacertfile = /etc/ssl/certs/ca-certificates.crt}}&lt;br /&gt;
&lt;br /&gt;
=== Copying message, connection closed ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Copying message -2 [acc: email] connection closed&lt;br /&gt;
 Folder sent [acc: email]: ERROR: while syncing sent [account email] connection closed&lt;br /&gt;
&lt;br /&gt;
上記の問題はローカルとサーバーで同じメッセージが作成されていることが原因です。メールのプロバイダが自動的にローカルクライアントと同じフォルダに送信したメールを保存した場合に発生します。この問題が起こったときはローカルクライアントで送信済みメッセージの保存を無効化してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://lists.alioth.debian.org/mailman/listinfo/offlineimap-project OfflineIMAP 公式メーリングリスト]&lt;br /&gt;
* [http://pbrisbin.com/posts/mutt_gmail_offlineimap/ Mutt + Gmail + Offlineimap] - brisbinによるシンプルなgmail/muttの設定の概要。cronでofflineimapの同期を保持させています。&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40354</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40354"/>
		<updated>2025-06-04T01:43:27Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: python2で書かれていたコードを3に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:メール取得エージェント]]&lt;br /&gt;
[[Category:OpenPGP]]&lt;br /&gt;
[[en:OfflineIMAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|isync}}&lt;br /&gt;
{{Related|notmuch}}&lt;br /&gt;
{{Related|msmtp}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/OfflineIMAP/offlineimap3 OfflineIMAP] は IMAP サーバーからメールを同期する Python ユーティリティです。POP3 プロトコルや mbox は使えないため、通常 [[Mutt]] などの MUA と組み合わされて使われます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|offlineimap}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Offlineimap には2つのデフォルト設定ファイルが付属しており、どちらも {{ic|/usr/share/offlineimap/}} にあります。{{ic|offlineimap.conf}} には全ての設定が含まれておりコメントが付与されています。一方、{{ic|offlineimap.conf.minimal}} にはコメントが付いておらず多少の設定しか含まれていません (参照: [[#最小]])。&lt;br /&gt;
&lt;br /&gt;
デフォルト設定ファイルのどちらかを {{ic|~/.offlineimaprc}} または {{ic|$XDG_CONFIG_HOME/offlineimap/config}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{note|同じ行内に、オプションや値の後ろにコメントを書くのは無効な構文なので、コメントは別の独立した行に書いて下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 最小 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|offlineimap.conf.minimal}} のコメントが付いたバージョンは以下になります:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
# 同期するアカウントのリスト。コンマで区切る。&lt;br /&gt;
accounts = main&lt;br /&gt;
&lt;br /&gt;
[Account main]&lt;br /&gt;
# ローカルリポジトリの識別子。例: IMAP経由で同期されるmaildir。&lt;br /&gt;
localrepository = main-local&lt;br /&gt;
# リモートリポジトリの識別子。すなわち実際のIMAPで、通常はローカルではありません。&lt;br /&gt;
remoterepository = main-remote&lt;br /&gt;
&lt;br /&gt;
[Repository main-local]&lt;br /&gt;
# OfflineImapは、Maildir、GmailMaildir、およびIMAPをローカルリポジトリとしてサポートしています。&lt;br /&gt;
type = Maildir&lt;br /&gt;
# メールを配置する場所&lt;br /&gt;
localfolders = ~/mail&lt;br /&gt;
&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# リモートレポジトリはIMAPまたはGmailであり、後者は事前に設定されたIMAPです。&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = host.domain.tld&lt;br /&gt;
remoteuser = username&lt;br /&gt;
# OfflineImapのバージョンが6.5.4より高い場合、SSL接続に必要です。&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダの同期の選択 ===&lt;br /&gt;
&lt;br /&gt;
特定のフォルダだけを同期したい場合、{{ic|~/.offlineimaprc}} でアカウントの &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに [http://offlineimap.org/doc/nametrans.html#folderfilter folderfilter] を使います。例えば、以下の設定では {{ic|Inbox}} と {{ic|Sent}} フォルダだけが同期されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# InboxとSentフォルダーのみ同期します:&lt;br /&gt;
folderfilter = lambda foldername: foldername in [&amp;quot;Inbox&amp;quot;, &amp;quot;Sent&amp;quot;]&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のオプションについては、[http://offlineimap.org/doc/nametrans.html#folderfilter 公式ドキュメント] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== カスタムポート ===&lt;br /&gt;
&lt;br /&gt;
IMAPサーバーの中には、デフォルトの993ポートではなく、カスタムポートの接続を要求してくるものがあります。そのようにするには、{{ic|~/.offlineimaprc}}の &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに &#039;&#039;remoteport&#039;&#039; オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
remoteport=&#039;&#039;1234&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
offlineimap を実行する前に、ローカルリポジトリに割り当てる親ディレクトリを作成してください:&lt;br /&gt;
 $ mkdir ~/Maildir&lt;br /&gt;
&lt;br /&gt;
そして、プログラムを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ offlineimap&lt;br /&gt;
&lt;br /&gt;
メールアカウントが同期されます。何か問題が発生した場合、エラーメッセージをよく見て下さい。OfflineIMAP は基本的に問題について詳しい出力を表示します。最終的な製品からのトレースバックを取得するのに開発者が悩む必要がないようにするためです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== バックグラウンドで offlineimap を実行 ===&lt;br /&gt;
&lt;br /&gt;
{{Style|コメント付きの設定ファイルをドキュメントとして使うのではなく、テキストに記述する方が良いのでは？}}&lt;br /&gt;
&lt;br /&gt;
大抵のメール転送エージェントはデフォルトで、プログラムを定期的に同期させることで[[デーモン]]としてツールを使うのが前提になっています。offlineimap では、バックグラウンドで作業を制御する設定はあまりありません。&lt;br /&gt;
&lt;br /&gt;
紛らわしいことに、バックグラウンドの設定は設定ファイルのあらゆるところに散らばっています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
# generalセクション&lt;br /&gt;
[general]&lt;br /&gt;
# 同時に同期するアカウントの数を制御します&lt;br /&gt;
maxsyncaccounts = 1&lt;br /&gt;
&lt;br /&gt;
# アカウント識別子&lt;br /&gt;
[Account main]&lt;br /&gt;
# 同期の間隔(分)&lt;br /&gt;
autorefresh = 0.5&lt;br /&gt;
# IMAPフラグにのみ変更があった場合、quick-syncsは更新されません。&lt;br /&gt;
# autorefresh=0.5 と quick=10 を組み合わせると、&lt;br /&gt;
# タイプに関係なく、各完全更新の間に0.5分の間隔で&lt;br /&gt;
# 10回のクイック更新が行われます。&lt;br /&gt;
quick = 10&lt;br /&gt;
&lt;br /&gt;
# リモートリポジトリ識別子&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# 同期が完了すると接続を閉じる代わりに、offlineimapはサーバーに空のデータを送信して接続を維持します。&lt;br /&gt;
# この値を60に設定すると、同期（クイックと自動更新の両方）の間に1分間接続を維持しようとします。&lt;br /&gt;
# この設定は、autorefresh と holdconnectionopen の両方が設定されていない場合は無効です。&lt;br /&gt;
keepalive = 60&lt;br /&gt;
# OfflineIMAPは通常、autorefreshグローバルオプションが指定されている場合、更新の合間にIMAPサーバ接続を閉じます。&lt;br /&gt;
# 接続を維持したい場合は、この設定をtrueに設定してください。&lt;br /&gt;
# autorefreshが設定されていない場合、この設定は効果がありません。&lt;br /&gt;
holdconnectionopen = yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ログイン時にデーモンを自動的に起動するには、[[systemd/ユーザー]]サービスである{{ic|offlineimap.service}}を{{ic|--user}}フラグ付きで[[起動/有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
複数のアカウントを設定している場合は、maxsyncaccountsパラメータ[https://www.offlineimap.org/configuration/2016/01/29/why-i-m-not-using-maxconnctions.html]を増やすのではなく、{{ic|offlineimap@.service}}を使用することをお勧めします。{{ic|offlineimap@youraccountname.service}}を[[起動/有効化]]するだけです。&lt;br /&gt;
&lt;br /&gt;
==== systemd timer ====&lt;br /&gt;
&lt;br /&gt;
あるいは、systemd-user [[systemd/タイマー|タイマー]]を使って、{{ic|offlineimap-oneshot.timer}}を{{ic|--user}}フラグで起動/有効化することで、OfflineIMAPを完全に管理することもできます。&lt;br /&gt;
&lt;br /&gt;
このタイマーはデフォルトで15分ごとにOfflineIMAPを実行します。これは、[[ドロップインファイル]]を作成することで変更することができます。例えば、以下では5分ごとにチェックするようにタイマーを修正しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.timer.d/timer.conf|2=&lt;br /&gt;
[Timer]&lt;br /&gt;
OnUnitInactiveSec=5m&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Accuracy|これは、OfflineIMAPのローカルデータベースに矛盾をもたらす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
より堅牢な解決法としては、フリーズした場合にOfflineIMAPをkillするウォッチドッグを設定することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.service.d/service.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
WatchdogSec=300&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== mutt 用に自動的にメールボックスを作成 ===&lt;br /&gt;
&lt;br /&gt;
[Mutt]]は 単にIMAP や Maildir のディレクトリを指し示したり、どのサブディレクトリがメールボックスであるかを推測することはできませんが、 offlineimap は同期するメールボックスを含む muttrc フラグメントを生成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[mbnames]&lt;br /&gt;
enabled = yes&lt;br /&gt;
filename = ~/.mutt/mailboxes&lt;br /&gt;
header = &amp;quot;mailboxes &amp;quot;&lt;br /&gt;
peritem = &amp;quot;+%(accountname)s/%(foldername)s&amp;quot;&lt;br /&gt;
sep = &amp;quot; &amp;quot;&lt;br /&gt;
footer = &amp;quot;\n&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして以下の行を{{ic|~/.mutt/muttrc}}に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mutt/muttrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# IMAP: offlineimap&lt;br /&gt;
set folder = &amp;quot;~/Mail&amp;quot;&lt;br /&gt;
source ~/.mutt/mailboxes&lt;br /&gt;
set spoolfile = &amp;quot;+account/INBOX&amp;quot;&lt;br /&gt;
set record = &amp;quot;+account/Sent\ Items&amp;quot;&lt;br /&gt;
set postponed = &amp;quot;+account/Drafts&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|account}}は{{ic|~/.offlineimaprc}}でIMAPアカウントにつけた名前です。&lt;br /&gt;
&lt;br /&gt;
=== Gmail の設定 ===&lt;br /&gt;
&lt;br /&gt;
このリモートリポジトリは Gmail をサポートするために特別に設定されており、フォルダ名を大文字から小文字に置き換えたり、その他の細かい追加を行います。この設定では「すべてのメール」フォルダーを同期しないことに注意して下さい。「すべてのメール」は通常不要であり、この同期をスキップすることにより帯域幅コストを抑えるためです:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository gmail-remote]&lt;br /&gt;
type = Gmail&lt;br /&gt;
remoteuser = user@gmail.com&lt;br /&gt;
remotepass = password&lt;br /&gt;
nametrans = lambda foldername: re.sub (&#039;^\[gmail\]&#039;, &#039;bak&#039;,&lt;br /&gt;
                               re.sub (&#039;sent_mail&#039;, &#039;sent&#039;,&lt;br /&gt;
                               re.sub (&#039;starred&#039;, &#039;flagged&#039;,&lt;br /&gt;
                               re.sub (&#039; &#039;, &#039;_&#039;, foldername.lower()))))&lt;br /&gt;
folderfilter = lambda foldername: foldername not in [&#039;[Gmail]/All Mail&#039;]&lt;br /&gt;
# OfflineImap 6.5.4 で必要&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
# https://github.com/OfflineIMAP/offlineimap/issues/573（バージョン7.0.12、7.2.1）の対処に必要&lt;br /&gt;
ssl_version = tls1_2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Gmailが別の言語に設定されている場合、フォルダ名も翻訳されているように見える場合があります。 例: 「sent_mail」の代わりに「送信済みメール」&lt;br /&gt;
* バージョン6.3.5以降では、offlineimapはローカルのフォルダに合わせてリモートのフォルダも作成します。そのため、この名前の翻訳ルールの効果を逆転させる名前の翻訳ルールがローカルリポジトリにも必要になるかもしれません。名前の逆翻訳ルールを作りたくない場合は、リモートの設定に次のように記述することで、リモートフォルダの作成を無効にできます: {{ic|&amp;lt;nowiki&amp;gt;createfolders = False&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* 2012年10月1日現在、gmail の SSL 証明書のフィンガープリントはいつも同じだとは限りません。このため {{ic|cert_fingerprint}} を使うよりも {{ic|sslcacertfile}} を使って SSL の確認をするほうが良いでしょう ([[#SSL フィンガープリントが一致しない]]を参照)。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== oama経由のOAuth2アクセストークン ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pdobsan/oama oama] ({{AUR|oama-bin}})は、IMAP/SMTPクライアントにOAuth2認証の更新機能と承認を提供するユーティリティです。&lt;br /&gt;
&lt;br /&gt;
OfflineIMAPは、設定からPythonコードを呼び出すことができます。したがって、まず{{ic|[general]}}セクションで、以下の行を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Pythonファイルに以下のコードを追加して、&#039;&#039;oama&#039;&#039;を経由してOAuth2アクセストークンを取得します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
import subprocess&lt;br /&gt;
&lt;br /&gt;
def get_token(email_address):&lt;br /&gt;
    return subprocess.run([&amp;quot;oama&amp;quot;, &amp;quot;access&amp;quot;, email_address], capture_output=True, text=True).stdout&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして設定ファイルに戻り、Gmailアカウントのrepositoryセクションに以下を追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
auth_mechanisms = XOAUTH2&lt;br /&gt;
oauth2_client_id = &#039;&#039;YOUR_OAUTH2_CLIENT_ID&#039;&#039;&lt;br /&gt;
oauth2_client_secret = &#039;&#039;YOUR_OAUTH2_CLIENT_SECRET&#039;&#039;&lt;br /&gt;
oauth2_request_url = &amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/token&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oauth2_access_token_eval = get_token(&amp;quot;&#039;&#039;YOUR_EMAIL_ADDRESS_FOR_THIS_ACCOUNT&#039;&#039;&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パスワードの管理 ===&lt;br /&gt;
&lt;br /&gt;
==== .netrc ====&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|~/.netrc}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 machine hostname.tld&lt;br /&gt;
     login [your username]&lt;br /&gt;
     password [your password]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ファイルに600や700のような適切な権限を与えることを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
 $ chmod 600 ~/.netrc&lt;br /&gt;
&lt;br /&gt;
{{Note|OfflineIMAPは、{{ic|.netrc}}ファイルに複数のアカウントが保存されている場合、パスワードを取得する方法を[https://github.com/OfflineIMAP/offlineimap/issues/295 知りません]。}}&lt;br /&gt;
&lt;br /&gt;
==== GPG を使う ====&lt;br /&gt;
&lt;br /&gt;
GNU Privacy Guard を使うことで暗号化ファイルにパスワードを保存することができます。このセクションの設定を行う前にまず [[GnuPG]] をセットアップしてください。[[GnuPG#gpg-agent|パスワードを入力しなくても]] GPG の秘密鍵をいつでも使えるようにしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
まずプレーンテキストファイルにメールアカウントのパスワードを入力してください。暗号化されていないパスワードがディスクに書き込まれないように、ファイルの作成は [[tmpfs]] 上の {{ic|700}} パーミッションの安全なディレクトリで行って下さい。それから、GnuPGで自身を受信者にしてファイルを[[GnuPG#暗号化と復号化|暗号化]]します:&lt;br /&gt;
&lt;br /&gt;
必要なくなったプレーンテキストファイルは削除してください。暗号化したファイルは最終的に必要な場所 (例: {{ic|~/.offlineimappass.gpg}}) に移動してください。&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass():&lt;br /&gt;
    return check_output(&amp;quot;gpg -dq ~/.offlineimappass.gpg&amp;quot;, shell=True).rstrip(b&amp;quot;\n&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のファイルを {{ic|~/.offlineimaprc}} からロードして、定義した関数を指定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository &#039;&#039;example&#039;&#039;]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass()&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== pass を使う ====&lt;br /&gt;
&lt;br /&gt;
[[pass]] は GPG ベースのシンプルなコマンドラインのパスワードマネージャです。&lt;br /&gt;
&lt;br /&gt;
最初にメールアカウントのパスワードを作成:&lt;br /&gt;
&lt;br /&gt;
 $ pass insert Mail/&#039;&#039;account&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;pass Mail/&amp;quot; + account, shell=True).splitlines()[0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記はマルチアカウントセットアップの例です。前述の &#039;&#039;pass&#039;&#039; の引数はカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}} からファイルをロードして、定義した関数を指定:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;Gmail&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Gnome Keyring ====&lt;br /&gt;
&lt;br /&gt;
リモートリポジトリの設定では、remoteusereval/remotepassevalフィールドを、ユーザー名/パスワードに評価するカスタムPythonコードに設定できます。このコードは、&#039;pythonfile&#039; 設定フィールドで示されたpythonスクリプト上で定義された関数への呼び出しにすることができます。以下のサブセクションに従って{{ic|~/.offlineimap.py}}を作成し、設定で使用します。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
&lt;br /&gt;
[Repository examplerepo]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = mail.example.com&lt;br /&gt;
remoteusereval = get_username(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
remotepasseval = get_password(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===== gkgetsecret.py =====&lt;br /&gt;
&lt;br /&gt;
{{Style|これは単一のサブセクションであるため、上記の導入と統合する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|gnome-keyring}}、{{AUR|python2}}、{{AUR|python2-gobject}}、{{Pkg|libsecret}}がインストールされていることを確認して下さい。そして、{{ic|~/.offlineimap.py}}を次の内容で作成します: [https://pastebin.com/wzVfSac8 gkgetsecret.py]。さらに、上記のように{{ic|~/.offlineimaprc}}に{{ic|1=pythonfile = ~/.offlineimap.py}}を設定します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|seahorse}}を使ってパスワードを作成した場合、その説明からパスワードを取得できます。例えば、&#039;&#039;Password for me@myworkemail.com&#039;&#039; という説明つきのgnome-keyringに保存された &#039;&#039;work&#039;&#039; レポジトリのパスワードは、{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remotepasseval = get_pw_from_desc(&amp;quot;Password for me@myworkemail.com&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
同様にユーザー名も保存したい設定の場合、 &#039;&#039;secret-tool&#039;&#039; でパスワードを生成する方が、ユーザー名やリポジトリ名などの属性を設定するのに使えるのでよいでしょう。以下のコマンドでパスワードを作成することを検討して下さい。&lt;br /&gt;
 $ secret-tool store --label &amp;quot;Password for Work Email&amp;quot; username me@myworkemail.com repo Work&lt;br /&gt;
&lt;br /&gt;
このアカウントのユーザー名とパスワードは{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remoteusereval = get_val_from_attrs(&amp;quot;username&amp;quot;, &amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
 remotepasseval = get_pw_from_attrs(&amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== python-keyring ====&lt;br /&gt;
&lt;br /&gt;
どのキーリングでも使える一般的な解決策があります。{{Pkg|python-keyring}}をインストールし、~/.offlineimaprcを以下のように変更して下さい。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = /home/user/offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
[Repository RemoteEmail]&lt;br /&gt;
remoteuser = username@host.net&lt;br /&gt;
remotepasseval = keyring.get_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして、 ~/offlineimap.py のどこかに {{ic|import keyring}} を追加して下さい.&lt;br /&gt;
&lt;br /&gt;
あとはパスワードを設定するだけです。次のようなpythonスクリプトか、&lt;br /&gt;
&lt;br /&gt;
{{bc|$ python&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import keyring&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; keyring.set_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;, &amp;quot;MYPASSWORD&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
あるいはpython-keyringパッケージで提供されているkeyringコマンドを使えます。&lt;br /&gt;
&lt;br /&gt;
 $ keyring --help&lt;br /&gt;
 $ keyring set host username&lt;br /&gt;
 Password for &#039;username&#039; in &#039;host&#039;:&lt;br /&gt;
 $ keyring get host username&lt;br /&gt;
 password&lt;br /&gt;
&lt;br /&gt;
これで、平文として保存したり毎回入力したりする必要なく、(kwallet/gnome-)キーリングからパスワードを取り出せるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Emacs EasyPG ====&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/OfflineIMAP#toc2 を見てください。&lt;br /&gt;
&lt;br /&gt;
==== KeePassXCとFreedesktop.orgのsecret-service  ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libsecret}}をインストールし、KeepassXCの設定でFreedesktop.org secret-service統合を有効化、&#039;&#039;Database Settings &amp;gt; Secret Service Integration&#039;&#039;でエントリを公開し、&#039;&#039;Edit Entry &amp;gt; Advanced&#039;&#039;設定で{{ic|Title}}追加属性に{{ic|account@name.org}}を追加します。これで、{{ic|secret-tool lookup Title account@name.org}}コマンドでパスワードがコンソールに表示されるはずです。次に、pythonスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import os&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;secret-tool lookup Title &amp;quot; + account, shell=True).splitlines()[0].decode(&amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python-secretstorage}}に依存する同等のスクリプトは以下の通りです:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import secretstorage&lt;br /&gt;
from contextlib import closing&lt;br /&gt;
def get_pass(title):&lt;br /&gt;
    with closing(secretstorage.dbus_init()) as conn:&lt;br /&gt;
        assert(secretstorage.check_service_availability(conn))&lt;br /&gt;
        collection = secretstorage.get_default_collection(conn)&lt;br /&gt;
        if collection.is_locked():&lt;br /&gt;
            collection.unlock()&lt;br /&gt;
        matches = collection.search_items({&amp;quot;Title&amp;quot;: title})&lt;br /&gt;
        entry = next(matches)&lt;br /&gt;
        if entry.is_locked():&lt;br /&gt;
            entry.unlock()&lt;br /&gt;
        return(entry.get_secret())&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}}からこのファイルをロードし、定義された関数を指定します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.script.py&lt;br /&gt;
...&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;account@name.org&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== UI の上書きと自動更新の設定 ===&lt;br /&gt;
&lt;br /&gt;
トラブルシューティングのために、より詳細なUI、バックグラウンド同期なし、場合によってはデバッグレベルでofflineimapを起動すると便利な場合があります:&lt;br /&gt;
 $ offlineimap [ -o ] [ -d &amp;lt;debug_type&amp;gt; ] [ -u &amp;lt;ui&amp;gt; ]&lt;br /&gt;
;-o&lt;br /&gt;
:自動更新、キープアライブ等を無効にします。&lt;br /&gt;
&lt;br /&gt;
;-d &amp;lt;debug_type&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;debug_type&amp;gt;&#039;&#039;は{{Ic|imap}}、{{Ic|maildir}}、{{Ic|thread}}のいずれかです。imapとmaildirのデバッグが圧倒的に最も便利です。&lt;br /&gt;
&lt;br /&gt;
;-u &amp;lt;ui&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;ui&amp;gt;&#039;&#039;は{{Ic|CURSES.BLINKENLIGHTS}}、{{Ic|TTY.TTYUI}}、{{Ic|NONINTERACTIVE.BASIC}}、{{Ic|NONINTERACTIVE.QUIET}}、{{Ic|MACHINE.MACHINEUI}}のいずれかです。デバッグ目的ではTTY.TTYUIで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しいバージョンでは以下を&amp;lt;ui&amp;gt;に使います: {{Ic|blinkenlights}}、{{Ic|ttyui}}、{{Ic|basic}}、{{Ic|quiet}}、{{Ic|machineui}}}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダが作成できない ===&lt;br /&gt;
&lt;br /&gt;
[https://alioth-lists.debian.net/pipermail/offlineimap-project/2011-September/010200.html こちら]にあるように、バージョン6.5.3でofflineimapはリモートリポジトリにフォルダを作成できるようになりました。&lt;br /&gt;
&lt;br /&gt;
これにより、リモートリポジトリで{{Ic|nametrans}}を使用すると以下のようなエラーが発生する可能性があります:&lt;br /&gt;
 ERROR: Creating folder bar on repository foo-remote&lt;br /&gt;
   Folder &#039;bar&#039;[foo-remote] could not be created. Server responded: (&#039;NO&#039;, [&#039;[ALREADYEXISTS] Duplicate folder name bar (Failure)&#039;])&lt;br /&gt;
&lt;br /&gt;
解決策は、ローカルリポジトリに逆{{Ic|nametrans}}ラムダを提供することです。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository foo-local]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;bar&#039;, &#039;BAR&#039;)&lt;br /&gt;
&lt;br /&gt;
[Repository foo-remote]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;BAR&#039;, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 正しい逆マッピングを行うには、{{Ic|offlineimap --info}}の出力が役に立つでしょう。&lt;br /&gt;
* マッピングを更新したら、影響を受けるアカウントの{{Ic|$HOME/.offlineimap/}}下のフォルダを全て削除する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== SSL フィンガープリントが一致しない ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Server SSL fingerprint &#039;keykeykey&#039; for hostname &#039;example.com&#039; does not match configured fingerprint. Please verify and set &#039;cert_fingerprint&#039; accordingly if not set yet.&lt;br /&gt;
&lt;br /&gt;
これを解決するには、{{ic|~/.offlineimaprc}} ({{ic|1=ssl = yes}}と同じセクション)に以下のいずれかを追加します。&lt;br /&gt;
* リモートサーバーの証明書のフィンガープリントを{{ic|cert_fingerprint}}に追加します。これは、リモートサーバーの証明書が与えられたフィンガープリントに一致するかチェックします。&lt;br /&gt;
 cert_fingerprint = keykeykey&lt;br /&gt;
* もしくは、システムのCA証明書ファイルを{{ic|sslcacertfile}}に追加します。{{Pkg|ca-certificates}}のインストールが必要です。これは、リモートのSSL証明書チェーンを、そのファイルの認証局に対して検証します。&lt;br /&gt;
{{bc|1=sslcacertfile = /etc/ssl/certs/ca-certificates.crt}}&lt;br /&gt;
&lt;br /&gt;
=== Copying message, connection closed ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Copying message -2 [acc: email] connection closed&lt;br /&gt;
 Folder sent [acc: email]: ERROR: while syncing sent [account email] connection closed&lt;br /&gt;
&lt;br /&gt;
上記の問題はローカルとサーバーで同じメッセージが作成されていることが原因です。メールのプロバイダが自動的にローカルクライアントと同じフォルダに送信したメールを保存した場合に発生します。この問題が起こったときはローカルクライアントで送信済みメッセージの保存を無効化してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://lists.alioth.debian.org/mailman/listinfo/offlineimap-project OfflineIMAP 公式メーリングリスト]&lt;br /&gt;
* [http://pbrisbin.com/posts/mutt_gmail_offlineimap/ Mutt + Gmail + Offlineimap] - brisbinによるシンプルなgmail/muttの設定の概要。cronでofflineimapの同期を保持させています。&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40347</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OfflineIMAP&amp;diff=40347"/>
		<updated>2025-06-03T11:12:21Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: 英語版の最新版の内容に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:メール取得エージェント]]&lt;br /&gt;
[[Category:OpenPGP]]&lt;br /&gt;
[[en:OfflineIMAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|isync}}&lt;br /&gt;
{{Related|notmuch}}&lt;br /&gt;
{{Related|msmtp}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/OfflineIMAP/offlineimap3 OfflineIMAP] は IMAP サーバーからメールを同期する Python ユーティリティです。POP3 プロトコルや mbox は使えないため、通常 [[Mutt]] などの MUA と組み合わされて使われます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|offlineimap}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Offlineimap には2つのデフォルト設定ファイルが付属しており、どちらも {{ic|/usr/share/offlineimap/}} にあります。{{ic|offlineimap.conf}} には全ての設定が含まれておりコメントが付与されています。一方、{{ic|offlineimap.conf.minimal}} にはコメントが付いておらず多少の設定しか含まれていません (参照: [[#最小]])。&lt;br /&gt;
&lt;br /&gt;
デフォルト設定ファイルのどちらかを {{ic|~/.offlineimaprc}} または {{ic|$XDG_CONFIG_HOME/offlineimap/config}} にコピーしてください。&lt;br /&gt;
&lt;br /&gt;
{{note|同じ行内に、オプションや値の後ろにコメントを書くのは無効な構文なので、コメントは別の独立した行に書いて下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 最小 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|offlineimap.conf.minimal}} のコメントが付いたバージョンは以下になります:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
# 同期するアカウントのリスト。コンマで区切る。&lt;br /&gt;
accounts = main&lt;br /&gt;
&lt;br /&gt;
[Account main]&lt;br /&gt;
# ローカルリポジトリの識別子。例: IMAP経由で同期されるmaildir。&lt;br /&gt;
localrepository = main-local&lt;br /&gt;
# リモートリポジトリの識別子。すなわち実際のIMAPで、通常はローカルではありません。&lt;br /&gt;
remoterepository = main-remote&lt;br /&gt;
&lt;br /&gt;
[Repository main-local]&lt;br /&gt;
# OfflineImapは、Maildir、GmailMaildir、およびIMAPをローカルリポジトリとしてサポートしています。&lt;br /&gt;
type = Maildir&lt;br /&gt;
# メールを配置する場所&lt;br /&gt;
localfolders = ~/mail&lt;br /&gt;
&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# リモートレポジトリはIMAPまたはGmailであり、後者は事前に設定されたIMAPです。&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = host.domain.tld&lt;br /&gt;
remoteuser = username&lt;br /&gt;
# OfflineImapのバージョンが6.5.4より高い場合、SSL接続に必要です。&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダの同期の選択 ===&lt;br /&gt;
&lt;br /&gt;
特定のフォルダだけを同期したい場合、{{ic|~/.offlineimaprc}} でアカウントの &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに [http://offlineimap.org/doc/nametrans.html#folderfilter folderfilter] を使います。例えば、以下の設定では {{ic|Inbox}} と {{ic|Sent}} フォルダだけが同期されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# InboxとSentフォルダーのみ同期します:&lt;br /&gt;
folderfilter = lambda foldername: foldername in [&amp;quot;Inbox&amp;quot;, &amp;quot;Sent&amp;quot;]&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
他のオプションについては、[http://offlineimap.org/doc/nametrans.html#folderfilter 公式ドキュメント] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== カスタムポート ===&lt;br /&gt;
&lt;br /&gt;
IMAPサーバーの中には、デフォルトの993ポートではなく、カスタムポートの接続を要求してくるものがあります。そのようにするには、{{ic|~/.offlineimaprc}}の &#039;&#039;&#039;remote&#039;&#039;&#039; セクションに &#039;&#039;remoteport&#039;&#039; オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
remoteport=&#039;&#039;1234&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
offlineimap を実行する前に、ローカルリポジトリに割り当てる親ディレクトリを作成してください:&lt;br /&gt;
 $ mkdir ~/Maildir&lt;br /&gt;
&lt;br /&gt;
そして、プログラムを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ offlineimap&lt;br /&gt;
&lt;br /&gt;
メールアカウントが同期されます。何か問題が発生した場合、エラーメッセージをよく見て下さい。OfflineIMAP は基本的に問題について詳しい出力を表示します。最終的な製品からのトレースバックを取得するのに開発者が悩む必要がないようにするためです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== バックグラウンドで offlineimap を実行 ===&lt;br /&gt;
&lt;br /&gt;
{{Style|コメント付きの設定ファイルをドキュメントとして使うのではなく、テキストに記述する方が良いのでは？}}&lt;br /&gt;
&lt;br /&gt;
大抵のメール転送エージェントはデフォルトで、プログラムを定期的に同期させることで[[デーモン]]としてツールを使うのが前提になっています。offlineimap では、バックグラウンドで作業を制御する設定はあまりありません。&lt;br /&gt;
&lt;br /&gt;
紛らわしいことに、バックグラウンドの設定は設定ファイルのあらゆるところに散らばっています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
# generalセクション&lt;br /&gt;
[general]&lt;br /&gt;
# 同時に同期するアカウントの数を制御します&lt;br /&gt;
maxsyncaccounts = 1&lt;br /&gt;
&lt;br /&gt;
# アカウント識別子&lt;br /&gt;
[Account main]&lt;br /&gt;
# 同期の間隔(分)&lt;br /&gt;
autorefresh = 0.5&lt;br /&gt;
# IMAPフラグにのみ変更があった場合、quick-syncsは更新されません。&lt;br /&gt;
# autorefresh=0.5 と quick=10 を組み合わせると、&lt;br /&gt;
# タイプに関係なく、各完全更新の間に0.5分の間隔で&lt;br /&gt;
# 10回のクイック更新が行われます。&lt;br /&gt;
quick = 10&lt;br /&gt;
&lt;br /&gt;
# リモートリポジトリ識別子&lt;br /&gt;
[Repository main-remote]&lt;br /&gt;
# 同期が完了すると接続を閉じる代わりに、offlineimapはサーバーに空のデータを送信して接続を維持します。&lt;br /&gt;
# この値を60に設定すると、同期（クイックと自動更新の両方）の間に1分間接続を維持しようとします。&lt;br /&gt;
# この設定は、autorefresh と holdconnectionopen の両方が設定されていない場合は無効です。&lt;br /&gt;
keepalive = 60&lt;br /&gt;
# OfflineIMAPは通常、autorefreshグローバルオプションが指定されている場合、更新の合間にIMAPサーバ接続を閉じます。&lt;br /&gt;
# 接続を維持したい場合は、この設定をtrueに設定してください。&lt;br /&gt;
# autorefreshが設定されていない場合、この設定は効果がありません。&lt;br /&gt;
holdconnectionopen = yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ログイン時にデーモンを自動的に起動するには、[[systemd/ユーザー]]サービスである{{ic|offlineimap.service}}を{{ic|--user}}フラグ付きで[[起動/有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
複数のアカウントを設定している場合は、maxsyncaccountsパラメータ[https://www.offlineimap.org/configuration/2016/01/29/why-i-m-not-using-maxconnctions.html]を増やすのではなく、{{ic|offlineimap@.service}}を使用することをお勧めします。{{ic|offlineimap@youraccountname.service}}を[[起動/有効化]]するだけです。&lt;br /&gt;
&lt;br /&gt;
==== systemd timer ====&lt;br /&gt;
&lt;br /&gt;
あるいは、systemd-user [[systemd/タイマー|タイマー]]を使って、{{ic|offlineimap-oneshot.timer}}を{{ic|--user}}フラグで起動/有効化することで、OfflineIMAPを完全に管理することもできます。&lt;br /&gt;
&lt;br /&gt;
このタイマーはデフォルトで15分ごとにOfflineIMAPを実行します。これは、[[ドロップインファイル]]を作成することで変更することができます。例えば、以下では5分ごとにチェックするようにタイマーを修正しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.timer.d/timer.conf|2=&lt;br /&gt;
[Timer]&lt;br /&gt;
OnUnitInactiveSec=5m&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Accuracy|これは、OfflineIMAPのローカルデータベースに矛盾をもたらす可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
より堅牢な解決法としては、フリーズした場合にOfflineIMAPをkillするウォッチドッグを設定することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/offlineimap-oneshot.service.d/service.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
WatchdogSec=300&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== mutt 用に自動的にメールボックスを作成 ===&lt;br /&gt;
&lt;br /&gt;
[Mutt]]は 単にIMAP や Maildir のディレクトリを指し示したり、どのサブディレクトリがメールボックスであるかを推測することはできませんが、 offlineimap は同期するメールボックスを含む muttrc フラグメントを生成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[mbnames]&lt;br /&gt;
enabled = yes&lt;br /&gt;
filename = ~/.mutt/mailboxes&lt;br /&gt;
header = &amp;quot;mailboxes &amp;quot;&lt;br /&gt;
peritem = &amp;quot;+%(accountname)s/%(foldername)s&amp;quot;&lt;br /&gt;
sep = &amp;quot; &amp;quot;&lt;br /&gt;
footer = &amp;quot;\n&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして以下の行を{{ic|~/.mutt/muttrc}}に追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mutt/muttrc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# IMAP: offlineimap&lt;br /&gt;
set folder = &amp;quot;~/Mail&amp;quot;&lt;br /&gt;
source ~/.mutt/mailboxes&lt;br /&gt;
set spoolfile = &amp;quot;+account/INBOX&amp;quot;&lt;br /&gt;
set record = &amp;quot;+account/Sent\ Items&amp;quot;&lt;br /&gt;
set postponed = &amp;quot;+account/Drafts&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|account}}は{{ic|~/.offlineimaprc}}でIMAPアカウントにつけた名前です。&lt;br /&gt;
&lt;br /&gt;
=== Gmail の設定 ===&lt;br /&gt;
&lt;br /&gt;
このリモートリポジトリは Gmail をサポートするために特別に設定されており、フォルダ名を大文字から小文字に置き換えたり、その他の細かい追加を行います。この設定では「すべてのメール」フォルダーを同期しないことに注意して下さい。「すべてのメール」は通常不要であり、この同期をスキップすることにより帯域幅コストを抑えるためです:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository gmail-remote]&lt;br /&gt;
type = Gmail&lt;br /&gt;
remoteuser = user@gmail.com&lt;br /&gt;
remotepass = password&lt;br /&gt;
nametrans = lambda foldername: re.sub (&#039;^\[gmail\]&#039;, &#039;bak&#039;,&lt;br /&gt;
                               re.sub (&#039;sent_mail&#039;, &#039;sent&#039;,&lt;br /&gt;
                               re.sub (&#039;starred&#039;, &#039;flagged&#039;,&lt;br /&gt;
                               re.sub (&#039; &#039;, &#039;_&#039;, foldername.lower()))))&lt;br /&gt;
folderfilter = lambda foldername: foldername not in [&#039;[Gmail]/All Mail&#039;]&lt;br /&gt;
# OfflineImap 6.5.4 で必要&lt;br /&gt;
sslcacertfile = /etc/ssl/certs/ca-certificates.crt&lt;br /&gt;
# https://github.com/OfflineIMAP/offlineimap/issues/573（バージョン7.0.12、7.2.1）の対処に必要&lt;br /&gt;
ssl_version = tls1_2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Gmailが別の言語に設定されている場合、フォルダ名も翻訳されているように見える場合があります。 例: 「sent_mail」の代わりに「送信済みメール」&lt;br /&gt;
* バージョン6.3.5以降では、offlineimapはローカルのフォルダに合わせてリモートのフォルダも作成します。そのため、この名前の翻訳ルールの効果を逆転させる名前の翻訳ルールがローカルリポジトリにも必要になるかもしれません。名前の逆翻訳ルールを作りたくない場合は、リモートの設定に次のように記述することで、リモートフォルダの作成を無効にできます: {{ic|&amp;lt;nowiki&amp;gt;createfolders = False&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* 2012年10月1日現在、gmail の SSL 証明書のフィンガープリントはいつも同じだとは限りません。このため {{ic|cert_fingerprint}} を使うよりも {{ic|sslcacertfile}} を使って SSL の確認をするほうが良いでしょう ([[#SSL フィンガープリントが一致しない]]を参照)。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== oama経由のOAuth2アクセストークン ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pdobsan/oama oama] ({{AUR|oama-bin}})は、IMAP/SMTPクライアントにOAuth2認証の更新機能と承認を提供するユーティリティです。&lt;br /&gt;
&lt;br /&gt;
OfflineIMAPは、設定からPythonコードを呼び出すことができます。したがって、まず{{ic|[general]}}セクションで、以下の行を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Pythonファイルに以下のコードを追加して、&#039;&#039;oama&#039;&#039;を経由してOAuth2アクセストークンを取得します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
import subprocess&lt;br /&gt;
&lt;br /&gt;
def get_token(email_address):&lt;br /&gt;
    return subprocess.run([&amp;quot;oama&amp;quot;, &amp;quot;access&amp;quot;, email_address], capture_output=True, text=True).stdout&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして設定ファイルに戻り、Gmailアカウントのrepositoryセクションに以下を追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
auth_mechanisms = XOAUTH2&lt;br /&gt;
oauth2_client_id = &#039;&#039;YOUR_OAUTH2_CLIENT_ID&#039;&#039;&lt;br /&gt;
oauth2_client_secret = &#039;&#039;YOUR_OAUTH2_CLIENT_SECRET&#039;&#039;&lt;br /&gt;
oauth2_request_url = &amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/token&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oauth2_access_token_eval = get_token(&amp;quot;&#039;&#039;YOUR_EMAIL_ADDRESS_FOR_THIS_ACCOUNT&#039;&#039;&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パスワードの管理 ===&lt;br /&gt;
&lt;br /&gt;
==== .netrc ====&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|~/.netrc}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 machine hostname.tld&lt;br /&gt;
     login [your username]&lt;br /&gt;
     password [your password]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ファイルに600や700のような適切な権限を与えることを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
 $ chmod 600 ~/.netrc&lt;br /&gt;
&lt;br /&gt;
{{Note|OfflineIMAPは、{{ic|.netrc}}ファイルに複数のアカウントが保存されている場合、パスワードを取得する方法を[https://github.com/OfflineIMAP/offlineimap/issues/295 知りません]。}}&lt;br /&gt;
&lt;br /&gt;
==== GPG を使う ====&lt;br /&gt;
&lt;br /&gt;
GNU Privacy Guard を使うことで暗号化ファイルにパスワードを保存することができます。このセクションの設定を行う前にまず [[GnuPG]] をセットアップしてください。[[GnuPG#gpg-agent|パスワードを入力しなくても]] GPG の秘密鍵をいつでも使えるようにしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
まずプレーンテキストファイルにメールアカウントのパスワードを入力してください。暗号化されていないパスワードがディスクに書き込まれないように、ファイルの作成は [[tmpfs]] 上の {{ic|700}} パーミッションの安全なディレクトリで行なって下さい。それから、公開鍵でファイルを暗号化します:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --default-recipient-self -e &#039;&#039;/path/to/plain/password&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
必要なくなったプレーンテキストファイルは削除してください。暗号化したファイルは最終的に必要な場所 (例: {{ic|~/.offlineimappass.gpg}}) に移動してください。&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python2&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass():&lt;br /&gt;
    return check_output(&amp;quot;gpg -dq ~/.offlineimappass.gpg&amp;quot;, shell=True).strip(&amp;quot;\n&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のファイルを {{ic|~/.offlineimaprc}} からロードして、定義した関数を指定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository &#039;&#039;example&#039;&#039;]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass()&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== pass を使う ====&lt;br /&gt;
&lt;br /&gt;
[[pass]] は GPG ベースのシンプルなコマンドラインのパスワードマネージャです。&lt;br /&gt;
&lt;br /&gt;
最初にメールアカウントのパスワードを作成:&lt;br /&gt;
&lt;br /&gt;
 $ pass insert Mail/&#039;&#039;account&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
次にパスワードを復号化する python 関数を作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimap.py|2=&lt;br /&gt;
#! /usr/bin/env python2&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;pass Mail/&amp;quot; + account, shell=True).splitlines()[0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記はマルチアカウントセットアップの例です。前述の &#039;&#039;pass&#039;&#039; の引数はカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}} からファイルをロードして、定義した関数を指定:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;Gmail&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Gnome Keyring ====&lt;br /&gt;
&lt;br /&gt;
リモートリポジトリの設定では、remoteusereval/remotepassevalフィールドを、ユーザー名/パスワードに評価するカスタムPythonコードに設定できます。このコードは、&#039;pythonfile&#039; 設定フィールドで示されたpythonスクリプト上で定義された関数への呼び出しにすることができます。以下のサブセクションに従って{{ic|~/.offlineimap.py}}を作成し、設定で使用します。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = ~/.offlineimap.py&lt;br /&gt;
&lt;br /&gt;
[Repository examplerepo]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = mail.example.com&lt;br /&gt;
remoteusereval = get_username(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
remotepasseval = get_password(&amp;quot;examplerepo&amp;quot;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===== gkgetsecret.py =====&lt;br /&gt;
&lt;br /&gt;
{{Style|これは単一のサブセクションであるため、上記の導入と統合する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|gnome-keyring}}、{{AUR|python2}}、{{AUR|python2-gobject}}、{{Pkg|libsecret}}がインストールされていることを確認して下さい。そして、{{ic|~/.offlineimap.py}}を次の内容で作成します: [https://pastebin.com/wzVfSac8 gkgetsecret.py]。さらに、上記のように{{ic|~/.offlineimaprc}}に{{ic|1=pythonfile = ~/.offlineimap.py}}を設定します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|seahorse}}を使ってパスワードを作成した場合、その説明からパスワードを取得できます。例えば、&#039;&#039;Password for me@myworkemail.com&#039;&#039; という説明つきのgnome-keyringに保存された &#039;&#039;work&#039;&#039; レポジトリのパスワードは、{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remotepasseval = get_pw_from_desc(&amp;quot;Password for me@myworkemail.com&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
同様にユーザー名も保存したい設定の場合、 &#039;&#039;secret-tool&#039;&#039; でパスワードを生成する方が、ユーザー名やリポジトリ名などの属性を設定するのに使えるのでよいでしょう。以下のコマンドでパスワードを作成することを検討して下さい。&lt;br /&gt;
 $ secret-tool store --label &amp;quot;Password for Work Email&amp;quot; username me@myworkemail.com repo Work&lt;br /&gt;
&lt;br /&gt;
このアカウントのユーザー名とパスワードは{{ic|~/.offlineimaprc}}に以下の行を追加することによって取得できます。&lt;br /&gt;
&lt;br /&gt;
 [Repository Work]&lt;br /&gt;
 ...&lt;br /&gt;
 remoteusereval = get_val_from_attrs(&amp;quot;username&amp;quot;, &amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
 remotepasseval = get_pw_from_attrs(&amp;quot;repo&amp;quot;, &amp;quot;Work&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== python-keyring ====&lt;br /&gt;
&lt;br /&gt;
どのキーリングでも使える一般的な解決策があります。{{Pkg|python-keyring}}をインストールし、~/.offlineimaprcを以下のように変更して下さい。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
pythonfile = /home/user/offlineimap.py&lt;br /&gt;
...&lt;br /&gt;
[Repository RemoteEmail]&lt;br /&gt;
remoteuser = username@host.net&lt;br /&gt;
remotepasseval = keyring.get_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして、 ~/offlineimap.py のどこかに {{ic|import keyring}} を追加して下さい.&lt;br /&gt;
&lt;br /&gt;
あとはパスワードを設定するだけです。次のようなpythonスクリプトか、&lt;br /&gt;
&lt;br /&gt;
{{bc|$ python&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import keyring&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; keyring.set_password(&amp;quot;host&amp;quot;,&amp;quot;username&amp;quot;, &amp;quot;MYPASSWORD&amp;quot;)}}&lt;br /&gt;
&lt;br /&gt;
あるいはpython-keyringパッケージで提供されているkeyringコマンドを使えます。&lt;br /&gt;
&lt;br /&gt;
 $ keyring --help&lt;br /&gt;
 $ keyring set host username&lt;br /&gt;
 Password for &#039;username&#039; in &#039;host&#039;:&lt;br /&gt;
 $ keyring get host username&lt;br /&gt;
 password&lt;br /&gt;
&lt;br /&gt;
これで、平文として保存したり毎回入力したりする必要なく、(kwallet/gnome-)キーリングからパスワードを取り出せるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Emacs EasyPG ====&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/OfflineIMAP#toc2 を見てください。&lt;br /&gt;
&lt;br /&gt;
==== KeePassXCとFreedesktop.orgのsecret-service  ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|libsecret}}をインストールし、KeepassXCの設定でFreedesktop.org secret-service統合を有効化、&#039;&#039;Database Settings &amp;gt; Secret Service Integration&#039;&#039;でエントリを公開し、&#039;&#039;Edit Entry &amp;gt; Advanced&#039;&#039;設定で{{ic|Title}}追加属性に{{ic|account@name.org}}を追加します。これで、{{ic|secret-tool lookup Title account@name.org}}コマンドでパスワードがコンソールに表示されるはずです。次に、pythonスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import os&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
&lt;br /&gt;
def get_pass(account):&lt;br /&gt;
    return check_output(&amp;quot;secret-tool lookup Title &amp;quot; + account, shell=True).splitlines()[0].decode(&amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python-secretstorage}}に依存する同等のスクリプトは以下の通りです:&lt;br /&gt;
&lt;br /&gt;
{{hc| ~/.script.py|2=&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
import secretstorage&lt;br /&gt;
from contextlib import closing&lt;br /&gt;
def get_pass(title):&lt;br /&gt;
    with closing(secretstorage.dbus_init()) as conn:&lt;br /&gt;
        assert(secretstorage.check_service_availability(conn))&lt;br /&gt;
        collection = secretstorage.get_default_collection(conn)&lt;br /&gt;
        if collection.is_locked():&lt;br /&gt;
            collection.unlock()&lt;br /&gt;
        matches = collection.search_items({&amp;quot;Title&amp;quot;: title})&lt;br /&gt;
        entry = next(matches)&lt;br /&gt;
        if entry.is_locked():&lt;br /&gt;
            entry.unlock()&lt;br /&gt;
        return(entry.get_secret())&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.offlineimaprc}}からこのファイルをロードし、定義された関数を指定します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|2=&lt;br /&gt;
[general]&lt;br /&gt;
# 任意のロードするPythonコードのパス&lt;br /&gt;
pythonfile = ~/.script.py&lt;br /&gt;
...&lt;br /&gt;
[Repository Gmail]&lt;br /&gt;
# 暗号化されたパスワードを復号化して読み取る&lt;br /&gt;
remotepasseval = get_pass(&amp;quot;account@name.org&amp;quot;)&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== UI の上書きと自動更新の設定 ===&lt;br /&gt;
&lt;br /&gt;
トラブルシューティングのために、より詳細なUI、バックグラウンド同期なし、場合によってはデバッグレベルでofflineimapを起動すると便利な場合があります:&lt;br /&gt;
 $ offlineimap [ -o ] [ -d &amp;lt;debug_type&amp;gt; ] [ -u &amp;lt;ui&amp;gt; ]&lt;br /&gt;
;-o&lt;br /&gt;
:自動更新、キープアライブ等を無効にします。&lt;br /&gt;
&lt;br /&gt;
;-d &amp;lt;debug_type&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;debug_type&amp;gt;&#039;&#039;は{{Ic|imap}}、{{Ic|maildir}}、{{Ic|thread}}のいずれかです。imapとmaildirのデバッグが圧倒的に最も便利です。&lt;br /&gt;
&lt;br /&gt;
;-u &amp;lt;ui&amp;gt;&lt;br /&gt;
:&#039;&#039;&amp;lt;ui&amp;gt;&#039;&#039;は{{Ic|CURSES.BLINKENLIGHTS}}、{{Ic|TTY.TTYUI}}、{{Ic|NONINTERACTIVE.BASIC}}、{{Ic|NONINTERACTIVE.QUIET}}、{{Ic|MACHINE.MACHINEUI}}のいずれかです。デバッグ目的ではTTY.TTYUIで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しいバージョンでは以下を&amp;lt;ui&amp;gt;に使います: {{Ic|blinkenlights}}、{{Ic|ttyui}}、{{Ic|basic}}、{{Ic|quiet}}、{{Ic|machineui}}}}&lt;br /&gt;
&lt;br /&gt;
=== フォルダが作成できない ===&lt;br /&gt;
&lt;br /&gt;
[https://alioth-lists.debian.net/pipermail/offlineimap-project/2011-September/010200.html こちら]にあるように、バージョン6.5.3でofflineimapはリモートリポジトリにフォルダを作成できるようになりました。&lt;br /&gt;
&lt;br /&gt;
これにより、リモートリポジトリで{{Ic|nametrans}}を使用すると以下のようなエラーが発生する可能性があります:&lt;br /&gt;
 ERROR: Creating folder bar on repository foo-remote&lt;br /&gt;
   Folder &#039;bar&#039;[foo-remote] could not be created. Server responded: (&#039;NO&#039;, [&#039;[ALREADYEXISTS] Duplicate folder name bar (Failure)&#039;])&lt;br /&gt;
&lt;br /&gt;
解決策は、ローカルリポジトリに逆{{Ic|nametrans}}ラムダを提供することです。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.offlineimaprc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Repository foo-local]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;bar&#039;, &#039;BAR&#039;)&lt;br /&gt;
&lt;br /&gt;
[Repository foo-remote]&lt;br /&gt;
nametrans = lambda foldername: foldername.replace(&#039;BAR&#039;, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 正しい逆マッピングを行うには、{{Ic|offlineimap --info}}の出力が役に立つでしょう。&lt;br /&gt;
* マッピングを更新したら、影響を受けるアカウントの{{Ic|$HOME/.offlineimap/}}下のフォルダを全て削除する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== SSL フィンガープリントが一致しない ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Server SSL fingerprint &#039;keykeykey&#039; for hostname &#039;example.com&#039; does not match configured fingerprint. Please verify and set &#039;cert_fingerprint&#039; accordingly if not set yet.&lt;br /&gt;
&lt;br /&gt;
これを解決するには、{{ic|~/.offlineimaprc}} ({{ic|1=ssl = yes}}と同じセクション)に以下のいずれかを追加します。&lt;br /&gt;
* リモートサーバーの証明書のフィンガープリントを{{ic|cert_fingerprint}}に追加します。これは、リモートサーバーの証明書が与えられたフィンガープリントに一致するかチェックします。&lt;br /&gt;
 cert_fingerprint = keykeykey&lt;br /&gt;
* もしくは、システムのCA証明書ファイルを{{ic|sslcacertfile}}に追加します。{{Pkg|ca-certificates}}のインストールが必要です。これは、リモートのSSL証明書チェーンを、そのファイルの認証局に対して検証します。&lt;br /&gt;
{{bc|1=sslcacertfile = /etc/ssl/certs/ca-certificates.crt}}&lt;br /&gt;
&lt;br /&gt;
=== Copying message, connection closed ===&lt;br /&gt;
&lt;br /&gt;
 ERROR: Copying message -2 [acc: email] connection closed&lt;br /&gt;
 Folder sent [acc: email]: ERROR: while syncing sent [account email] connection closed&lt;br /&gt;
&lt;br /&gt;
上記の問題はローカルとサーバーで同じメッセージが作成されていることが原因です。メールのプロバイダが自動的にローカルクライアントと同じフォルダに送信したメールを保存した場合に発生します。この問題が起こったときはローカルクライアントで送信済みメッセージの保存を無効化してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://lists.alioth.debian.org/mailman/listinfo/offlineimap-project OfflineIMAP 公式メーリングリスト]&lt;br /&gt;
* [http://pbrisbin.com/posts/mutt_gmail_offlineimap/ Mutt + Gmail + Offlineimap] - brisbinによるシンプルなgmail/muttの設定の概要。cronでofflineimapの同期を保持させています。&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Spotify&amp;diff=40324</id>
		<title>Spotify</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Spotify&amp;diff=40324"/>
		<updated>2025-05-28T13:09:55Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: サードパーティクライアントを英語版より補充&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:音楽]]&lt;br /&gt;
[[Category:ストリーミング]]&lt;br /&gt;
[[en:Spotify]]&lt;br /&gt;
[[es:Spotify]]&lt;br /&gt;
[[Wikipedia:ja:Spotify|Spotify]] は、フリーミアム型のビジネスモデルを採用したデジタル音楽ストリーミングサービスです。この記事は主に、Spotify が積極的にサポートしていない、半公式でプロプライエタリな &#039;&#039;&#039;Spotify for Linux&#039;&#039;&#039; クライアントについて書かれています [https://www.spotify.com/us/download/linux/] その他に、[https://open.spotify.com/ オンラインプレイヤー] や多くのオープンソース [[#サードパーティのクライアント|サードパーティのクライアント]] について紹介。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spotify-launcher}} を [[インストール]] します。このパッケージは、ホームディレクトリ内のユーザーごとのインストールを管理し、Spotify が [[pacman]] とは独立して自身を更新できるようにします (他のオペレーティング システムで Spotify が自己更新する方法と似ています。)&lt;br /&gt;
&lt;br /&gt;
[[pacman]] を使用して Spotify の更新を管理したい場合は、代わりに [https://www.spotify.com/us/download/linux/Spotify for Linux] を再パッケージ化する {{AUR|spotify}} を使用してください。ローカルファイルを追加して再生する必要がある場合は、{{Pkg|zenity}} と {{Pkg|ffmpeg4.4}} を追加でインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== サードパーティクライアント ===&lt;br /&gt;
&lt;br /&gt;
==== プレミアム会員 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|ここにリストされているすべてのクライアントは、Spotify からのストリーミングにプレミアムアカウントが &#039;&#039;&#039;必要&#039;&#039;&#039; です。}}&lt;br /&gt;
&lt;br /&gt;
* {{App|Librespot|オープンソースの Spotify クライアントライブラリ。公式のクローズドソースの &#039;&#039;libspotify&#039;&#039; を使わなくても Spotify のサービス (ストリーミング) をアプリケーションから使えるようになります。|https://github.com/plietar/librespot|{{AUR|librespot-git}}}}&lt;br /&gt;
* {{App|[https://www.mopidy.com/ Mopidy]|[[Music Player Daemon]] のプラグインベースの実装。拡張を使うことで Spotify をストリーミング可能。|https://github.com/mopidy|{{Pkg|mopidy}} + {{AUR|mopidy-spotify}}}}&lt;br /&gt;
* {{App|ncspot|クロスプラットフォームの ncurses は、ncmpc などにインスパイアされた Rust で書かれた Spotify クライアント。|https://github.com/hrkfdn/ncspot|{{Pkg|ncspot}}}}&lt;br /&gt;
* {{App|Psst|Rust を使用し GUI で作成された高速でマルチプラットフォームの Spotify クライアント。|https://github.com/jpochyla/psst|{{AUR|psst-git}}}}&lt;br /&gt;
* {{App|Spicetify|Spotify クライアントをカスタマイズするための強力なコマンドラインツール。テーマ、拡張機能などが含まれます。|https://spicetify.app/|{{AUR|spicetify-cli}}}}&lt;br /&gt;
* {{App|Spot|Gtk/Gnome デスクトップ用の Rust ネイティブな Spotify クライアント。|https://github.com/xou816/spot|{{AUR|spot-client}}}}&lt;br /&gt;
* {{App|Spotifyd|UNIX デーモンとして実行されるオープンソースの Spotify クライアント。Spotifyd は公式クライアントと同じように音楽をストリーミングし、軽量でより多くのプラットフォームをサポートします。Spotifyd は Spotify Connect プロトコルもサポートしており、公式クライアントからコントロールできるデバイスとして表示されます。|https://github.com/Spotifyd/spotifyd|{{Pkg|spotifyd}}}}&lt;br /&gt;
* {{App|spotify-qt|C++ で書かれ Qt を使った軽量な Spotify クライアント。|https://github.com/kraxarn/spotify-qt|{{AUR|spotify-qt}}}}&lt;br /&gt;
* {{App|spotify-player|spotify-tuiの新しく、機能豊富な代替。|https://github.com/aome510/spotify-player|{{Pkg|spotify-player}}}}&lt;br /&gt;
* {{App|spotify-tui|Rust で書かれたターミナル用の Spotify クライアント。2021年11月17日から更新されていません。|https://github.com/Rigellute/spotify-tui|{{AUR|spotify-tui}}}}&lt;br /&gt;
* {{App|Tizonia|Linux 向けのコマンドラインクラウド音楽プレーヤーで、Spotify、Google Play Music、YouTube、SoundCloud、Plex サーバ、Chromecast デバイスをサポート。|http://tizonia.org/docs/spotify/|{{AUR|tizonia-all}}}}&lt;br /&gt;
&lt;br /&gt;
==== 無料会員 ====&lt;br /&gt;
* {{App|Spotube|プレミアムアカウントもElectronも必要としないオープンソースなSpotify-Youtubeクライアント。Spotifyからデータを取得し、YouTubeからオーディオを再生します。|https://spotube.krtirtho.dev/|{{AUR|spotube}}}}&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== ストレージ サイズを制限する ===&lt;br /&gt;
&lt;br /&gt;
Spotify はキャッシュ用のストレージサイズを自動的に管理しますが、[[ファイルシステム]] がいっぱいにならないようにサイズ制限を強制したい場合があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/home/&#039;&#039;user&#039;&#039;/.config/spotify/prefs}} に [[ヘルプ:読み方#追加, 追記, 作成, 編集|Append]] {{ic|storage.size}} (MB 単位で) を追加します、たとえば 3072MB のストレージ サイズ:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/spotify/prefs|2=&lt;br /&gt;
storage.size=3072&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== グローバルなメディアホットキー ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|大抵は[[デスクトップ環境]]に初めから設定されているキーボードショートカットで Spotify クライアントを使うことができます。例えば [[Cinnamon]] ではデフォルトでプレイヤーを制御できるようにバインドが設定されており (Preferences -&amp;gt; Keyboard -&amp;gt; Shortcuts -&amp;gt; Sound and Media)、お好きなキーを押すことで簡単にショートカットを変えることができます。}}&lt;br /&gt;
&lt;br /&gt;
Spotify は {{ic|XF86AudioPlay}} などのメディアキーをサポートしています。ただし何も設定をしていなかった場合 Spotify の中でしか動作しません。[[xbindkeys]] などを使用してグローバルのメディアキーの押下を取得してから、以下のどれか方法を使うことで Spotify に転送することができます。xbindkeys を使っている場合、インストールやキーの設定を行った後に Spotify を再起動しないと、キーイベントが正しく取得されません。&lt;br /&gt;
&lt;br /&gt;
==== MPRIS ====&lt;br /&gt;
&lt;br /&gt;
Spotify クライアントは [https://specifications.freedesktop.org/mpris-spec/latest/ MPRIS2] D-Bus インターフェイスを実装しており外部からコントロールすることができます。&lt;br /&gt;
&lt;br /&gt;
==== pactl (pulseaudio) ====&lt;br /&gt;
&lt;br /&gt;
MPRIS プロトコルコマンドにはボリューム コントロールが含まれていません。これは、音量変更要求を無視する Spotify 自体の中で壊れています。しかし、pulseaudio の入力シンクを経由して音量を制御することは可能です。&lt;br /&gt;
&lt;br /&gt;
 $ pactl set-sink-input-volume &amp;quot;$current_sink_num&amp;quot; +1% #volume up by 1%&lt;br /&gt;
 $ pactl set-sink-input-volume &amp;quot;$current_sink_num&amp;quot; -1% #volume down by 1%&lt;br /&gt;
 $ pactl set-sink-input-mute &amp;quot;$current_sink_num&amp;quot; toggle #mute toggler&lt;br /&gt;
&lt;br /&gt;
&amp;quot;$current_sink_num&amp;quot;のシンク番号は、コマンドの出力で確認できます。&lt;br /&gt;
{{hc|head=$ pactl list sink-inputs|2=&lt;br /&gt;
Sink Input #&#039;&#039;&#039;3&#039;&#039;&#039; &amp;lt;&amp;lt; here&lt;br /&gt;
Driver: protocol-native.c&lt;br /&gt;
[...]&lt;br /&gt;
application.name = &amp;quot;Spotify&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
ボリュームを変更するためのスクリプトを作成し、[[デスクトップ環境]] 構成または次のセクションで説明する xdotool を介してキーボード ショートカットなどにバインドできます、ここではいくつかの例を示します。&lt;br /&gt;
&lt;br /&gt;
Bash:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 LANGUAGE=&amp;quot;en_US&amp;quot;&lt;br /&gt;
 app_name=&amp;quot;Spotify&amp;quot;&lt;br /&gt;
 current_sink_num=&#039;&#039;&lt;br /&gt;
 sink_num_check=&#039;&#039;&lt;br /&gt;
 app_name_check=&#039;&#039;&lt;br /&gt;
 pactl list sink-inputs |while read line; do \&lt;br /&gt;
     sink_num_check=$(echo &amp;quot;$line&amp;quot; |sed -rn &#039;s/^Sink Input #(.*)/\1/p&#039;)&lt;br /&gt;
     if [ &amp;quot;$sink_num_check&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
         current_sink_num=&amp;quot;$sink_num_check&amp;quot;&lt;br /&gt;
     else&lt;br /&gt;
         app_name_check=$(echo &amp;quot;$line&amp;quot; \&lt;br /&gt;
             |sed -rn &#039;s/application.name = &amp;quot;([^&amp;quot;]*)&amp;quot;/\1/p&#039;)&lt;br /&gt;
             if [ &amp;quot;$app_name_check&amp;quot; = &amp;quot;$app_name&amp;quot; ]; then&lt;br /&gt;
                 pactl set-sink-input-volume &amp;quot;$current_sink_num&amp;quot; +1%&lt;br /&gt;
             fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
このスクリプトは、ユーザー [https://unix.stackexchange.com/users/52126/miko%c5%82ak Mikołak] が [https://unix.stackexchange.com/questions/208784/command-line-per-application-volume-maybe-amixer-or-pactl/209047#209047 この投稿] で行った作業に基づいています &lt;br /&gt;
&lt;br /&gt;
残念ながら、このスクリプトは最速のソリューションではありません。キーボードのホットキーを使用して複数回実行すると、遅延が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
より高速な (10倍程度) Python コード (少なくとも Python 3.7 をインストールする必要があります):&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python3&lt;br /&gt;
 #Author: Marcin Kocur, attribution license: https://creativecommons.org/licenses/by/4.0/&lt;br /&gt;
 import subprocess&lt;br /&gt;
 import os&lt;br /&gt;
 x=0&lt;br /&gt;
 y=0&lt;br /&gt;
 env = os.environ&lt;br /&gt;
 env[&#039;LANG&#039;] = &#039;en_US&#039;&lt;br /&gt;
 app = &#039;&amp;quot;Spotify&amp;quot;&#039;&lt;br /&gt;
 pactl = subprocess.check_output([&#039;pactl&#039;, &#039;list&#039;, &#039;sink-inputs&#039;], env=env).decode().strip().split()&lt;br /&gt;
 if app in pactl:&lt;br /&gt;
     for e in pactl:&lt;br /&gt;
         x += 1&lt;br /&gt;
         if e == app:&lt;br /&gt;
             break&lt;br /&gt;
     for i in pactl[0 : x -1 ]:&lt;br /&gt;
         y += 1&lt;br /&gt;
         if i == &#039;Sink&#039; and pactl[y] == &#039;Input&#039; and &#039;#&#039; in pactl[y + 1]:&lt;br /&gt;
             sink_id = pactl[y+1]&lt;br /&gt;
         if i == &#039;Volume:&#039; and &#039;%&#039; in pactl[y + 3]:&lt;br /&gt;
             volume = pactl[y + 3]&lt;br /&gt;
     sink_id = sink_id[1: ]&lt;br /&gt;
     volume = volume[ : -1 ]&lt;br /&gt;
     if int(volume) &amp;lt; 100:&lt;br /&gt;
         subprocess.run([&#039;pactl&#039;, &#039;set-sink-input-volume&#039;, sink_id, &#039;+1%&#039;])&lt;br /&gt;
&lt;br /&gt;
.py ファイルで保存します。最後の行が実行部分ですので、コマンドを調整して音量を下げたり、ミュートを切り替えたりできます。&lt;br /&gt;
&lt;br /&gt;
=== トラック通知を無効化 ===&lt;br /&gt;
&lt;br /&gt;
バージョン0.9.10以降、トラック変更通知はデフォルトで有効になりました。それらは非常に煩わしい場合があります。それらを無効にするには、以下を追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/spotify/Users/&#039;&#039;spotify login&#039;&#039;-user/prefs|2=&lt;br /&gt;
 ui.track_notifications_enabled=false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--ui.track_notifications_enabled=false}} オプションを使用して spotify を起動することでも可能です。&lt;br /&gt;
&lt;br /&gt;
=== トラック通知を表示 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|playerctl}} には {{pkg|python-gobject}} と [[dunst]] のような通知デーモンと一緒に使用するライブラリが付属しており、トラックが変更されたときにアーティストとタイトルを通知で表示することができます。&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python3&lt;br /&gt;
 &lt;br /&gt;
 from gi.repository import Playerctl, GLib&lt;br /&gt;
 from subprocess import Popen&lt;br /&gt;
 &lt;br /&gt;
 player = Playerctl.Player()&lt;br /&gt;
 &lt;br /&gt;
 def on_track_change(player, e):&lt;br /&gt;
     track_info = &#039;{artist} - {title}&#039;.format(artist=player.get_artist(), title=player.get_title())&lt;br /&gt;
     Popen([&#039;notify-send&#039;, track_info])&lt;br /&gt;
 &lt;br /&gt;
 player.on(&#039;metadata&#039;, on_track_change)&lt;br /&gt;
 &lt;br /&gt;
 GLib.MainLoop().run()&lt;br /&gt;
&lt;br /&gt;
=== 何度も再生されるラジオトラックをスキップ ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|playerctl}} ライブラリの他の使い道としてラジオで何度も再生されるトラックをスキップすることができます。ラジオ局で聞きたくない曲を低く評価する必要はもうありません。&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python3&lt;br /&gt;
 &lt;br /&gt;
 from gi.repository import Playerctl, GLib&lt;br /&gt;
 &lt;br /&gt;
 player = Playerctl.Player()&lt;br /&gt;
 &lt;br /&gt;
 played_out = [&#039;Zu Fuss&#039;, &#039;Walk And Talk&#039;, &#039;Neuland&#039;]&lt;br /&gt;
 &lt;br /&gt;
 def on_track_change(player, e):&lt;br /&gt;
     if player.get_title() in played_out:&lt;br /&gt;
         player.next()&lt;br /&gt;
 &lt;br /&gt;
 player.on(&#039;metadata&#039;, on_track_change)&lt;br /&gt;
 &lt;br /&gt;
 GLib.MainLoop().run()&lt;br /&gt;
&lt;br /&gt;
=== コマーシャルをミュート ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|コマーシャルのミュートは Spotify ではサポートされていないため、一時的に禁止される可能性があります [https://www.theverge.com/2018/3/5/17080920/spotify-cracking-down-piating-premium-free-account]}}&lt;br /&gt;
&lt;br /&gt;
==== spotblock ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mahkoh/spotblock spotblock] ({{AUR|spotblock-git}}) は systemd デーモンとして動作するリソース消費の少ない広告ブロッカーです。&lt;br /&gt;
&lt;br /&gt;
==== Spotify-AdKiller ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|spotify-adkiller-git}} は、Spotify 広告をブロックするもう 1 つの代替手段です。&lt;br /&gt;
&lt;br /&gt;
==== spotblock-rs ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|spotblock-rs}} は、Spotify の広告をミュートする高速かつ軽量のプログラムです。[[PipeWire]] でも機能します。&lt;br /&gt;
&lt;br /&gt;
==== Hosts ファイル ====&lt;br /&gt;
&lt;br /&gt;
hosts ファイルに以下の行を追加することでも Spotify の広告をブロックできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/hosts|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Block spotify ads&lt;br /&gt;
127.0.0.1 media-match.com&lt;br /&gt;
127.0.0.1 adclick.g.doublecklick.net&lt;br /&gt;
127.0.0.1 www.googleadservices.com&lt;br /&gt;
127.0.0.1 open.spotify.com&lt;br /&gt;
127.0.0.1 pagead2.googlesyndication.com&lt;br /&gt;
127.0.0.1 desktop.spotify.com&lt;br /&gt;
127.0.0.1 googleads.g.doubleclick.net&lt;br /&gt;
127.0.0.1 pubads.g.doubleclick.net&lt;br /&gt;
127.0.0.1 audio2.spotify.com&lt;br /&gt;
127.0.0.1 www.omaze.com&lt;br /&gt;
127.0.0.1 omaze.com&lt;br /&gt;
127.0.0.1 bounceexchange.com&lt;br /&gt;
# 127.0.0.1 spclient.wg.spotify.com&lt;br /&gt;
127.0.0.1 securepubads.g.doubleclick.net&lt;br /&gt;
127.0.0.1 8.126.154.104.bc.googleusercontent.com&lt;br /&gt;
127.0.0.1 104.154.126.8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;spclient.wg.spotify.com&#039;&#039; は、最近再生された曲だけでなく、ラジオや毎日のミックスもブロックしているようです}}&lt;br /&gt;
&lt;br /&gt;
=== リモートコントロール ===&lt;br /&gt;
&lt;br /&gt;
==== SSH でコマンドを送信 ====&lt;br /&gt;
&lt;br /&gt;
サーバー上に ssh がセットアップされている場合、以下のコマンドでクライアントからリモートの Spotify インスタンスに制御コマンドを送信できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@host &#039;&#039;yourcommand&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;yourcommand&#039;&#039; は、サーバーにインストールした [https://code.google.com/p/spotifycmd/ spotifycmd] や上述の Linux 版の dbus スクリプトなどに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
==== SSH で Spotify ウィンドウを取得する ====&lt;br /&gt;
&lt;br /&gt;
サーバーをリモートで制御するために TeamViewer や VNC などでデスクトップ全体を取得するのでなければ、サーバーからクライアントに Spotify ウィンドウのみを取得することもできます。&lt;br /&gt;
&lt;br /&gt;
サーバー側に sshd を設定して、サーバーとクライアントの両方に x11vnc をインストールしてください。クライアント側には tigervnc をインストールしてください。以下のスクリプトを使うことでデスクトップ全体を取得したり、Spotify ウィンドウだけを取得できます。MPD の GUI クライアントと同じように使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# vncget.sh&lt;br /&gt;
&lt;br /&gt;
if [[ $1 == all ]];then&lt;br /&gt;
  ssh -f -t -L 5900:localhost:5900 user@host &amp;quot;x11vnc -q -display :0 -auth .Xauthority&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  ssh -f -t -L 5900:localhost:5900 user@host &amp;quot;.bin/vncgetspotify.sh&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
for i in {1..4}; do&lt;br /&gt;
  sleep 2&lt;br /&gt;
  if vncviewer localhost:0; then break; fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# vncgetspotify.sh&lt;br /&gt;
&lt;br /&gt;
export DISPLAY=:0&lt;br /&gt;
&lt;br /&gt;
id=$(wmctrl -lx | awk &#039;/spotify.exe.Wine/ {print $1}&#039;)&lt;br /&gt;
[[ -z $id ]] &amp;amp;&amp;amp; id=$(wmctrl -lx | awk &#039;/spotify.Spotify/ {print $1}&#039;)&lt;br /&gt;
&lt;br /&gt;
x11vnc -sid $id -display :0 -auth .Xauthority&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
2番目のスクリプトをサーバーの {{ic|~/.bin/vncgetspotify.sh}} にコピーして、1番目のスクリプトをクライアントのどこかに保存してください。&lt;br /&gt;
&lt;br /&gt;
最後に、Spotify ウィンドウを取得するには、クライアント側で以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ sh vncget.sh&lt;br /&gt;
&lt;br /&gt;
デスクトップ全体を取得する場合:&lt;br /&gt;
&lt;br /&gt;
 $ sh vncget.sh all&lt;br /&gt;
&lt;br /&gt;
===HiDPI モード===&lt;br /&gt;
最新の Spotify ビルドも DPI に対応していないため、ターミナルコマンドでインターフェイスをスケールする量を指定します:&lt;br /&gt;
 $ spotify --force-device-scale-factor=&#039;&#039;X&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
X はインターフェイスをスケールする量に置き換えて下さい。例: 2。&lt;br /&gt;
&lt;br /&gt;
デスクトップファイルを使用する場合、パッケージを更新したときにファイルが上書きされないように、ローカルのアプリケーションフォルダにデスクトップファイルをコピーしてください:&lt;br /&gt;
 $ cp /usr/share/applications/spotify.desktop ~/.local/share/applications/&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.local/share/applications/spotify.desktop}} を編集して {{ic|--force-device-scale-factor}} オプションを追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|spotify.desktop|2=&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Spotify&lt;br /&gt;
GenericName=Music Player&lt;br /&gt;
Comment=Spotify streaming music client&lt;br /&gt;
Icon=spotify-client&lt;br /&gt;
Exec=spotify &#039;&#039;&#039;--force-device-scale-factor=2&#039;&#039;&#039; %U&lt;br /&gt;
TryExec=spotify&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Audio;Music;Player;AudioVideo&lt;br /&gt;
MimeType=x-scheme-handler/spotify&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
変更を適用するにはデスクトップマネージャを再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Wayland 下で実行 ===&lt;br /&gt;
&lt;br /&gt;
Xwayland で Spotify を実行すると、特に画面サイズと向きが混在している場合に、いくつかの異常が発生する可能性があります。いくつかのフラグを渡すと、Spotify を Wayland モードで実行できます: {{ic|1=--enable-features=UseOzonePlatform --ozone-platform=wayland}}&lt;br /&gt;
&lt;br /&gt;
デスクトップから起動するときに Wayland モードで起動するために、これらの変更を {{ic|spotify.desktop}} ファイルに追加できます。&lt;br /&gt;
{{Note|{{AUR|spotify}} を使用する場合は、代わりに {{ic|~/.config/spotify-flags.conf}} に 1 行に 1 つのフラグを置くことができます。}}&lt;br /&gt;
&lt;br /&gt;
詳細については、前のセクション [[Spotify#HiDPI モード|HiDPI モード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== デスクトップ環境のアラート (ビープ) によって Spotify がミュートになってしまう ===&lt;br /&gt;
&lt;br /&gt;
PulseAudio の設定ファイルで &amp;quot;module-role-cork&amp;quot; をコメントアウトしてください。&lt;br /&gt;
&lt;br /&gt;
テキストエディタで {{ic|/etc/pulse/default.pa}} を開いて以下の行をコメントアウトしてください:&lt;br /&gt;
&lt;br /&gt;
 load-module module-role-cork &lt;br /&gt;
&lt;br /&gt;
もしくは以下のコマンドを実行してアンロードしてください:&lt;br /&gt;
&lt;br /&gt;
 $ pactl unload-module module-role-cork&lt;br /&gt;
&lt;br /&gt;
=== 検索を使うとインターフェイスが点滅してクラッシュする ===&lt;br /&gt;
&lt;br /&gt;
Spotify は古いバージョンの Chromium Embedded Framework を使っており検索を使おうとするとバグによってクラッシュします。以下のコマンドラインオプションを使うことで回避できます:&lt;br /&gt;
&lt;br /&gt;
 --force-device-scale-factor=1.0000001&lt;br /&gt;
&lt;br /&gt;
=== DWM で Spotify Linux を使用した時に画像が点滅したり正しく表示されない ===&lt;br /&gt;
フローティングウィンドウで spotify を起動してください。&lt;br /&gt;
&lt;br /&gt;
以下のルールを {{ic|config.h}} の rules 配列に追加してください:&lt;br /&gt;
  { &amp;quot;Spotify&amp;quot;,     NULL,       NULL,        2,         True,     -1 },&lt;br /&gt;
&lt;br /&gt;
上記の設定でウィンドウモードと関係なく spotify タグが &amp;quot;2&amp;quot; のフローティングウィンドウとして起動されます。新しい設定を適用するために dwm を再コンパイル・インストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== 検索やブラウザ、ラジオが動作しない ===&lt;br /&gt;
&lt;br /&gt;
ブラウジングなどのタブで何も表示されなかったり、検索フィールドが機能しなかったりラジオページが表示されない場合 (起動したときにフリーズして入力に反応しなくなる)、ロケールの設定が原因かもしれません ([http://community.spotify.com/t5/Help-Desktop-Linux-Mac-and/Bug-Desktop-Linux-0-9-0-133-gd18ed589-Having-mixed-locale-breaks/td-p/418270 バグレポート] を参照)。&lt;br /&gt;
&lt;br /&gt;
Spotify を起動する前に {{ic|LC_NUMERIC}} 環境変数を {{ic|en_US.utf8}} に設定してみてください。&lt;br /&gt;
&lt;br /&gt;
=== GUI スレッドのデッドロック ===&lt;br /&gt;
&lt;br /&gt;
Awesome などのタイル型ウィンドウマネージャでは、新しい曲やプレイリストをダブルクリックしたときにデッドロックが発生することがあります。{{ic|~/.config/spotify/Users/[1-9]*-user/prefs}} ファイルを編集して以下の行を追加してください:&lt;br /&gt;
&lt;br /&gt;
 ui.track_notifications_enabled=false&lt;br /&gt;
&lt;br /&gt;
そして Spotify を再起動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 問題の原因は複数存在し、上記の修正では特定のバージョンの Spotify クライアントと Awesome でしか問題が解決されません。Debian や Ubuntu ユーザーは Spotify 0.9.17.1.g9b85d436 と Awesome 3.4.15 で別の原因があると報告しています。&lt;br /&gt;
* Spotify 1.0.17.75-2 現在、{{ic|1=ui.track_notifications_enabled=false}} は無視されます。また、一部のユーザーは Awesome 3.5.6 からデッドロックが発生しなくなったと報告しています。デッドロックの原因はおそらく Awesome から呼び出されるスクリプトが Spotify の D-Bus プロパティに依存しているためかもしれません。詳しくは [https://github.com/acrisci/playerctl/issues/20] を参照。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プロキシを使ったときにアルバム画像が表示されない、四角が表示される ===&lt;br /&gt;
&lt;br /&gt;
spotify を終了して、spotify の設定 {{ic|~/.config/spotify/prefs}} を開いて下さい。&lt;br /&gt;
 &lt;br /&gt;
@https を @http に変更してください:&lt;br /&gt;
&lt;br /&gt;
  network.proxy.addr=&amp;quot;your-proxy.com:80&amp;lt;strong&amp;gt;@http&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
  network.proxy.mode=2&lt;br /&gt;
&lt;br /&gt;
[http://community.spotify.com/t5/Help-Desktop-Linux-Mac-and/Mac-Windows-0-9-0-128-Apps-can-t-connect-anywhere-behind-proxy/m-p/448704#M52332] を参照。&lt;br /&gt;
&lt;br /&gt;
{{Note|1.0.17 現在、上記のように https を http に置き換えると全く接続できなくなることがあります。その場合、GUI では &#039;no proxy&#039; に設定してから {{Pkg|proxychains-ng}} で全ての TCP 接続を強制的にプロキシを通すようにする方法があります。}}&lt;br /&gt;
&lt;br /&gt;
=== Spotify でローカルネットワーク上の他のデバイスが検出されない ===&lt;br /&gt;
&lt;br /&gt;
ファイアウォールを使っている場合、UDP と TCP のポート 57621 を開いて下さい。[[iptables]] の[[シンプルなステートフルファイアウォール]]を使用している場合、以下で設定できます:&lt;br /&gt;
&lt;br /&gt;
 iptables -A TCP -p tcp --dport 57621 -j ACCEPT -m comment --comment spotify&lt;br /&gt;
 iptables -A UDP -p udp --dport 57621 -j ACCEPT -m comment --comment spotify&lt;br /&gt;
&lt;br /&gt;
ローカルネットワークの送信元と宛先を制限することもできます。&lt;br /&gt;
&lt;br /&gt;
Spotify Connect を使用してワイヤレススピーカーやオーディオビデオレコーダで音楽を再生する場合、ファイアウォールを設定して Spotify の mDNS ルックアップが通るようにする必要があります。ランダムな非特権ポートが使われるため [https://community.spotify.com/t5/Desktop-Linux-Windows-Web-Player/Spotify-Connect-and-iptables-netfilter/td-p/1235049]、ファイアウォールのルールは面倒なものになります。送信元ポート 1900 または 5353 を以下のように設定してください:&lt;br /&gt;
&lt;br /&gt;
 iptables -A UDP -p udp --sport 1900 --dport 1025:65535 -j ACCEPT -m comment --comment spotify&lt;br /&gt;
 iptables -A UDP -p udp --sport 5353 --dport 1025:65535 -j ACCEPT -m comment --comment spotify&lt;br /&gt;
&lt;br /&gt;
=== ダークテーマを使っている場合に検索バーのテキストが読めない ===&lt;br /&gt;
&lt;br /&gt;
検索バーのテキストは白色に決められているため、Qt のダークテーマを使っている場合見えなくなります。色を上書きすることで解決できます。&lt;br /&gt;
&lt;br /&gt;
まず (ホームフォルダなど) 読み書きができる場所に css ファイルを作成してください。名前は何でもかまいません (例: &#039;&#039;spotify-override.css&#039;&#039;)。&lt;br /&gt;
&lt;br /&gt;
作成した css ファイルを開いて以下を追加します:&lt;br /&gt;
&lt;br /&gt;
 QLineEdit { color: #000 }&lt;br /&gt;
&lt;br /&gt;
ファイルを保存して終了してください。次に、Spotify のランチャーの末尾に以下を追加します (css ファイルのパスは実際のパスに置き換えて下さい):&lt;br /&gt;
&lt;br /&gt;
 -stylesheet=/home/user/spotify-overide.css&lt;br /&gt;
&lt;br /&gt;
起動パスは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/spotify/spotify-client/spotify -stylesheet=/home/user/spotify-override.css&lt;br /&gt;
&lt;br /&gt;
=== ローカルファイルを再生できない ===&lt;br /&gt;
&lt;br /&gt;
ローカルファイルを再生しようとするとセグメンテーション違反や以下のようなエラーメッセージが発生する場合:&lt;br /&gt;
&lt;br /&gt;
 This song is not available. If you have the file on your computer you can import it.&lt;br /&gt;
&lt;br /&gt;
依存パッケージが欠けているのが原因です。PulseAudio を使っている場合、{{aur|ffmpeg-compat-54}} をインストールすることで解決します。インストール時に PGP の検証エラーが起こる場合は適切な PGP 鍵をインポートしてください:&lt;br /&gt;
&lt;br /&gt;
 $ gpg --keyserver pgp.mit.edu --recv-keys FCF986EA15E6E293A5644F10B4322F04D67658D8&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウマネージャのルールが反映されない ===&lt;br /&gt;
&lt;br /&gt;
特定のワークスペースで Spotify を起動したり、起動時に最大化するなどのルールをウィンドウマネージャで設定しても Spotify には反映されません。Spotify が ICCCM の仕様に違反しており、ウィンドウを作成する前に &#039;&#039;WM_CLASS&#039;&#039; プロパティを設定しないためです。[https://github.com/dasJ/spotifywm spotifywm] を使用することで解決できます。&lt;br /&gt;
&lt;br /&gt;
=== GUI の境界線がなくなり、cinnamon パネル上の画面全体を占有する ===&lt;br /&gt;
&lt;br /&gt;
ウィンドウの境界が消えてしまうという問題があって、アプリがフルスクリーンになっても、ウィンドウをドラッグしたり、シナモンのサイズを変更したりできない場合は、デフォルトでテキストファイル {{ic|/home/yourusername/.config/Spotify/Users/yourusername-user/prefs}} にある設定が原因かもしれません。&lt;br /&gt;
&lt;br /&gt;
 app.window.position.width=1366&lt;br /&gt;
 app.window.position.height=768&lt;br /&gt;
&lt;br /&gt;
おそらく、両方の解像度が &amp;quot;メイン&amp;quot; モニタの解像度以上の値に一致する場合、これは二つのモニタから一つのモニタだけに移ったときに起こる可能性があります。解決策として、 Spotify を閉じ、 {{ic|prefs}} ファイルを編集して上記の両方の設定を削除し、保存してから再度 Spotify を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== Wayland 環境で設定が開けない ===&lt;br /&gt;
&lt;br /&gt;
Wayland を使用している場合、&amp;quot;設定&amp;quot; ボタンをクリックしても何も起こりません。代わりにキーボードを使用すると機能します(矢印と enter)&lt;br /&gt;
&lt;br /&gt;
こちらも参照して下さい。[https://community.spotify.com/t5/Desktop-Linux/Settings-don-t-open-on-Linux/td-p/1478736]&lt;br /&gt;
&lt;br /&gt;
=== 起動時にクラッシュする ===&lt;br /&gt;
起動時にアプリケーションがクラッシュし、次のエラーメッセージが表示された場合&lt;br /&gt;
&lt;br /&gt;
 [NNN:FATAL:gpu_data_manager_impl_private.cc(439)] GPU process isn&#039;t usable. Goodbye&lt;br /&gt;
&lt;br /&gt;
{{ic|-no-zygote}} フラグを指定して {{ic|spotify}} を実行してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ローカルフォルダを追加すると Spotify がクラッシュする ===&lt;br /&gt;
Local Files オプション内の &#039;ソースを追加する&#039; ボタンが Spotify をクラッシュさせた時。使用可能な回避策はこちらを参照 [https://www.reddit.com/r/archlinux/comments/knyfpo/how_to_play_local_files_with_spotify/ this reddit post] または、 [[Flatpak]] バージョンをインストールすることもできます。&lt;br /&gt;
&lt;br /&gt;
=== /usr/lib/libcurl-gnutls.so.4 error ===&lt;br /&gt;
&lt;br /&gt;
エラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 spotify: /usr/lib/libcurl-gnutls.so.4: no version information available (required by spotify)&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.cache/spotify}} を削除します。&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
*[https://github.com/acrisci/playerctl playerctl] — メディアプレーヤーを操作するためのコマンドラインユーティリティ・ライブラリ&lt;br /&gt;
*[[SpotCommander]] — Spotify のウェブベースのリモートコントロール&lt;br /&gt;
*[https://www.spotify.com/jp/download/linux/ Spotify for Linux] — Spotify の Linux クライアントのホームページ&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=WeChat&amp;diff=40048</id>
		<title>WeChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=WeChat&amp;diff=40048"/>
		<updated>2025-03-24T03:27:18Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: 誤字の修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:インターネットアプリケーション]]&lt;br /&gt;
[[en:WeChat]]&lt;br /&gt;
[[zh-hans:WeChat]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Wine}}&lt;br /&gt;
{{Related|Deepin-wine}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
世界中で 10 億人以上をつなぐ WeChat は、iOS、Android、Windows、MacOS、Linux で利用可能な無料のメッセージングおよび通話アプリです。&lt;br /&gt;
&lt;br /&gt;
現在、WeChat は公式にいくつかのの Linux ディストリビューションに正式に対応しており(下記)、興味があれば他のディストリビューションでの互換状況をテストすることができます。&lt;br /&gt;
&lt;br /&gt;
ネイティブ版のインストールの他に、この記事では異なる要求に応じた様々な方法での WeChat のインストールについて紹介します。&lt;br /&gt;
&lt;br /&gt;
== ネイティブ Linux バージョン ==&lt;br /&gt;
&lt;br /&gt;
{{note|現時点で最も推奨される方法です。}}&lt;br /&gt;
&lt;br /&gt;
2024年3月、Tencent はクロスプラットフォームな WeChat (Universal) をリリースしました。Windows、Mac、Linux 版において機能と更新ペースの一致を段階的に実現することを目的としています。Tencent は公式に rpm、deb、appimage 形式でのパッケージを提供していますが、現在はまだリポジトリが実装されていないため、deb、rpm のユーザーはパッケージマネージャによる自動更新を利用できません。&lt;br /&gt;
&lt;br /&gt;
WeChat は {{AUR|wechat-bin}}にパッケージ化されており、また WeChat にいくつか修正を加えた {{AUR|wechat}}パッケージとしても提供されています。後者にはプロセス管理、サンドボックス(オプション)、インプットメソッド、HiDPI の修正といった機能が含まれます。また [[Flatpak]] を利用して Flathubから {{ic|com.tencent.WeChat}} をインストールすることもできます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-universal-bwrap}} は基本的なサンドボックス化パッケージを提供します。これは元々今は存在しない {{AUR|wechat-uos-qt}} に基づいており、{{AUR|wechat-bin}} に依存しません。[https://github.com/Kraftland/portable portable]ではなく[[bubblewrap]]サンドボックスを利用しており、D-Busフィルタリングなどの機能を持たず、&#039;&#039;&#039;サンドボックス脱出のリスクがあります&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
=== サンドボックス ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat}} はオプションで[https://github.com/Kraftland/portable portable]サンドボックスを有効化できます。タスクバーアイコンを右クリックしてサンドボックス設定の変更、サンドボックスへのファイル送信、WeChat の完全終了が行えます。サンドボックスに送信されたファイルは永続ではなく、アプリケーションを再起動すると削除されます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat}} のサンドボックスの正常動作には[[XDG デスクトップ ポータル]]が必要です。通常、デスクトップ環境(DE)を使用する際には特別な処理は必要ありませんが、ウィンドウマネージャのユーザーはドキュメントに従って自分で実装を選択する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-universal-bwrap}}は[[bubblewrap]]サンドボックスを使用し、{{ic|~/Documents/WeChat_Data/home}}をホームディレクトリとします。{{ic|~/.config/wechat-universal/binds.list}}を編集することで、更にコンテナに公開するファイルやディレクトリを一行一件ずつ設定することができます。WeChat ファイルのメインパスを{{ic|~/Documents/WeChat_Data}}以外のパスに変更するには、{{ic|WECHAT_DATA_DIR}}環境変数を設定して下さい。&lt;br /&gt;
&lt;br /&gt;
=== インプットメソッドと HiDPI ===&lt;br /&gt;
{{AUR|wechat}} は自動で環境変数を設定してこれらの問題を回避します。ユーザーは引き続き{{ic|XMODIFIERS}}変数を正しく設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 絵文字の表示 ===&lt;br /&gt;
{{AUR|ttf-twemoji}}をインストールし、{{AUR|wechat}}を1.0.0.241-27 以上のバージョンにアップデートして下さい。&lt;br /&gt;
&lt;br /&gt;
== 仮想マシン ==&lt;br /&gt;
&lt;br /&gt;
[[VMware]] や [[VirtualBox]] などの仮想マシンに Windows システムをインストールして、WeChat を使用することができます。&lt;br /&gt;
&lt;br /&gt;
== Wine ==&lt;br /&gt;
&lt;br /&gt;
{{note|現在、Wine ベースの WeChat のミニプログラム機能は利用できず、特定のサイズ以上の画像を送信することができません。詳細は [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 こちら] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
互換性レイヤー [[Wine]] を使用して Linux 内で WeChat を実行できます。&lt;br /&gt;
&lt;br /&gt;
さらに、{{AUR|deepin-wine-wechat}}（パッチなし）も提供されており、これは Arch 用に設定された Wine コンテナです。WeChat のバージョンは最新の公式バージョンです。&lt;br /&gt;
&lt;br /&gt;
==== archlinuxcn リポジトリから ====&lt;br /&gt;
&lt;br /&gt;
使用中に WeChat のシャドウウィンドウが他のウィンドウの上に表示される場合は、[[archlinuxcn]] リポジトリの &#039;&#039;wine-for-wechat&#039;&#039; を使用してみることができます。この Wine バージョンは、WeChat のシャドウウィンドウ用の [https://github.com/archlinuxcn/repo/blob/master/archlinuxcn/wine-for-wechat/wine-wechat.patch パッチ]を使用しています。&lt;br /&gt;
&lt;br /&gt;
さらに、&#039;&#039;wine-wechat-setup&#039;&#039; を使用して WeChat をインストール、実行、設定することを推奨します。WeChat インストーラーは手動でダウンロードする必要があります。&lt;br /&gt;
&lt;br /&gt;
==== Deepin-wine WeChat ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|com.qq.weixin.deepin}} パッケージをインストールするか、Spark Store から {{AUR|com.qq.weixin.spark}} をインストールします。Weixin Work のための他の deepin wine 関連パッケージとして {{AUR|com.qq.weixin.work.deepin-x11}} があります。詳細は [[Deepin-wine]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== コンテナで実行 ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/huan/docker-wechat docker-wechat] は [[Docker]] コンテナ内で WeChat wine アプリケーションを実行します。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
==== HiDpi 設定 ====&lt;br /&gt;
&lt;br /&gt;
高 dpi スクリーンでフォントが非常に小さい場合、wineのdpi設定を行います：&lt;br /&gt;
&lt;br /&gt;
# winecfg を開く。例として {{AUR|deepin-wine-wechat}} を使用し、{{ic|WINEPREFIX}} と {{ic|deepin-wine6-stable}} を適宜変更します：{{bc|1=$ WINEPREFIX=~/.deepinwine/Deepin-WeChat/ deepin-wine6-stable winecfg}}&lt;br /&gt;
# Graphics タブをクリックし、&#039;&#039;画面解像度&#039;&#039; を実際の dpi に変更します。&lt;br /&gt;
# WeChat を起動し、&#039;&#039;システムスケールに適応&#039;&#039; (設定--&amp;gt;通用設定--&amp;gt;适配系统缩放比例) を有効にします。&lt;br /&gt;
&lt;br /&gt;
== UOS用のElectronバージョン ==&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-uos}} は UOS 用の公式 electron を提供します。&lt;br /&gt;
&lt;br /&gt;
{{Note|元々の UOS パッケージは UOS プロフェッショナルでのみ実行されます。この環境を模倣するために、このパッケージは {{ic|os-release}} および {{ic|lsb-release}} を [[bubblewrap]] を通じて変更します。&lt;br /&gt;
このパッケージは機能が少なく、基本的には Web 版 WeChat の流用です。ネイティブ版を使用することを推奨します。}}&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=WeChat&amp;diff=40047</id>
		<title>WeChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=WeChat&amp;diff=40047"/>
		<updated>2025-03-24T03:26:05Z</updated>

		<summary type="html">&lt;p&gt;Sanlun: 中国語版に基づきLinux版の記述を拡充&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:インターネットアプリケーション]]&lt;br /&gt;
[[en:WeChat]]&lt;br /&gt;
[[zh-hans:WeChat]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Wine}}&lt;br /&gt;
{{Related|Deepin-wine}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
世界中で 10 億人以上をつなぐ WeChat は、iOS、Android、Windows、MacOS、Linux で利用可能な無料のメッセージングおよび通話アプリです。&lt;br /&gt;
&lt;br /&gt;
現在、WeChat は公式にいくつかのの Linux ディストリビューションに正式に対応しており(下記)、興味があれば他のディストリビューションでの互換状況をテストすることができます。&lt;br /&gt;
&lt;br /&gt;
ネイティブ版のインストールの他に、この記事では異なる要求に応じた様々な方法での WeChat のインストールについて紹介します。&lt;br /&gt;
&lt;br /&gt;
== ネイティブ Linux バージョン ==&lt;br /&gt;
&lt;br /&gt;
{{note|現時点で最も推奨される方法です。}}&lt;br /&gt;
&lt;br /&gt;
2024年3月、Tencent はクロスプラットフォームな WeChat (Universal) をリリースしました。Windows、Mac、Linux 版において機能と更新ペースの一致を段階的に実現することを目的としています。Tencent は公式に rpm、deb、appimage 形式でのパッケージを提供していますが、現在はまだリポジトリが実装されていないため、dep、rpm のユーザーはパッケージマネージャによる自動更新を利用できません。&lt;br /&gt;
&lt;br /&gt;
WeChat は {{AUR|wechat-bin}}にパッケージ化されており、また WeChat にいくつか修正を加えた {{AUR|wechat}}パッケージとしても提供されています。後者にはプロセス管理、サンドボックス(オプション)、インプットメソッド、HiDPI の修正といった機能が含まれます。また [[Flatpak]] を利用して Flathubから {{ic|com.tencent.WeChat}} をインストールすることもできます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-universal-bwrap}} は基本的なサンドボックス化パッケージを提供します。これは元々今は存在しない {{AUR|wechat-uos-qt}} に基づいており、{{AUR|wechat-bin}} に依存しません。[https://github.com/Kraftland/portable portable]ではなく[[bubblewrap]]サンドボックスを利用しており、D-Busフィルタリングなどの機能を持たず、&#039;&#039;&#039;サンドボックス脱出のリスクがあります&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
=== サンドボックス ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat}} はオプションで[https://github.com/Kraftland/portable portable]サンドボックスを有効化できます。タスクバーアイコンを右クリックしてサンドボックス設定の変更、サンドボックスへのファイル送信、WeChat の完全終了が行えます。サンドボックスに送信されたファイルは永続ではなく、アプリケーションを再起動すると削除されます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat}} のサンドボックスの正常動作には[[XDG デスクトップ ポータル]]が必要です。通常、デスクトップ環境(DE)を使用する際には特別な処理は必要ありませんが、ウィンドウマネージャのユーザーはドキュメントに従って自分で実装を選択する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-universal-bwrap}}は[[bubblewrap]]サンドボックスを使用し、{{ic|~/Documents/WeChat_Data/home}}をホームディレクトリとします。{{ic|~/.config/wechat-universal/binds.list}}を編集することで、更にコンテナに公開するファイルやディレクトリを一行一件ずつ設定することができます。WeChat ファイルのメインパスを{{ic|~/Documents/WeChat_Data}}以外のパスに変更するには、{{ic|WECHAT_DATA_DIR}}環境変数を設定して下さい。&lt;br /&gt;
&lt;br /&gt;
=== インプットメソッドと HiDPI ===&lt;br /&gt;
{{AUR|wechat}} は自動で環境変数を設定してこれらの問題を回避します。ユーザーは引き続き{{ic|XMODIFIERS}}変数を正しく設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 絵文字の表示 ===&lt;br /&gt;
{{AUR|ttf-twemoji}}をインストールし、{{AUR|wechat}}を1.0.0.241-27 以上のバージョンにアップデートして下さい。&lt;br /&gt;
&lt;br /&gt;
== 仮想マシン ==&lt;br /&gt;
&lt;br /&gt;
[[VMware]] や [[VirtualBox]] などの仮想マシンに Windows システムをインストールして、WeChat を使用することができます。&lt;br /&gt;
&lt;br /&gt;
== Wine ==&lt;br /&gt;
&lt;br /&gt;
{{note|現在、Wine ベースの WeChat のミニプログラム機能は利用できず、特定のサイズ以上の画像を送信することができません。詳細は [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 こちら] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
互換性レイヤー [[Wine]] を使用して Linux 内で WeChat を実行できます。&lt;br /&gt;
&lt;br /&gt;
さらに、{{AUR|deepin-wine-wechat}}（パッチなし）も提供されており、これは Arch 用に設定された Wine コンテナです。WeChat のバージョンは最新の公式バージョンです。&lt;br /&gt;
&lt;br /&gt;
==== archlinuxcn リポジトリから ====&lt;br /&gt;
&lt;br /&gt;
使用中に WeChat のシャドウウィンドウが他のウィンドウの上に表示される場合は、[[archlinuxcn]] リポジトリの &#039;&#039;wine-for-wechat&#039;&#039; を使用してみることができます。この Wine バージョンは、WeChat のシャドウウィンドウ用の [https://github.com/archlinuxcn/repo/blob/master/archlinuxcn/wine-for-wechat/wine-wechat.patch パッチ]を使用しています。&lt;br /&gt;
&lt;br /&gt;
さらに、&#039;&#039;wine-wechat-setup&#039;&#039; を使用して WeChat をインストール、実行、設定することを推奨します。WeChat インストーラーは手動でダウンロードする必要があります。&lt;br /&gt;
&lt;br /&gt;
==== Deepin-wine WeChat ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|com.qq.weixin.deepin}} パッケージをインストールするか、Spark Store から {{AUR|com.qq.weixin.spark}} をインストールします。Weixin Work のための他の deepin wine 関連パッケージとして {{AUR|com.qq.weixin.work.deepin-x11}} があります。詳細は [[Deepin-wine]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== コンテナで実行 ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/huan/docker-wechat docker-wechat] は [[Docker]] コンテナ内で WeChat wine アプリケーションを実行します。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
==== HiDpi 設定 ====&lt;br /&gt;
&lt;br /&gt;
高 dpi スクリーンでフォントが非常に小さい場合、wineのdpi設定を行います：&lt;br /&gt;
&lt;br /&gt;
# winecfg を開く。例として {{AUR|deepin-wine-wechat}} を使用し、{{ic|WINEPREFIX}} と {{ic|deepin-wine6-stable}} を適宜変更します：{{bc|1=$ WINEPREFIX=~/.deepinwine/Deepin-WeChat/ deepin-wine6-stable winecfg}}&lt;br /&gt;
# Graphics タブをクリックし、&#039;&#039;画面解像度&#039;&#039; を実際の dpi に変更します。&lt;br /&gt;
# WeChat を起動し、&#039;&#039;システムスケールに適応&#039;&#039; (設定--&amp;gt;通用設定--&amp;gt;适配系统缩放比例) を有効にします。&lt;br /&gt;
&lt;br /&gt;
== UOS用のElectronバージョン ==&lt;br /&gt;
&lt;br /&gt;
{{AUR|wechat-uos}} は UOS 用の公式 electron を提供します。&lt;br /&gt;
&lt;br /&gt;
{{Note|元々の UOS パッケージは UOS プロフェッショナルでのみ実行されます。この環境を模倣するために、このパッケージは {{ic|os-release}} および {{ic|lsb-release}} を [[bubblewrap]] を通じて変更します。&lt;br /&gt;
このパッケージは機能が少なく、基本的には Web 版 WeChat の流用です。ネイティブ版を使用することを推奨します。}}&lt;/div&gt;</summary>
		<author><name>Sanlun</name></author>
	</entry>
</feed>