およそMECEでないアカシックレコードの200那由多飛んで3万分の1
https://blog.eniehack.net/
Nakaya
https://blog.eniehack.net/
Hugo gohugo.io
2020 eniehack.
Assets and articles not otherwise specified are licensed under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
Source code is licensed under by <a href="https://apache.org/licenses/LICENSE-2.0.txt">Apache-2.0</a>.
2024-03-16T09:04:42Z
xfce4 ではデフォルトで ssh-agent を自動起動するらしい
https://blog.eniehack.net/articles/2023/03/13/autostart-ssh-agent-on-xfce4/
2023-03-13T04:54:15Z
2023-03-13T04:57:37Z
<h2 id="tl-dr">TL;DR</h2>
<p>xfce4 では、デフォルトで ssh-agent を自動起動する設定になっているので、設定エディタや Terminal から無効化する必要がある。
Terminal から実行する場合は以下のように実行する:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
</code></pre></div><h2 id="経緯">経緯</h2>
<p>最近は gpg に日常を大きく依存する日々を送っている。というのも、pgp 鍵はかなり便利であるからだ。</p>
<p>例えば以下のものが挙げられる:</p>
<ul>
<li>password manager の <a href="https://www.passwordstore.org/">pass</a> で master password として使う</li>
<li>副鍵に Authentication の権限を持たせて SSH 鍵として使う</li>
<li>pgp 鍵の notation 機能を使って <a href="https://keyoxide.org/">Keyoxide</a> で keybase もどきをする</li>
</ul>
<h2 id="本題">本題</h2>
<p>これほど gpg に頼って生活を送っていると、毎回 gpg のパスワードを入力するのがバカらしくなってくる。</p>
<p>ここで、Linux 環境の gpg に備えられている gpg-agent が登場する。これを使えば、ssh-agent のように SSH でサーバにアクセスする際、鍵の passphrase を要求される回数が大きく減ってうれしい。</p>
<p>しかし、ここ数日、ArtixLinux の FS が壊れたので、 PC に ArchLinux をインストールして、久々の xfce4 を楽しんでいた。</p>
<p>もちろん、gpg-agent は QoL に関わる大事なものなのでセットアップを試みようとするも、立ち上げた記憶のない ssh-agent が毎ログインのたびに起動してくる。</p>
<p>悪く言えば ssh-agent をジャックする gpg-agent は、ssh-agent が後に起動してしまうと、例え gpg-agent が立ち上がったとしても利用することができない。</p>
<p>このままだとつらいね、ということで、数日間悪戦苦闘して直したので、数日の供養として、解決しなかった手法、した手法をそれぞれ述べていこうと思う。</p>
<h2 id="この記事の対象">この記事の対象</h2>
<p>signin するだけで gnome-keyring の Default keyring が開く、であったり、signin すると pgp 鍵が開く、といった gnome-keyring と gpg-agent の環境構築は、対象としない。これに関しては ArchWiki の <a href="https://wiki.archlinux.org/title/GNOME/Keyring">gnome-keyring</a> と <a href="https://wiki.archlinux.org/title/GnuPG#gpg-agent">gpg</a> のページを見るほうが手っ取り早い。</p>
<p>代わりに、この記事は、xfce4 において、勝手に ssh-agent が起動されてしまう問題の解決を提示する。</p>
<h2 id="解決しなかった">解決しなかった</h2>
<h3 id="systemd-の-environment-dot-d-を使う">systemd の environment.d を使う</h3>
<p>ユーザのログイン時に systemd が参照する環境変数は.bashrc や.xinitrc と独立であるらしい。その環境変数をユーザが操作するには、 <code>~/.config/environment.d/*.conf</code> を編集すればよいらしく<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>、実際に <code>.xinitrc</code> などの概念がない Wayland では利用されているらしい<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。</p>
<p>しかし、この手法では、解決しなかった。どうやら、このファイルには shellscript における <code>unset</code> が用意されておらず、構文エラーとなってしまった。</p>
<h3 id="systemd-の-environment-generator-を使う">systemd の environment generator を使う</h3>
<p>また、systemd には、先程の environment.d のファイルを生成するための機構がある <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>。ユーザごとの環境変数であれば、 <code>/etc/systemd/user-environment-generators/</code> にプログラムを格納し、標準出力で environment.d 形式の要素を吐ければよいらしい。これは、言語は問われないので、shellscript である必要は全然なく、Python などで書いても問題ないらしい。</p>
<p>こちらも解決はしなかった。そもそも、こちらにも shellscript における <code>unset</code> が用意されていないようだ。</p>
<h3 id="gnome-keyring-などの-systemd-user-unit-を無効化する">gnome-keyring などの systemd user unit を無効化する</h3>
<p>確かに <code>gcr-ssh-agent.service</code> は無効化する意味があるのだが<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>、他の service ファイルや socket ファイルを無効化したところで ssh-agent を起動するものはないので、無効化したところで解決しないことは自明であった……。</p>
<h2 id="解決した">解決した</h2>
<p>なんと、xfce4 では ssh-agent と gpg-agent を自動起動する機能があるらしい<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>。なので、ssh-agent を無効化する:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
</code></pre></div><p>ssh-agent を無効化するだけも問題ないのだが、私としては、gnome-keyring を使って gpg-agent を管理したいので、gpg-agent も無効化しておく:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/gpg-agent/enabled -n -t bool -s false
</code></pre></div><p>これを実行してから、ArchWiki の gpg と gnome-keyring のページにある記述を順番にこなせば、gpg-agent は動作するようになるハズである。</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://man.archlinux.org/man/environment.d.5">https://man.archlinux.org/man/environment.d.5</a> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p><a href="https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8">https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8</a> <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p><a href="https://man.archlinux.org/man/systemd.environment-generator.7">https://man.archlinux.org/man/systemd.environment-generator.7</a> <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p><a href="https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B">https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B</a> <a href="#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:5" role="doc-endnote">
<p><a href="https://docs.xfce.org/xfce/xfce4-session/advanced">https://docs.xfce.org/xfce/xfce4-session/advanced</a> <a href="#fnref:5" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</section>