<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>/home/amgsk</title><link>https://amgsk.dev/</link><description>Recent content on /home/amgsk</description><generator>Hugo</generator><language>ja-JP</language><lastBuildDate>Thu, 12 Mar 2026 07:30:56 +0900</lastBuildDate><atom:link href="https://amgsk.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>TrackballをHyprlandでより快適に使う（追記あり）</title><link>https://amgsk.dev/posts/trackball-awesome-config/</link><pubDate>Thu, 12 Mar 2026 07:30:56 +0900</pubDate><guid>https://amgsk.dev/posts/trackball-awesome-config/</guid><description>&lt;p>Kensington SlimBlade Proを例に、Hyprlandとinput-remapperを使用してトラックボールの加速度やスクロール設定をカスタマイズする方法を紹介。&lt;/p>
&lt;p>トラックボールは加速をONにして加速度をカスタムに設定することで、より快適な操作感を得ることができる（と思っている）&lt;br>
以下のようにHyprlandの設定ファイル&lt;code>hyprland.conf&lt;/code>にトラックボールの加速度や感度、スクロール設定を記述する。&lt;/p>
&lt;p>ケンジントン公式のデバイスドライバでは、ボタン同時押しの設定が可能だが、当然Linuxでは利用できない。&lt;br>
そのため&lt;code>input-remapper&lt;/code>を使用して、複数ボタン同時押しの操作を実現している。&lt;/p>
&lt;p>config例の重要なポイント&lt;/p>
&lt;ul>
&lt;li>加速度のプロファイルをカスタムに設定し、加速度のカーブを細かく調整することで、トラックボールの動きがより自然になるようにしている&lt;/li>
&lt;li>スクロール方法を&lt;code>on_button_down&lt;/code>に設定し、スクロールボタンを指定。トラックボールの特定のボタンを押しながら動かすことでスクロールができるようになる&lt;/li>
&lt;li>&lt;code>input-remapper&lt;/code>を利用する場合、デバイス名が仮想デバイスのものになるため、Hyprlandの設定ファイルでは仮想デバイスの名前を指定する必要がある&lt;/li>
&lt;li>&lt;code>input-remapper&lt;/code>が使用できない状況のために、フォールバックとして通常のデバイス名での設定も記述している&lt;/li>
&lt;/ul>
&lt;h2 id="hyprlandの設定例">Hyprlandの設定例&lt;/h2>
&lt;p>&lt;code>name&lt;/code>は実際のデバイス名に合わせて適宜変更する必要がある。&lt;br>
&lt;code>hyprctrl devices&lt;/code>コマンドでデバイス名を確認できる。&lt;/p>
&lt;div>&lt;div class="codeblock--name">hyprland.conf&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># Kensington SlimBlade Pro Trackball&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># 冗長がやむを得ないので、最低限 加速度/感度/スクロール設定を変数にまとめている&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">$tb_accel&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> custom 1.5 0.0 0.5 1.0 2.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">$tb_sens&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> -0.2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">$tb_scroll_factor&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> 0.4
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">$tb_scroll_button&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#a5d6ff">276&lt;/span> &lt;span style="color:#8b949e;font-style:italic"># btn:extra (physical middle via evsieve)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># こっちはinput remapperが使用できない場合の通常のデバイス指定&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>device &lt;span style="color:#ff7b72;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">name&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> kensington-slimblade-pro&lt;span style="color:#ff7b72;font-weight:bold">(&lt;/span>2.4ghz-receiver&lt;span style="color:#ff7b72;font-weight:bold">)&lt;/span>-kensington-slimblade-pro-trackball&lt;span style="color:#ff7b72;font-weight:bold">(&lt;/span>2.4ghz-receiver&lt;span style="color:#ff7b72;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">accel_profile&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_accel&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">sensitivity&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_sens&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">natural_scroll&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> false
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_method&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> on_button_down
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_button&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_scroll_button&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_factor&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_scroll_factor&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># こっちはinput remapperによって作成された仮想デバイスの指定&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>device &lt;span style="color:#ff7b72;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">name&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> input-remapper-kensington-slimblade-pro&lt;span style="color:#ff7b72;font-weight:bold">(&lt;/span>2.4ghz-receiver&lt;span style="color:#ff7b72;font-weight:bold">)&lt;/span>-kensington-sl-forwarde
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">accel_profile&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_accel&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">sensitivity&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_sens&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">natural_scroll&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> false
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_method&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> on_button_down
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_button&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_scroll_button&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">scroll_factor&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#79c0ff">$tb_scroll_factor&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72;font-weight:bold">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="input-remapperの自動起動とプリセットのロード">input-remapperの自動起動とプリセットのロード&lt;/h2>
&lt;p>Hyprlandの起動時にinput-remapperを自動で起動し、設定済みのプリセットをロードするには、&lt;code>hyprland.conf&lt;/code>に以下を追記する。&lt;/p></description></item><item><title>Hyprlandでアプリをトグルする</title><link>https://amgsk.dev/posts/hyprland-toggle-app/</link><pubDate>Thu, 12 Mar 2026 05:24:19 +0900</pubDate><guid>https://amgsk.dev/posts/hyprland-toggle-app/</guid><description>&lt;p>シングルインスタンスのアプリをトグルするスクリプト。以下の挙動を実現するもの。&lt;/p>
&lt;ul>
&lt;li>アプリが起動して無ければ起動&lt;/li>
&lt;li>アプリが起動していてフォーカスされていなければフォーカス&lt;/li>
&lt;li>アプリが起動していてフォーカスされていれば閉じる&lt;/li>
&lt;/ul>
&lt;p>&lt;code>~/bin/toggle-app.sh&lt;/code>に保存し、実行権限を付与する。&lt;/p>
&lt;div>&lt;div class="codeblock--name">~/bin/toggle-app.sh&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">&lt;/span>&lt;span style="color:#8b949e;font-style:italic"># Usage: toggle-app.sh &amp;lt;window-class&amp;gt; [launch-command]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># window-class: class name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># launch-command: command&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">class&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$1&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">cmd&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#a5d6ff">${&lt;/span>&lt;span style="color:#79c0ff">2&lt;/span>&lt;span style="color:#ff7b72">:-&lt;/span>&lt;span style="color:#a5d6ff">${&lt;/span>&lt;span style="color:#79c0ff">class&lt;/span>,,&lt;span style="color:#a5d6ff">}}&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">if&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">[&lt;/span> -z &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$class&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">]&lt;/span>; &lt;span style="color:#ff7b72">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo &lt;span style="color:#a5d6ff">&amp;#34;Usage: &lt;/span>&lt;span style="color:#ff7b72">$(&lt;/span>basename &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$0&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#ff7b72">)&lt;/span>&lt;span style="color:#a5d6ff"> &amp;lt;window-class&amp;gt; [launch-command]&amp;#34;&lt;/span> &amp;gt;&amp;amp;&lt;span style="color:#a5d6ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> exit &lt;span style="color:#a5d6ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">focused&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#ff7b72">$(&lt;/span>hyprctl activewindow | grep -qi &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$class&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> echo yes&lt;span style="color:#ff7b72">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">running&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#ff7b72">$(&lt;/span>hyprctl clients | grep -qi &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$class&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> echo yes&lt;span style="color:#ff7b72">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">if&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">[&lt;/span> &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$focused&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#a5d6ff">&amp;#34;yes&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">]&lt;/span>; &lt;span style="color:#ff7b72">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> hyprctl dispatch closewindow &lt;span style="color:#a5d6ff">&amp;#34;class:&lt;/span>&lt;span style="color:#79c0ff">$class&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">elif&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">[&lt;/span> &lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>&lt;span style="color:#79c0ff">$running&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#a5d6ff">&amp;#34;yes&amp;#34;&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">]&lt;/span>; &lt;span style="color:#ff7b72">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> hyprctl dispatch focuswindow &lt;span style="color:#a5d6ff">&amp;#34;class:&lt;/span>&lt;span style="color:#79c0ff">$class&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">$cmd&lt;/span> &amp;amp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">fi&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>使い方はこう。&lt;/p></description></item><item><title>Proton環境で動かしているArknights: EndfieldにModsを適用する方法</title><link>https://amgsk.dev/posts/endfield-mods-proton/</link><pubDate>Sun, 08 Mar 2026 10:41:31 +0900</pubDate><guid>https://amgsk.dev/posts/endfield-mods-proton/</guid><description>&lt;p>Arknights: EndfieldはSteam外のゲーム（GRYPHLINKランチャー配布）だが、Proton経由でLinux上で動作する。&lt;br>
Windows環境では、3DMigotoというD3D11プロキシDLLをゲームフォルダに配置する方式でEndfieldのモデルやテクスチャを改変するmodが存在する。&lt;br>
しかし、Proton環境ではこの方式が機能しないようだった。
&lt;code>d3d11.dll&lt;/code>を先にロードしてしまい、&lt;code>Unknown error (d3d11.dll)&lt;/code> エラーが発生してゲームが起動できなかった。&lt;/p>
&lt;p>これを解決するためにXXMI Launcherを使用する。&lt;br>
実行時にEndfield.exeプロセスを検知して自動的にDLLインジェクションを行う事ができ、Linux環境でも動作する。&lt;/p>
&lt;h2 id="環境">環境&lt;/h2>
&lt;ul>
&lt;li>OS: Arch Linux (kernel 6.19.6-zen1-1-zen)&lt;/li>
&lt;li>Proton: GE-Proton10-32 (&lt;code>Proton-GE Latest&lt;/code>)&lt;/li>
&lt;li>シェル: fish（任意）&lt;/li>
&lt;/ul>
&lt;h2 id="手順">手順&lt;/h2>
&lt;h3 id="1-proton環境のゲームフォルダを確認">1. Proton環境のゲームフォルダを確認&lt;/h3>
&lt;p>Proton環境では、ゲームの仮想Windowsファイルシステムは&lt;code>compatdata&lt;/code>以下にある。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;pre tabindex="0">&lt;code>~/.local/share/Steam/steamapps/compatdata/&amp;lt;App ID&amp;gt;/pfx/drive_c/&lt;/code>&lt;/pre>
 &lt;/div>
&lt;/div>
&lt;p>私の環境ではEndfieldのApp IDは&lt;code>2514955766&lt;/code>だった。ゲーム本体のパスは以下の通り。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;pre tabindex="0">&lt;code>~/.local/share/Steam/steamapps/compatdata/2514955766/pfx/drive_c/Program Files/GRYPHLINK/games/EndField Game/&lt;/code>&lt;/pre>
 &lt;/div>
&lt;/div>
&lt;p>Windowsパスとの対応は &lt;code>C:\&lt;/code> → &lt;code>pfx/drive_c/&lt;/code> に読み替えるだけ。&lt;/p>
&lt;h3 id="2-使用中のprotonバージョンを確認">2. 使用中のProtonバージョンを確認&lt;/h3>
&lt;p>XXMI Launcherはゲームと &lt;strong>同じProtonバージョン・同じWineプレフィクス&lt;/strong> で起動する必要があるみたい。&lt;/p>
&lt;div>&lt;div class="codeblock--name">Protonバージョンの確認&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cat ~/.local/share/Steam/steamapps/compatdata/2514955766/version&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>出力例: &lt;code>GE-Proton10-32&lt;/code>&lt;/p>
&lt;p>対応するProtonのパスを確認：&lt;/p>
&lt;div>&lt;div class="codeblock--name">Protonのパス確認&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ls ~/.local/share/Steam/compatibilitytools.d/&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>今回は &lt;code>Proton-GE Latest&lt;/code> が &lt;code>GE-Proton10-32&lt;/code> に対応していた。&lt;/p>
&lt;h3 id="3-xxmi-launcherのダウンロードと配置">3. XXMI Launcherのダウンロードと配置&lt;/h3>
&lt;p>ポータブル版をダウンロードし、&lt;strong>ゲームと同じWineプレフィクス内&lt;/strong>に展開する。&lt;/p></description></item><item><title>Arknights: EndfieldをProtonで動かす方法</title><link>https://amgsk.dev/posts/endfield-on-proton/</link><pubDate>Sun, 08 Mar 2026 09:02:47 +0900</pubDate><guid>https://amgsk.dev/posts/endfield-on-proton/</guid><description>&lt;p>Arknights: EndfieldはSteamで配信されていないが、SteamのProton互換レイヤーを使ってLinux上で動作させることができる。
GRYPHLINKランチャー経由でインストールしたWindows版を、Steamに非Steamゲームとして追加して起動する方法をまとめる。&lt;/p>
&lt;h2 id="環境">環境&lt;/h2>
&lt;ul>
&lt;li>OS: Arch Linux (kernel 6.19.6-zen1-1-zen)&lt;/li>
&lt;li>Proton: GE-Proton（&lt;code>Proton-GE Latest&lt;/code>）&lt;/li>
&lt;/ul>
&lt;h2 id="前提">前提&lt;/h2>
&lt;p>GRYPHLINKランチャーはWindows用アプリケーションなので、まずWindows環境でEndfield本体をインストールしておく必要がある。
インストール済みのゲームフォルダをLinux側にコピーするか、別途Wineで直接インストールする。&lt;/p>
&lt;h2 id="手順">手順&lt;/h2>
&lt;h3 id="1-gryphlinkランチャーをsteamに追加する">1. GRYPHLINKランチャーをSteamに追加する&lt;/h3>
&lt;p>Steamクライアントを開き、左下の「ゲームを追加」から「非Steamゲームを追加」を選択する。
「参照」からGRYPHLINKランチャーの実行ファイル（&lt;code>GRYPHLINK_vX.X.X.XXXX_X_X_endfield.exe&lt;/code>）を指定して追加する。&lt;/p>
&lt;p>&lt;img src="./images/add_non_steam.png"
 alt="非Steamゲームを追加する" width="500"loading="lazy">
&lt;/p>
&lt;h3 id="2-proton互換性を設定する">2. Proton互換性を設定する&lt;/h3>
&lt;p>追加したゲームのプロパティを開き、「互換性」タブで「特定のSteam Play互換ツールの使用を強制する」にチェックを入れる。
Protonのバージョンは &lt;code>Proton-GE Latest&lt;/code>（GE-Proton）を推奨する。Valve公式のProtonでは動作しない場合がある。&lt;/p>
&lt;p>&lt;img src="./images/compatibility.png"
 alt="互換性" width="500"loading="lazy">
&lt;/p>
&lt;h3 id="3-ランチャーを起動してインストールする">3. ランチャーを起動してインストールする&lt;/h3>
&lt;p>Steamライブラリから追加したGRYPHLINKランチャーを起動する。
GRYPHLINKランチャーが起動したら、画面の指示に従ってインストールするだけ。&lt;/p>
&lt;h3 id="4-インストールされたゲームをsteamに追加して起動する">4. インストールされたゲームをSteamに追加して起動する&lt;/h3>
&lt;p>Proton環境のパスは &lt;code>~/.local/share/Steam/steamapps/compatdata/&amp;lt;App ID&amp;gt;/pfx/drive_c/&lt;/code> にマッピングされる。
GRYPHLINKランチャーでインストールしたEndfieldの実行ファイル（&lt;code>Endfield.exe&lt;/code>）をSteamの非Steamゲームとして追加する。
追加したら、同様にProton互換性を設定して起動する。&lt;/p>
&lt;h2 id="補足">補足&lt;/h2>
&lt;p>Proton環境でのModの適用方法については以下の記事を参照。&lt;/p>
 &lt;a href="https://amgsk.dev/posts/endfield-mods-proton/" class="linkcard">
 &lt;div class="linkcard-content">
 &lt;div class="linkcard-title">/home/amgsk | Proton環境で動かしているArknights: EndfieldにModsを適用する方法&lt;/div>
 &lt;ul class="linkcard-summary">
 &lt;li>XXMI Launcherを使って、Proton環境で動かしているArknights: EndfieldにModsを適用出来る&lt;/li>
 &lt;/ul>
 &lt;div class="linkcard-meta">
 2026/03/08
 &lt;/div>
 &lt;/div>
&lt;/a>
&lt;p>普通に遊ぶことは出来るんだけど、1時間もするとGPUのメモリが枯渇して異常に重くなることがある。
ゲームを再起動すればまたしばらくは快適に遊べる。&lt;/p>
&lt;p>EOF&lt;/p></description></item><item><title>Hyprlandで役に立つウィンドウルール</title><link>https://amgsk.dev/posts/hyprland-rules/</link><pubDate>Sun, 01 Mar 2026 18:22:16 +0900</pubDate><guid>https://amgsk.dev/posts/hyprland-rules/</guid><description>&lt;p>Hyprlandはユーザーがウィンドウの挙動を細かく制御できる「ウィンドウルール」機能がある。&lt;br>
実際に役立つルールの例をいくつか紹介。&lt;/p>
&lt;h2 id="フローティング">フローティング&lt;/h2>
&lt;p>よく使うユーティリティ系のアプリは &lt;code>float on&lt;/code> で常にフローティングにしておくと使い勝手がいい。&lt;/p>
&lt;div>&lt;div class="codeblock--name">rules.conf&lt;/div>
 &lt;div class="codeblock--content">&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">windowrule = match:class guifetch, float on
windowrule = match:class yad, float on
windowrule = match:class zenity, float on
windowrule = match:class blueman-manager, float on
windowrule = match:class feh, float on
windowrule = match:class imv, float on
windowrule = match:class org.gnome.Loupe, float on&lt;/code>&lt;/pre>
 &lt;/div>
&lt;/div>
&lt;h2 id="フローティング--サイズ調整--センタリング">フローティング + サイズ調整 + センタリング&lt;/h2>
&lt;p>ダイアログ系のアプリはフローティングにするだけでなく、サイズと位置も合わせて指定するとキレイに表示できる。&lt;/p>
&lt;div>&lt;div class="codeblock--name">rules.conf&lt;/div>
 &lt;div class="codeblock--content">&lt;pre tabindex="0">&lt;code class="language-conf" data-lang="conf">windowrule = match:class foot match:title:nmtui, float on
windowrule = match:class foot match:title:nmtui, size 60% 70%
windowrule = match:class foot match:title:nmtui, center 1

windowrule = match:class org.gnome.Settings, float on
windowrule = match:class org.gnome.Settings, size 70% 80%
windowrule = match:class org.gnome.Settings, center 1

windowrule = match:class org.pulseaudio.pavucontrol, float on
windowrule = match:class org.pulseaudio.pavucontrol, size 60% 70%
windowrule = match:class org.pulseaudio.pavucontrol, center 1&lt;/code>&lt;/pre>
 &lt;/div>
&lt;/div>
&lt;h2 id="ダイアログをタイトルで自動フローティング">ダイアログをタイトルで自動フローティング&lt;/h2>
&lt;p>ファイル選択ダイアログや保存ダイアログなどは、クラス名ではなくタイトルのパターンでマッチさせると幅広く対応できる。&lt;/p></description></item><item><title>小ネタ HyprlandでObsidianのトレイ格納をトグルする</title><link>https://amgsk.dev/posts/obsidian-toggle-on-hyprland/</link><pubDate>Mon, 16 Feb 2026 00:18:33 +0900</pubDate><guid>https://amgsk.dev/posts/obsidian-toggle-on-hyprland/</guid><description>&lt;p>HyprlandでObsidianのトレイアイコンをトグルする方法を紹介。&lt;/p>
&lt;h2 id="環境">環境&lt;/h2>
&lt;ul>
&lt;li>Arch Linux 6.18.9-zen1-2-zen&lt;/li>
&lt;li>Hyprland 0.53.3&lt;/li>
&lt;li>Obsidian 1.11.7&lt;/li>
&lt;li>Obsidian Tray Fork &lt;a href="https://github.com/DozyDolphin/obsidian-tray">🔗GitHub&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="手順">手順&lt;/h2>
&lt;p>まずは普通にObsidian Trayをインストールする。&lt;br>
そして、Obsidian TrayのFork版のリポジトリを参照し、valut内の&lt;code>.obsidian/plugins/tray/main.js&lt;/code>をFork版のものに置き換えてObsidianを再起動。&lt;/p>
&lt;p>Obsidian TrayのFork版には、以下のようなURLスキームが用意されており、Hyprlandのexecで簡単にトグルができる。&lt;/p>
&lt;image src="./images/shortcut-uris.png" alt="Shortcut URIs" width="300">
&lt;p>obsidian-trayの設定画面のショートカットは何だって良いと思う。&lt;br>
今回はトグルしたいので、Hyprlandのキーバインド設定で以下のような設定を仕込んだ。&lt;/p>
&lt;div>&lt;div class="codeblock--name">hyprland.conf&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>bind &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> Ctrl+Shift, Q, exec, xdg-open &lt;span style="color:#a5d6ff">&amp;#34;obsidian://tray?cmd=toggle&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>挙動としてはめっちゃ望ましい感じになった。満足。&lt;/p>
&lt;ul>
&lt;li>ウィンドウが生成されていないとき
&lt;ul>
&lt;li>アクティブになる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ウィンドウが生成されていて、かつ 現在アクティブなウィンドウのとき
&lt;ul>
&lt;li>ウィンドウが閉じる（理想通りのtoggle）&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ウィンドウが生成されているものの、現在アクティブなウィンドウではないとき
&lt;ul>
&lt;li>ウィンドウがアクティブになる&lt;/li>
&lt;li>ワークスペースが別の場合は、obsidianが存在するワークスペースに切り替わる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>つまりウィンドウがアクティブではないときに、ウィンドウがアクティブになる挙動があるのがとても良い感じ。&lt;/p>
&lt;p>EOF&lt;/p></description></item><item><title>Linuxに音声入力を導入する</title><link>https://amgsk.dev/posts/hyprwhspr-voice-input/</link><pubDate>Sat, 14 Feb 2026 11:20:00 +0900</pubDate><guid>https://amgsk.dev/posts/hyprwhspr-voice-input/</guid><description>&lt;p>Linuxで音声入力したいですよね。&lt;br>
今回紹介するのは、Wayland環境向けのローカル音声入力ツールの&lt;a href="https://github.com/goodroot/hyprwhspr">hyprwhspr&lt;/a>。&lt;/p>
&lt;p>OpenAIのWhisperをベースにした高精度な音声認識をローカルで実行するため、プライバシーを保ちながらシステム全体で音声入力が使える。&lt;/p>
&lt;h2 id="hyprwhsprの特徴">hyprwhsprの特徴&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>ローカル処理&lt;/strong> &amp;hellip; モデルをメモリ上に保持し、外部サーバへの送信なしに音声認識を実行する&lt;/li>
&lt;li>&lt;strong>複数バックエンド対応&lt;/strong> &amp;hellip; Parakeet TDT V3、pywhispercpp、REST API、リアルタイムWebSocketなど&lt;/li>
&lt;li>&lt;strong>GPU自動検出&lt;/strong> &amp;hellip; NVIDIA（CUDA）、AMD（ROCm）、Vulkanを自動検出してアクセラレーション&lt;/li>
&lt;li>&lt;strong>CPUのみでも動作&lt;/strong> &amp;hellip; ONNX-ASRバックエンドによりGPUなしでも利用可能&lt;/li>
&lt;li>&lt;strong>音声ビジュアライザ&lt;/strong> &amp;hellip; GTK4ベースのテーマ対応ビジュアライザで録音状態を表示&lt;/li>
&lt;li>&lt;strong>オーディオダッキング&lt;/strong> &amp;hellip; 録音中にシステム音量を自動で下げる&lt;/li>
&lt;li>&lt;strong>Waybar連携&lt;/strong> &amp;hellip; ステータスバーに録音状態を表示&lt;/li>
&lt;/ul>
&lt;h2 id="動作要件">動作要件&lt;/h2>
&lt;ul>
&lt;li>Linux + Wayland（Hyprland、Sway、GNOME、KDE Plasma Wayland）&lt;/li>
&lt;li>Python3 + pip(venvの環境が作られる)&lt;/li>
&lt;li>ydotool 1.0+（キーボード入力の自動化）&lt;/li>
&lt;li>wl-clipboard（Waylandクリップボード）&lt;/li>
&lt;li>GTK4（ビジュアライザ）&lt;/li>
&lt;li>PipeWireまたはPulseAudio&lt;/li>
&lt;/ul>
&lt;h2 id="インストール">インストール&lt;/h2>
&lt;h3 id="arch-linuxaur">Arch Linux（AUR）&lt;/h3>
&lt;p>AURにパッケージが用意されているので、AURヘルパーでインストールできる。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>yay -S hyprwhspr&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="セットアップ">セットアップ&lt;/h2>
&lt;p>インストール後、対話式のセットアップウィザードを実行する。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>hyprwhspr setup&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>ウィザードでは以下の設定を順に行う。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>音声認識バックエンドの選択&lt;/strong> &amp;hellip; Parakeet TDT V3やWhisperなど、使用するモデルを選ぶ&lt;/li>
&lt;li>&lt;strong>モデルのダウンロード&lt;/strong> &amp;hellip; 選択したバックエンドに応じたモデルをダウンロード&lt;/li>
&lt;li>&lt;strong>ビジュアライザのテーマ設定&lt;/strong> &amp;hellip; 録音中に表示されるビジュアライザの見た目を設定&lt;/li>
&lt;li>&lt;strong>Waybar連携の設定&lt;/strong> &amp;hellip; Waybarを使っている場合、ステータス表示を設定&lt;/li>
&lt;li>&lt;strong>systemdサービスの登録&lt;/strong> &amp;hellip; ユーザサービスとして自動起動を設定&lt;/li>
&lt;li>&lt;strong>パーミッションの設定&lt;/strong> &amp;hellip; ydotoolの実行に必要な権限を付与&lt;/li>
&lt;li>&lt;strong>インストールの検証&lt;/strong> &amp;hellip; 設定が正しいことを確認&lt;/li>
&lt;/ol>
&lt;p>セットアップ完了後、&lt;strong>ログアウト→ログイン&lt;/strong>が必要。グループ権限の変更を反映させるため。&lt;/p></description></item><item><title>hyprwhspr 日本語音声入力セットアップの躓き</title><link>https://amgsk.dev/posts/hyprwhspr-setup/</link><pubDate>Sat, 14 Feb 2026 11:00:48 +0900</pubDate><guid>https://amgsk.dev/posts/hyprwhspr-setup/</guid><description>&lt;h2 id="問題">問題&lt;/h2>
&lt;p>音声の録音はできているが、認識結果が出力されない&lt;/p>
&lt;h2 id="原因">原因&lt;/h2>
&lt;ul>
&lt;li>バックエンドが &lt;code>onnx-asr&lt;/code>（&lt;code>nemo-parakeet-tdt-0.6b-v3&lt;/code>）に設定されていた&lt;/li>
&lt;li>このモデルは英語専用のため、日本語音声を認識できなかった&lt;/li>
&lt;li>ログ上 &lt;code>Transcription completed in 0.00s&lt;/code> と表示され、実質何も処理されていなかった&lt;/li>
&lt;/ul>
&lt;h2 id="対応内容">対応内容&lt;/h2>
&lt;h3 id="1-バックエンドを-pywhispercpp-に変更">1. バックエンドを pywhispercpp に変更&lt;/h3>
&lt;p>&lt;code>~/.config/hyprwhspr/config.json&lt;/code> を編集:&lt;/p>
&lt;ul>
&lt;li>&lt;code>transcription_backend&lt;/code>: &lt;code>onnx-asr&lt;/code> → &lt;code>pywhispercpp&lt;/code>&lt;/li>
&lt;li>&lt;code>language&lt;/code>: &lt;code>ja&lt;/code> を追加&lt;/li>
&lt;li>既にインストール済みの &lt;code>ggml-base.bin&lt;/code>（多言語Whisperモデル）を使用&lt;/li>
&lt;/ul>
&lt;h3 id="2-small-モデルをダウンロード">2. small モデルをダウンロード&lt;/h3>
&lt;p>精度向上のため base → small に変更:&lt;/p>
&lt;div>&lt;div class="codeblock--name">モデルをダウンロードする&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>hyprwhspr model download small&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>&lt;code>config.json&lt;/code> に &lt;code>&amp;quot;model&amp;quot;: &amp;quot;small&amp;quot;&lt;/code> を追加。&lt;/p>
&lt;h3 id="3-キーバインド設定">3. キーバインド設定&lt;/h3>
&lt;p>&lt;code>~/.config/hypr/hyprland.conf&lt;/code> にトグル式バインドを設定:&lt;/p>
&lt;div>&lt;div class="codeblock--name">$XDG_CONFIG_HOME/hypr/hyprland.conf&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">bindd&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> SUPER ALT, D, Speech-to-text, exec, /usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh record
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#79c0ff">bindd&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> SHIFT, Shift_R, Speech-to-text, exec, /usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh record&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;ul>
&lt;li>&lt;code>Super+Alt+D&lt;/code> または 右Shift で開始/停止をトグル&lt;/li>
&lt;li>push-to-talk（&lt;code>bindd&lt;/code>+&lt;code>binddr&lt;/code>）は修飾キーのリリースイベントが不安定なため断念&lt;/li>
&lt;/ul>
&lt;h2 id="最終的な-configjson">最終的な config.json&lt;/h2>
&lt;div>&lt;div class="codeblock--name">$XDG_CONFIG_HOME/hyprwhspr/config.json&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;$schema&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;https://raw.githubusercontent.com/goodroot/hyprwhspr/main/share/config.schema.json&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;use_hypr_bindings&amp;#34;&lt;/span>: &lt;span style="color:#79c0ff">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;transcription_backend&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;pywhispercpp&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;model&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;small&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;language&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;ja&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;rest_endpoint_url&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;https://api.openai.com/v1/audio/transcriptions&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;rest_api_provider&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;openai&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;rest_body&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;model&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;gpt-4o-transcribe&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;audio_ducking&amp;#34;&lt;/span>: &lt;span style="color:#79c0ff">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>その他のhyprwhsprのセットアップに関する内容は以下の記事でまとめているので、必要な方は参照してほしい。&lt;/p></description></item><item><title>小ネタ WaylandでJetbrains製のエディタを使用する</title><link>https://amgsk.dev/posts/wayland-on-jetbrains-ide/</link><pubDate>Fri, 13 Feb 2026 12:19:11 +0900</pubDate><guid>https://amgsk.dev/posts/wayland-on-jetbrains-ide/</guid><description>&lt;p>特定の要素にフォーカスを合わせると詳細情報が表示されたりするが、これが邪魔してクリックが出来なかったりしていた&lt;br>
そのせいでVSCodeやZedに浮気していたんだけど、やっぱりJetBrains系のIDEに搭載されているshelfやchangelistの機能が優秀で使いやすく、使いたいのに使えないもどかしさを感じていた&amp;hellip;&lt;/p>
&lt;p>そして、ようやくたどり着いたのはコチラ!!&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-ini" data-lang="ini">&lt;span style="display:flex;">&lt;span>-Dawt.toolkit.name&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">WLToolkit&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>これをVM Optionで設定してあげればいい(help &amp;gt; Edit Custom VM Options)&lt;br>
わりと普通に使用できるようになったかな&amp;hellip;&lt;/p>
&lt;p>あまり大したことではないが、起動直後のウィンドウのサイズ調整が効いていない問題が新たに発生している&lt;br>
副作用化どうかはわからない。リサイズすれば正常に描画される。なので、ちょっと面倒ではある&lt;/p>
&lt;p>EOF&lt;/p></description></item><item><title>XWaylandでアプリを起動する</title><link>https://amgsk.dev/posts/wayland-on-x11-application/</link><pubDate>Wed, 11 Feb 2026 23:59:29 +0900</pubDate><guid>https://amgsk.dev/posts/wayland-on-x11-application/</guid><description>&lt;p>まだ多くのアプリケーションはWaylandに対応しておらず、起動することが難しかったり、またUIの描画が崩れたりする。
そんなときはXWaylandを用いてアプリを起動するように指定すれば、多くの場合は問題なく使用できる。&lt;/p>
&lt;p>XWaylandは、Waylandコンポジター上でX11アプリケーションを動作させるための互換レイヤーであり、Wayland環境でもXWaylandが有効であればX11向けのアプリケーションをそのまま実行できる。&lt;/p>
&lt;p>そのやり方を紹介。&lt;/p>
&lt;h2 id="アプリケーションのツールキットを調べる">アプリケーションのツールキットを調べる&lt;/h2>
&lt;p>desktopエントリで適切な環境変数を指定するには、対象のアプリがGTK・Qt・Electronのどれで実装されているかを知る必要がある。
パッケージ名に&lt;code>qt&lt;/code>や&lt;code>gtk&lt;/code>がついてるならそれを信用すればよい。&lt;/p>
&lt;h3 id="パッケージの依存関係から判別する">パッケージの依存関係から判別する&lt;/h3>
&lt;p>Arch Linuxなら&lt;code>pacman&lt;/code>で依存関係を確認するのが最も手軽。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>pacman -Qi dbeaver | grep Depends&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>依存パッケージに&lt;code>gtk3&lt;/code>や&lt;code>gtk4&lt;/code>があればGTK、&lt;code>qt5-base&lt;/code>や&lt;code>qt6-base&lt;/code>があればQt。&lt;/p>
&lt;h3 id="リンクしているライブラリから判別する">リンクしているライブラリから判別する&lt;/h3>
&lt;p>バイナリがリンクしている共有ライブラリを確認する方法もある。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ldd &lt;span style="color:#ff7b72">$(&lt;/span>which someapp&lt;span style="color:#ff7b72">)&lt;/span> | grep -iE &lt;span style="color:#a5d6ff">&amp;#39;gtk|qt&amp;#39;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h3 id="electronアプリの見分け方">Electronアプリの見分け方&lt;/h3>
&lt;p>Electronアプリはインストールディレクトリに&lt;code>resources/app.asar&lt;/code>が存在する。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ls /usr/lib/&amp;lt;appname&amp;gt;/resources/app.asar&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>また、実行中のプロセスのコマンドラインに&lt;code>--type=renderer&lt;/code>などChromium由来のフラグが含まれていることでも判別できる。&lt;/p>
&lt;h2 id="desktopエントリでの指定">desktopエントリでの指定&lt;/h2>
&lt;p>&lt;code>~/.local/share/applications&lt;/code>配下に、以下のようなdesktopエントリを作成する。
&lt;code>Exec&lt;/code>内で環境変数を指定し、X11バックエンドで起動させる。&lt;/p>
&lt;h3 id="gtkアプリケーションの場合">GTKアプリケーションの場合&lt;/h3>
&lt;p>GTKアプリケーションは&lt;code>GDK_BACKEND=x11&lt;/code>を指定する。&lt;/p>
&lt;div>&lt;div class="codeblock--name">desktopエントリ (GTK)&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-ini" data-lang="ini">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">[Desktop Entry]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Name&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">DBeaver Community (For Wayland)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Comment&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">Universal Database Tool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Exec&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">env GDK_BACKEND=x11 GDK_SCALE=1 GDK_DPI_SCALE=1.5 dbeaver %f&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Icon&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">dbeaver&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Terminal&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Type&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">Application&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Categories&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">Development;Database;IDE;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>StartupWMClass&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">DBeaver&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h3 id="qtアプリケーションの場合">Qtアプリケーションの場合&lt;/h3>
&lt;p>Qtアプリケーションは&lt;code>QT_QPA_PLATFORM=xcb&lt;/code>を指定する。&lt;/p></description></item><item><title>小ネタ draw.ioでCtrl無しでズームする</title><link>https://amgsk.dev/posts/drawio-scroll-wheel/</link><pubDate>Wed, 04 Feb 2026 07:02:02 +0900</pubDate><guid>https://amgsk.dev/posts/drawio-scroll-wheel/</guid><description>&lt;p>draw.ioでズームするにはAltやCtrlを押しながらマウスホイールを動かす必要が有る。&lt;br>
Miroのように、スクロールホイールだけでズームしたい。&lt;/p>
&lt;p>そんなときは &lt;code>Extra -&amp;gt; configuration&lt;/code>から以下をペーストするだけ。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;zoomWheel&amp;#34;&lt;/span>: &lt;span style="color:#79c0ff">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>再起動後に動作確認すること。&lt;br>
その他の設定は以下のページに書かれている。&lt;/p>
&lt;p>&lt;a href="https://www.drawio.com/doc/faq/configure-diagram-editor">Configure the draw.io editor&lt;/a>&lt;/p>
&lt;p>EOF&lt;/p></description></item><item><title>小ネタ VSCodeのvimでFcitx5の動作がおかしい件の対処</title><link>https://amgsk.dev/posts/vscode-fix-fcitx5/</link><pubDate>Fri, 16 Jan 2026 07:04:54 +0900</pubDate><guid>https://amgsk.dev/posts/vscode-fix-fcitx5/</guid><description>&lt;p>Wayland環境+VSCode+Fcitx5での話。&lt;/p>
&lt;p>たまに既にSubmitしたはずの文字が再変換されたり、変な位置に文字が挿入されるような現象に悩まされていた。
もし同じような現象に遭遇している方は、以下をsettings.jsonに追加すれば解決するかも。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a5d6ff">&amp;#34;editor.editContext&amp;#34;&lt;/span>&lt;span style="color:#f85149">:&lt;/span> &lt;span style="color:#79c0ff">false&lt;/span>&lt;span style="color:#f85149">,&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>小ネタですがこれで助かる人がいれば良いなと。&lt;br>
EOF&lt;/p></description></item><item><title>ミニディスプレイが割と良いという話</title><link>https://amgsk.dev/posts/mini-display/</link><pubDate>Sun, 14 Dec 2025 10:22:22 +0900</pubDate><guid>https://amgsk.dev/posts/mini-display/</guid><description>&lt;p>ミニディスプレイを購入した。価格は1万円程度。
(追記) Keepaの価格推移を確認すると価格が1.5万に上がっていた&amp;hellip;&lt;/p>
&lt;p>&lt;a href="https://amzn.asia/d/e9cYeZT">12.3インチタッチスクリーンセカンダリーモニター、IPSストレッチバーLCDトラベルタッチディスプレイ1920 * 720 HDMI USBC、ノートパソコン用モバイルタッチスクリーン、Windows Aida64 GPU CPU RAMモニタリング用&lt;/a>&lt;/p>
&lt;img src="./images/display.jpg" width=200 alt="mini display">
&lt;p>これにSpotifyやSlackを表示させている。&lt;/p>
&lt;img src="./images/display_on_spotify.png" width=600 alt="spotify">
&lt;p>このモニタの活用のために、ポモドーロタイマーを作ってみたりもした。&lt;br>
ratatuiを利用してTUIで実装してみた。&lt;/p>
&lt;img src="./images/display_on_pomodoro.png" width=600 alt="pomodoro-tui">
&lt;p>hyprland等のTWM環境で使用する場合、このタッチパネルを繋いだだけでは単なるタッチデバイスとして振る舞う。&lt;br>
以下のようにモニタ自身のoutput指定をし、その画面単体でのタッチ座標が認識されるように設定が必要。&lt;br>
実はひっそりとhyprlandに乗り換えている。これは別記事で。&lt;/p>
&lt;div>&lt;div class="codeblock--name">hyprland.conf#input&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>device &lt;span style="color:#ff7b72;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">name&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> hid-222a:0335
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#79c0ff">output&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> HDMI-A-2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72;font-weight:bold">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>そのdeviceに指定する識別子は&lt;code>hyprctl&lt;/code>コマンドで確認できる&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ hyprctl devises
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># ...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Touch:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Touch Device at 555e57f77ab0:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> hid-222a:0335
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># ...&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>どうやらCorsairからXENEON EDGEというものが発売されたみたいだが、価格は4万円を超えている。えっ高すぎない&amp;hellip;？&lt;/p></description></item><item><title>VSCodeのパフォーマンス最適化</title><link>https://amgsk.dev/posts/vscode-flags/</link><pubDate>Sat, 25 Oct 2025 19:52:31 +0900</pubDate><guid>https://amgsk.dev/posts/vscode-flags/</guid><description>&lt;p>VSCodeは&lt;code>code-flags.conf&lt;/code>（もしくは&lt;code>argv.json&lt;/code>）によって、パフォーマンスを最適化出来る。&lt;/p>
&lt;h2 id="x11版の設定">X11版の設定&lt;/h2>
&lt;div>&lt;div class="codeblock--name">~/.config/code-flags.confの例（X11）&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>--enable-gpu-rasterization
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-zero-copy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--ignore-gpu-blocklist
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-features&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>VaapiVideoDecoderCanvasOopRasterizationRawDraw
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--ozone-platform-hint&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>x11
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--disable-software-rasterizer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--num-raster-threads&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--disable-renderer-backgrounding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-native-gpu-memory-buffers&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="wayland版の設定">Wayland版の設定&lt;/h2>
&lt;div>&lt;div class="codeblock--name">~/.config/code-flags.confの例（Wayland）&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>--enable-gpu-rasterization
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-zero-copy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--ignore-gpu-blocklist
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-features&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>UseOzonePlatform,VaapiVideoDecoderCanvasOopRasterizationRawDraw
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--ozone-platform&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>wayland
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--disable-software-rasterizer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--num-raster-threads&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--disable-renderer-backgrounding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--enable-native-gpu-memory-buffers&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>自分はマークダウンをプレビューしながら書くことが多いが、スクロール時のレンダリングのモタツキが減った（気がする）のと、画面のリサイズ時の反応が早くなった（気がする）&lt;/p></description></item><item><title>フィラメント詰まりとギア交換</title><link>https://amgsk.dev/posts/bambulab-p1s-filament-clog/</link><pubDate>Mon, 13 Oct 2025 21:01:17 +0900</pubDate><guid>https://amgsk.dev/posts/bambulab-p1s-filament-clog/</guid><description>&lt;p>ABSからPLAに切り替えて印刷しようとしたとき、以下のようなエラーが発生。&lt;/p>
&lt;p>&lt;img src="./images/error.png"
 alt="&amp;lsquo;エラー&amp;rsquo;"loading="lazy">
&lt;/p>
&lt;p>エラーコードは&lt;code>0700-8003 180927&lt;/code>。&lt;/p>
&lt;p>誘導されたWikiには以下のように記載してある。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-txt" data-lang="txt">&lt;span style="display:flex;">&lt;span>Failed to pull out the filament from the extruder. This might be caused by clogged extruder or filament broken inside the extruder.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>早速分解して確認。&lt;/p>
&lt;p>&lt;img src="./images/gear.png"
 alt="&amp;lsquo;分解の様子&amp;rsquo;"loading="lazy">
&lt;/p>
&lt;p>説明の通り、上部に白色のフィラメントが写っているが、フィラメントは切断されていて、また先端が太くなっており引くにも引けない状況になっていた。これが詰まりの原因なので取り除く。&lt;/p>
&lt;p>ついでに、将来的にPA-CFを試すために購入した焼入れスチール製の押出ギアと交換していく。&lt;/p>
&lt;p>&lt;img src="./images/new-gear.png"
 alt="&amp;lsquo;焼入れスチールギア&amp;rsquo;"loading="lazy">
&lt;/p>
&lt;p>PA6-CF高いですね&amp;hellip;0.5kgでこの値段。PLA・ABS・ASAは1,200円/0.5kgで買えるだけに買うのを躊躇する。&lt;br>
PETG-CF辺りから試してみようと思います。&lt;/p>
&lt;p>&lt;img src="./images/PA6-CF.png"
 alt="&amp;lsquo;PA6-CF&amp;rsquo;"loading="lazy">
&lt;/p></description></item><item><title>Davinci ResolveでFcitxを使う方法</title><link>https://amgsk.dev/posts/fcitx-davinci-resolve/</link><pubDate>Thu, 11 Sep 2025 21:10:43 +0900</pubDate><guid>https://amgsk.dev/posts/fcitx-davinci-resolve/</guid><description>&lt;p>Davinci Resolve で 日本語入力する方法。
fcitx5系でも同様の方法で可能な事が分かったので追記（updated）&lt;/p>
&lt;p>&lt;img src="./davinci-fcitx.png"
 alt="&amp;ldquo;日本語入力中&amp;rdquo;"loading="lazy">
&lt;/p>
&lt;h2 id="確認したバージョン">確認したバージョン&lt;/h2>
&lt;ul>
&lt;li>Arch Linux 6.16.5-zen1-1-zen&lt;/li>
&lt;li>fcitx
&lt;ul>
&lt;li>4系(4.2.9.9)&lt;/li>
&lt;li>5系(5.1.16)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>davinci-resolve
&lt;ul>
&lt;li>20.1.1-1&lt;/li>
&lt;li>20.2.2-1&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="fcitx-のモジュールのシンボリックリンクを-resolve-のフォルダ内に作る">fcitx のモジュールのシンボリックリンクを resolve のフォルダ内に作る&lt;/h2>
&lt;div>&lt;div class="codeblock--name">fcitx4の場合&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo mkdir -p /opt/resolve/plugins/platforminputcontexts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo ln -s /usr/lib/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /opt/resolve/plugins/platforminputcontexts/&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;div>&lt;div class="codeblock--name">fcitx5はこちら&lt;/div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo mkdir -p /opt/resolve/plugins/platforminputcontexts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo ln -s /usr/lib/qt/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so /opt/resolve/plugins/platforminputcontexts/&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="モジュールパスを指定した起動スクリプトを用意する">モジュールパスを指定した起動スクリプトを用意する&lt;/h2>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">XMODIFIERS&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;@im=fcitx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">GTK_IM_MODULE&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>fcitx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">QT_IM_MODULE&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>fcitx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">QT_QPA_PLATFORM&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>xcb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">QT_PLUGIN_PATH&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>/opt/resolve/plugins
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>unset LD_PRELOAD
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/opt/resolve/bin/resolve&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="desktop-ファイルを作成ランチャーから起動するため">desktop ファイルを作成（ランチャーから起動するため）&lt;/h2>
&lt;p>これで dmenu や rofi などのランチャーから指定して起動できるようになる。
直接さっきのスクリプト叩くでも OK（使用する場合は $USER を自身に置き換えてください）&lt;/p></description></item><item><title>SSDが認識しなくなった話</title><link>https://amgsk.dev/posts/ssd-destroyed/</link><pubDate>Wed, 10 Sep 2025 21:37:42 +0900</pubDate><guid>https://amgsk.dev/posts/ssd-destroyed/</guid><description>&lt;p>先月末、Windowsの更新プログラムによって、M.2 SSDが恒久的に破壊されるという事象が発生している。
自分はその被害者の一人かもしれず、一応こんな事象もあるよってのを伝えたく、この記事を書いている。&lt;/p>
&lt;p>勿論、このupdateとは関係ない故障の可能性はあるしアップデートが原因だと立証するのは難しいけれど、このUpdateにより再起動掛かった直後からSSDが認識できなくなったので何らかの可能性は疑っている。
その日は、しばらくWindowsUpdateを行っていなかったから最新にしとこうと思い、自らWindowsUpdateを行う形で自殺してしまった可能性あり。&lt;/p>
&lt;p>&lt;img src="./UEFI_bios.png"
 alt="&amp;ldquo;UEFI BIOS&amp;rdquo;"loading="lazy">
&lt;/p>
&lt;p>見ての通り、起動デバイスから消えたので起動できない。
念の為に、ArchISOが入っているUSBデバイスから起動して&lt;code>lsblk&lt;/code>してみても一覧には出なかった。
当該SSDはnvmeの2TBだが、画面に表示されてるのはHDDやUSB。NVMeコントローラを認識できていないのはほぼ確実な気がする。&lt;/p>
&lt;p>&lt;img src="./arch_iso_lsblk.png"
 alt="&amp;ldquo;Arch ISO&amp;rdquo;"loading="lazy">
&lt;/p>
&lt;p>Windowsの用途としては、FusionやBambuStudioでの3Dモデリングや印刷がメインだったけど、アプリ自体がクラウドにデータを保存する仕組みだったので無傷だった。あとTrueNASにデータ保管してて良かった。OneDriveも何故か有効になってて良かった。今回データ的には無傷で済んだので良かったんだけど、バックアップの必要性を改めて感じた。&lt;/p>
&lt;p>皆さんもお気をつけて。&lt;/p></description></item><item><title>ArchLinuxでXbox Wireless Controllerを使う</title><link>https://amgsk.dev/posts/xbox-wireless-controller/</link><pubDate>Wed, 26 Mar 2025 08:51:23 +0900</pubDate><guid>https://amgsk.dev/posts/xbox-wireless-controller/</guid><description>&lt;p>Xbox ワイヤレス コントローラーをArch Linuxで使う方法。&lt;/p>
&lt;p>有線で接続する場合、Bluetoothか2.4Gレシーバのドングルを使った方法のどちらかになる。&lt;/p>
&lt;p>先に結論だけど、安定性の問題でBlueToothよりもドングルを使った方法がオススメ。
&lt;code>xpadneo&lt;/code>だと、初回接続は問題ないが再接続時にモジュールの再ロードが必要だった。&lt;/p>
&lt;p>自分は以下の製品を使って問題なく使用できている。(Amazonリンク ※非アフィリンク)&lt;/p>
&lt;ul>
&lt;li>🔗 &lt;a href="https://amzn.asia/d/gLyKxAF">【純正品】Xbox Elite ワイヤレス コントローラー シリーズ 2&lt;/a>&lt;/li>
&lt;li>🔗 &lt;a href="https://amzn.asia/d/cjjUFVO">2.4Gワイヤレスレシーバーアダプター、 XboxOneゲーミングゲームパッドコントローラー用、Windows 10 PCラップトップタブレット用&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="bluetoothの接続の場合xpadneo">BlueToothの接続の場合（xpadneo）&lt;/h2>
&lt;p>xpadneoをインストールする&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># AURからインストール&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>yay -S xpadneo-dkms
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># モジュールを読み込み&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo modprobe hid_xpadneo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-style:italic"># 自動読み込みの設定&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>自分の環境では、コントローラの接続を切る（または切れる）と再接続されない問題があったが、
以下のようにモジュールを再読込させることで再起動すること無く再接続させることは出来た。&lt;/p></description></item><item><title>Google Chromeを特定のプロファイルで起動する</title><link>https://amgsk.dev/posts/chrome-specified-profile/</link><pubDate>Tue, 18 Mar 2025 21:47:30 +0900</pubDate><guid>https://amgsk.dev/posts/chrome-specified-profile/</guid><description>&lt;p>Google Chromeを特定のユーザープロファイルで直接起動する方法について紹介する。&lt;br>
複数のプロファイルを使い分けている場合は便利と思う。
自分は仕事用やプライベート用それぞれで10個くらいのプロファイルを使用していて、作業によって切り替えたりしている。&lt;/p>
&lt;ul>
&lt;li>プロジェクトN用のインフラ作業用(本番向け、STG向け）&lt;/li>
&lt;li>プロジェクトごとのテストアカウントA~Z&lt;/li>
&lt;li>プライベート用&lt;/li>
&lt;li>&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>このプロファイルの切り替えが微妙に面倒に感じていた。&lt;br>
スクロールの量も増えてきていて、プロファイル選択で数秒掛かってしまっていた。&lt;/p>
&lt;p>以下のようにコマンドで起動すれば、指定したプロファイルでChromeを起動できる。&lt;br>
既にそのプロファイルでタブが開かれていた場合でも、新しくウィンドウを開くような挙動となり、既存のプロファイルのウィンドウにフォーカスが飛ばなくなるので使いやすくもなる。&lt;/p>
&lt;p>つまり以下を特定のキーバインドで実行させてやればマウス操作は不要でストレスフリーというわけ。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>google-chrome-stable --profile-directory&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;Default&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>google-chrome-stable --profile-directory&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;Profile 1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>google-chrome-stable --profile-directory&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;Profile N&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>google-chrome-stable --guest &lt;span style="color:#8b949e;font-style:italic"># ゲストモード&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h2 id="プロファイルの確認方法">プロファイルの確認方法&lt;/h2>
&lt;img src="./chrome-version.png" alt="Profiles" width="100%">
&lt;p>そのプロファイルで起動して、&lt;code>chrome://version&lt;/code>を開く。&lt;br>
&lt;code>Profile Path&lt;/code>に記載してあるディレクトリがそれ。&lt;/p>
&lt;p>ちなみに、他のプロファイルも&lt;code>~/.config/google-chrome/&lt;/code>配下のディレクトリ名にあるが、このディレクトリ内のファイルを見てもプロファイル名を導き出すことは難しかった。メンドイけど一つ一つ確認するしかなさそう。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>amgsk@arch-desk ~/d/m/blog &lt;span style="color:#ff7b72;font-weight:bold">(&lt;/span>main&lt;span style="color:#ff7b72;font-weight:bold">)&lt;/span>&amp;gt; ls ~/.config/google-chrome/ | grep &lt;span style="color:#a5d6ff">&amp;#34;^\(Default\|Profile\)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Profile &lt;span style="color:#a5d6ff">9&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>&lt;code>Preferences.name&lt;/code>というそれっぽい値を抽出してみたが求めている情報とは違った。&lt;/p></description></item><item><title>i3wmで効率よくゲームする</title><link>https://amgsk.dev/posts/i3wm-gaming-mode/</link><pubDate>Sun, 16 Mar 2025 03:11:04 +0900</pubDate><guid>https://amgsk.dev/posts/i3wm-gaming-mode/</guid><description>&lt;p>ArchLinux + i3wm 環境でゲームをプレイする際に、知っておくと便利な設定など。&lt;br>
&lt;code>gamemode&lt;/code> は Linuxゲーミング環境でよく使われる最適化ツール。&lt;br>
これを活用して CPU の &lt;code>governor&lt;/code> を &lt;code>performance&lt;/code> に設定したり、スクリーンロックを無効化したりなど、ゲームする準備を自動化することができる。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-ini" data-lang="ini">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">[general]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>desiredgov&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">performance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>renice&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ioprio&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>inhibit_screensaver&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">[custom]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>start&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">/home/user/.config/gamemode/start.sh&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>end&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">/home/user/.config/gamemode/end.sh&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>軽量なi3wmとはいえ、&lt;code>picom&lt;/code> などのコンポジターはゲーム時にパフォーマンスに影響を与える。&lt;br>
特に、影・透過・ぼかし・アニメーションの描写コストは高い。&lt;/p>
&lt;p>&lt;code>gamemode&lt;/code>の開始時に自動で&lt;code>picom&lt;/code>を無効化し、終了時に再度有効化するようにする。&lt;br>
環境変数&lt;code>$HOME&lt;/code>展開できない場合があるので注意。フルパスで書くようにする。&lt;/p>
&lt;p>&lt;strong>start.sh&lt;/strong>&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>export &lt;span style="color:#79c0ff">DISPLAY&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>:0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i3-msg mode &lt;span style="color:#a5d6ff">&amp;#34;gaming&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pkill picom
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sleep 0.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">if&lt;/span> pgrep -x picom &amp;gt; /dev/null; &lt;span style="color:#ff7b72">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pkill -9 picom
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff7b72">fi&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>&lt;strong>end.sh&lt;/strong>&lt;/p></description></item><item><title>アプリケーションが起動できないとき</title><link>https://amgsk.dev/posts/cant-launch-freecad/</link><pubDate>Mon, 03 Feb 2025 08:02:56 +0900</pubDate><guid>https://amgsk.dev/posts/cant-launch-freecad/</guid><description>&lt;p>たまにバージョンの差異が原因でアプリケーションが起動できないときがある。
そんなときの対処としては以下になる。&lt;/p>
&lt;ul>
&lt;li>シンボリックリンクで最新バージョンを過去バージョンで偽装する&lt;/li>
&lt;li>共有ライブラリのバージョンを落とす&lt;/li>
&lt;li>アプリケーションバージョンを落とす&lt;/li>
&lt;/ul>
&lt;p>今回はfreecadで起動できない問題に遭遇したので対処例として書いておく。&lt;br>
rofiでfreecadを起動しようとしたところ、無反応だったのでターミナルから起動すると以下エラーログが出力されていた。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>freecad: error &lt;span style="color:#ff7b72">while&lt;/span> loading shared libraries: libxerces-c-3.2.so: cannot open shared object file: No such file or directory&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>バージョンは異なるものの、&lt;code>xerces-c&lt;/code>はインストールはされている。指定バージョン(今回のケースだと3.2系)に依存している模様。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">22
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt; yay -Qi xerces-c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Name : xerces-c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Version : 3.3.0-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Description : A validating XML parser written in a portable subset of C++
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Architecture : x86_64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>URL : https://xerces.apache.org/xerces-c/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Licenses : APACHE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Groups : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Provides : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Depends On : gcc-libs curl libnsl icu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Optional Deps : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Required By : freecad libkolabxml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Optional For : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Conflicts With : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Replaces : None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Installed Size : 8.11 MiB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Packager : Lukas Fleischer &amp;lt;lfleischer@archlinux.org&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Build Date : Sun &lt;span style="color:#a5d6ff">02&lt;/span> Feb &lt;span style="color:#a5d6ff">2025&lt;/span> 11:29:45 PM JST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Install Date : Mon &lt;span style="color:#a5d6ff">03&lt;/span> Feb &lt;span style="color:#a5d6ff">2025&lt;/span> 08:03:29 AM JST
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Install Reason : Installed as a dependency &lt;span style="color:#ff7b72">for&lt;/span> another package
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Install Script : No
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Validated By : Signature&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>ライブラリをlibxerces-c-3.2.soに偽装して試してみる。&lt;br>
既存の&lt;code>libxerces-c-3.3.so&lt;/code>を3.2としてシンボリックリンクを貼る。&lt;/p></description></item><item><title>Nvme Gen5への換装と速度確認</title><link>https://amgsk.dev/posts/nvme-gen5/</link><pubDate>Wed, 22 Jan 2025 01:05:17 +0900</pubDate><guid>https://amgsk.dev/posts/nvme-gen5/</guid><description>&lt;p>&lt;img src="CT4000T705SSD3-JP.jpg"
 alt="image"loading="lazy">
&lt;/p>
&lt;p>&lt;a href="https://amzn.asia/d/dnvdjcd">Crucial T705 4TB 3D NAND NVMe PCIe5.0 M.2 SSD 最大14,100MB/秒 CT4000T705SSD3-JP&lt;/a> （非アソシエイトリンク）&lt;/p>
&lt;p>Gen5で動作していることを確認するために以下のコマンドでリンク速度を確認。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo lspci -vvv | grep -C &lt;span style="color:#a5d6ff">10&lt;/span> -i nvme&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">17
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">18
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">19
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">20
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">21
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">22
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">23
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">24
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">25
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">26
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">27
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">28
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">29
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">30
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">31
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">32
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">33
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">34
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">35
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">36
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-txt" data-lang="txt">&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>02:00.0 Non-Volatile memory controller: Micron/Crucial Technology T705 NVMe PCIe SSD (prog-if 02 [NVM Express])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Subsystem: Micron/Crucial Technology Device 4100
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast &amp;gt;TAbort- &amp;lt;TAbort- &amp;lt;MAbort- &amp;gt;SERR- &amp;lt;PERR- INTx-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Latency: 0, Cache Line Size: 64 bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Interrupt: pin A routed to IRQ 85
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	IOMMU group: 14
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Region 0: Memory at f6d00000 (64-bit, non-prefetchable) [size=16K]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [80] Express (v2) Endpoint, IntMsgNum 0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		DevCap:	MaxPayload 512 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 75W TEE-IO-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+ FLReset-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			MaxPayload 512 bytes, MaxReadReq 512 bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		DevSta:	CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		LnkCap:	Port #0, Speed 32GT/s, Width x4, ASPM L1, Exit Latency L1 unlimited
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr- CorrIntErr- HeaderOF-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ CorrIntErr+ HeaderOF-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		AERCap:	First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap+ ECRCChkEn-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		HeaderLog: 00000000 00000000 00000000 00000000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [294 v1] Device Serial Number 00-00-00-00-00-00-00-00
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [2a0 v1] Power Budgeting &amp;lt;?&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [300 v1] Secondary PCI Express
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		LnkCtl3: LnkEquIntrruptEn- PerformEqu-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		LaneErrStat: 0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [340 v1] Physical Layer 16.0 GT/s &amp;lt;?&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [378 v1] Lane Margining at the Receiver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		PortCap: Uses Driver-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		PortSta: MargReady+ MargSoftReady-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Capabilities: [3d0 v1] Physical Layer 32.0 GT/s &amp;lt;?&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Kernel driver in use: nvme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	Kernel modules: nvme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	...&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>以下の表示がされていることがわかる。&lt;/p></description></item><item><title>ブラウザ以外でもスクロールズームしたい</title><link>https://amgsk.dev/posts/scroll-zoom/</link><pubDate>Thu, 16 Jan 2025 00:35:06 +0900</pubDate><guid>https://amgsk.dev/posts/scroll-zoom/</guid><description>テスト</description></item><item><title>i3wmの使い心地が最強すぎる</title><link>https://amgsk.dev/posts/i3/</link><pubDate>Wed, 21 Aug 2024 23:19:07 +0900</pubDate><guid>https://amgsk.dev/posts/i3/</guid><description>&lt;p>&lt;img src="./images/tiling.png"
 alt="&amp;ldquo;i3wm&amp;rdquo;"loading="lazy">
&lt;/p>
&lt;p>コンポジット型ウィンドウマネージャに分類される Windows や Mac のようなウィンドウマネージャを使っていたのだけれど、これらは万人受けする一方で何もかもが押し付けられているように感じていて。&lt;/p>
&lt;p>もっと自由な開発環境を求め、初めてLinuxを使い始めたのが10年以上前。&lt;br>
Ubuntu8.04とかそのあたりだった気がする。KDE、Gnome、LXDEを環境として色々触るようになった。
これらは設定の幅が広くて、更にOSSの拡張機能や自作スクリプトでアレンジしてWindowsよりも優れたカスタマイズ体験をもたらしてくれたけど、それでもまだWindowsを使っていた頃と同じ窮屈な感覚を感じずにはいられなかった。&lt;/p>
&lt;p>そして今ではArchLinuxにi3wmと言われるタイリングウィンドウマネージャを入れて動かすことで落ち着いている。
必要最低限すら入っていない環境に必要な機能を組み込んでいく。&lt;br>
自分で好みに育て上げる感じが楽しく、キーバインドや操作性は自由に設定出来て、何かしらのアプリや設定よりも高い優先度を持ち全てのキーバインドを制御できる。デフォルトで用意されているものに合わせる必要もない。設定は全てdotfilesで管理しているので、新しく環境を作ったときも数コマンドで環境を作れる。&lt;/p>
&lt;p>自分で考えた設定なので覚えやすいし、アイデア次第でどんどん使いやすくしていける。
ワークスペースを自在に操れるのは勿論、ルールに基づいてウィンドウを自動で整理することが出来る。もうウィンドウに迷うことはないし、動作は軽量でウィンドウを瞬時に切り替えることが出来る。
コマンドを組み合わせて、開発環境の一式を1コマンドで特定のワークスペースで起動するなんてことも余裕で出来る。&lt;br>
この使いやすさを味わうと、もうMacやWindowsには戻れない。控えめに言って最高なので、ちょっと見てほしい。&lt;/p>
&lt;h2 id="そもそもタイリングウィンドウマネージャとは何なのか">そもそもタイリングウィンドウマネージャとは何なのか&lt;/h2>
&lt;p>タイリングウィンドウマネージャは、シンプルに言えばそのウィンドウを自動で並べて配置出来ること。
ほとんどの操作をキーボードのみで行えるように設計されていて、これを設定ファイルで自由にカスタマイズ出来る。&lt;/p>
&lt;p>&lt;video src="./images/i3wm-workflow.mp4" alt="i3wm demo" controls>&lt;/video>&lt;/p>
&lt;p>タイリングウィンドウマネージャには、必要最低限すら機能が用意されていない。コミュニティによって様々なツールが提供されていて、これを利用してデスクトップ環境として使える形にしていく。&lt;/p>
&lt;p>&lt;strong>アプリケーションランチャーのRofi&lt;/strong>&lt;br>
&lt;img src="./images/rofi.png" alt="rofi" width="300"/>&lt;/p>
&lt;p>&lt;strong>ステータスバーのPolybar&lt;/strong>&lt;br>
&lt;img src="./images/polybar.png" alt="polybar" width="300"/>&lt;/p>
&lt;p>&lt;strong>ウィンドウ装飾のPicom&lt;/strong>&lt;br>
&lt;img src="./images/picom.png" alt="picom" width="300"/>&lt;/p>
&lt;p>この他にも、デスクトップ環境として使うために様々な設定が必要になる。&lt;/p>
&lt;ul>
&lt;li>背景の設定&lt;/li>
&lt;li>monitorの定義&lt;/li>
&lt;li>Networkの管理&lt;/li>
&lt;li>Bluetooth管理&lt;/li>
&lt;li>通知デーモン&lt;/li>
&lt;li>ファイラー&lt;/li>
&lt;li>&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>これらがメンドイと感じる人には、タイリングウィンドウマネージャはまず向かない。
このメンドクササに立ち向かってでもオリジナルを作りたいという強い意志と時間の消費の覚悟が必要。&lt;/p>
&lt;p>けど恐れる必要はなく、界隈にはriceと言われるカスタマイズされた設定や外観を共有する文化があり、Redditでは頻繁に設定が共有されてる。また、GitHubで公開されてるdotfilesを覗けば、どんどん設定を育てられる。
すでに定義されたdotfilesを使う場合でも、いずれ設定の理解が必要になるが、使いながら覚えていけばいい。&lt;/p>
&lt;h2 id="数あるタイリングマネージャの中でi3wmを使う理由">数あるタイリングマネージャの中でi3wmを使う理由&lt;/h2>
&lt;p>タイリングウィンドウマネージャには多くの種類がある。&lt;br>
X11ではこの&lt;code>i3wm&lt;/code>を始め、&lt;code>bspwm&lt;/code>、&lt;code>awesome&lt;/code>、&lt;code>qtile&lt;/code>、&lt;code>xmonad&lt;/code>、waylandでは&lt;code>i3wm&lt;/code>互換の&lt;code>sway&lt;/code>、&lt;code>Hyprland&lt;/code>、&lt;code>niri&lt;/code>&amp;hellip;&lt;br>
いろんなタイリングマネージャを使ってみた中で、自分には&lt;code>i3wm&lt;/code>が最も馴染んだ。&lt;/p>
&lt;ul>
&lt;li>X11上で動き、設定がシンプル&lt;/li>
&lt;li>整備されたドキュメント、コミュニティの規模&lt;/li>
&lt;li>viライクにタイリングを操作可能&lt;/li>
&lt;li>dotfilesで管理しやすい設定ファイルと拡張性&lt;/li>
&lt;li>コミュニティに構築されたエコシステムとの親和性&lt;/li>
&lt;li>モードという概念の素晴らしさ&lt;/li>
&lt;/ul>
&lt;p>&lt;code>i3wm&lt;/code>には色々良さがあるけれど、特にモードという概念が決め手になっている。&lt;/p>
&lt;h3 id="モードという概念の素晴らしさ">モードという概念の素晴らしさ&lt;/h3>
&lt;p>特にTWMはキーボードでほとんどの操作を行なう都合上、多くのキーバインドを必要とする。&lt;/p>
&lt;p>キーバインドはアプリケーションによっても排他的に使用されるので、それぞれがコンフリクトしないように配慮するとなるとCtrlやShiftのキーバインドは使用できず、Super（俗に言うWinキー）やAlt（meta）を多用することとなる。&lt;/p>
&lt;p>僕は物理的なスイッチが両手で50コの分割キーボードを好んで使っているが、ただでさえタイリングウィンドウマネージャ、ブラウザ、エディタなどの各アプリケーションで多数のキーバインドを必要とするのに、その操作をキーバインドだけで実現しようとすると必然的にキーの同時押しが増えてしまう。&lt;/p>
&lt;img src="./images/helix.png" alt='helix keyboards' width='300'>
&lt;p>それを解決する手段が、このモードという概念。&lt;br>
通常がノーマルモードだとすると、ヴィジュアルモードのような別のモードを作ることができ、そのモード中はノーマルモードのキーバインドが全て無効になり別の定義が可能となる。Vimを使ったことがあるならこのモードの概念を割と理解してもらいやすいと思う。&lt;/p>
&lt;p>例えば、&lt;code>Super+Ctrl+Alt+1&lt;/code>のようなキー入力をしようとすると、&lt;code>Super+Ctrl+Alt+Layer(fn)+1&lt;/code>の合計 5 種類のキーを押す必要がある&amp;hellip;この操作はモタツキの原因となり、生産性の低下に直結する。&lt;/p>
&lt;p>そこでモードを活用できる。&lt;br>
例えば&lt;code>Super+g&lt;/code>のキーバインドを&lt;code>モードA&lt;/code>に入るキーバインドとして定義したとする。2ストローク目で&lt;code>a&lt;/code>をキー入力した場合に&lt;code>Super+Ctrl+Alt+1&lt;/code>でやろうとしていた操作を&lt;code>a&lt;/code>というワンキーで行うように設定すれば良い。&lt;br>
つまりストローク数を増やし、同時押しを減らすことが出来る。&lt;/p>
&lt;p>キーストロークこそ増えてしまうものの、通常ではバインドしにくかったアルファベット領域&lt;code>[a-z]&lt;/code>へのキーバインドを有効活用できることとなる。&lt;/p>
&lt;p>このモードの素晴らしさは、同時押しを減らせることだけじゃない。&lt;/p>
&lt;p>特定のモード中は、ノーマルモードのキーバインドが無効になる。それを利用し、敢えてキーバインドを指定しないモードを用意することで、キーバインドが存在しない状態を作り出すことも出来る。これはゲーム用途などで敢えてキーバインドを設定したく無い場合に有用である。&lt;/p>
&lt;p>また、モードをチェインして複数のモードを相互に移動することが出来る。これはつまり階層構造が作れる事を意味する。これも更に一次キーバインドの枯渇を防ぐ仕組みとして活用できる。&lt;/p>
&lt;p>気になったらぜひ使ってみてほしい。
この記事は書きかけなので、気が向いたときに追記していく予定。&lt;/p></description></item><item><title>LinuxでDockerコンテナとVirtualBoxの仮想OSを同時に起動する</title><link>https://amgsk.dev/posts/running-docker-and-virtualbox-simultaneously-on-Linux/</link><pubDate>Sat, 13 Jul 2024 23:23:42 +0900</pubDate><guid>https://amgsk.dev/posts/running-docker-and-virtualbox-simultaneously-on-Linux/</guid><description>&lt;p>LinuxでDocker(Desktop)とVirtualboxを同時に使用する場合の話。&lt;/p>
&lt;h2 id="事象">事象&lt;/h2>
&lt;p>Dockerコンテナを起動中にVirtualBoxで仮想OSを立ち上げようとすると、以下のようにエラーが表示され起動が出来なかった。&lt;br>
逆にDockerDesktopのサービスを落としVirtualBoxを起動するとDockerコンテナの方が立ち上がらなくなる。&lt;/p>
&lt;pre wrap>
VirtualBox can't enable the AMD-V extension. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_SVM_IN_USE).
&lt;/pre>
&lt;img src='./images/virtualbox_error.png' style='width: 100%'>
&lt;pre wrap>
$ docker compose up
Cannot connect to the Docker daemon at unix:///home/{user}/.docker/desktop/docker.sock. Is the docker daemon running?
&lt;/pre>
&lt;h2 id="解決方法">解決方法&lt;/h2>
&lt;p>どうやらLinux版のDockerDesktopはKVMを利用していている事が原因で、VirtualBoxもKVMを利用しており複数のハイパーバイザが同時にKVMを利用することはできない。&lt;br>
以下のようにContextを変更することで、DockerDesktopをアンインストールすることなくDockerとVirtualBoxの両方の起動が出来るようになった。&lt;/p>
&lt;pre>
$ docker context list
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
desktop-linux Docker Desktop unix:///home/{user}/.docker/desktop/docker.sock
&lt;/pre>
&lt;p>既存のcontextを確認。*がついている箇所がカレント。&lt;br>
以下コマンドでdocker contextを変更する。&lt;/p>
&lt;pre>
$ docker context use default
default
Current context is now "default"
&lt;/pre></description></item><item><title>Linuxに4Kモニターを導入した際の設定とか</title><link>https://amgsk.dev/posts/new-4k-monitor/</link><pubDate>Wed, 05 Jun 2024 08:31:47 +0900</pubDate><guid>https://amgsk.dev/posts/new-4k-monitor/</guid><description>&lt;p>新たにメインの開発環境に4Kモニターを導入した。使い心地は最高である。
画面に描画されるフォントの美しさは素晴らしい。&lt;/p>
&lt;p>これは導入の前から分かってたことだけど、4Kモニターの表示はスケーリングしないと文字が小さくて作業しづらい。&lt;br>
Windowsで言うところのスケーリングをLinux環境でも行いたい、という記事。&lt;br>
色々試行錯誤して快適に使用する設定を見つけたので記録として残そうと思う。&lt;/p>
&lt;img src='./images/mobiuz_ex3210u.jpg' style='max-height: 300px; width: auto;'>
&lt;p>&lt;a href="https://amzn.asia/d/5P7Nxvs" target="_blank" rel="noopener noreferrer">mobiuz ex3210u&lt;/a>&lt;br>
非アソシエイトリンクです&lt;/p>
&lt;h2 id="環境">環境&lt;/h2>
&lt;ul>
&lt;li>OS: Arch Linux&lt;/li>
&lt;li>WM: i3wm&lt;/li>
&lt;li>X環境(not Wayland)&lt;/li>
&lt;li>UHD(DP-2)が1枚、FHD(DP-0,DP-4)が縦置きで左右に2枚の3画面構成&lt;/li>
&lt;/ul>
&lt;img src='./images/monitors.png' style='max-height: 200px; width: auto;'>
&lt;h2 id="文字が小さくなる問題">文字が小さくなる問題&lt;/h2>
&lt;p>4Kモニターは単純にFHDの縦横2倍なので、高画質だけどウィンドウや文字全てが小さくなってしまう。
色々ググって最初に見つかるのは&lt;a href="https://wiki.archlinux.jp/index.php/HiDPI#Xorg">Arch WIKI&lt;/a>に記載されている以下のようなコマンドだと思う。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>xrandr --output DP-1 --scale 1.2x1.2&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>今回は大きく表示させたいので、&lt;code>&amp;lt; 1&lt;/code>の設定値を設定してみる。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>xrandr --output DP-1 --scale 0.75x0.75&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>以下のようにスケール値を0.75で設定すると大きくは表示されるが、フォントがジャギっていてぼやけたようなblurryな状態になった。&lt;br>
1以上のスケーリングではフォントがジャギることは無かった。これは利用出来そう。この方針で詰めてみることにした。
つまり4KモニタでスケーリングするのではなくFHDモニタ側を調整する方が問題が出ないのでは、というよみ。&lt;/p>
&lt;h2 id="行き着いた解決策">行き着いた解決策&lt;/h2>
&lt;p>&lt;strong>DPI設定で4Kモニタの表示を拡大し、FHD側はスケーリングで対応する&lt;/strong>&lt;/p>
&lt;p>具体的な設定値は以下。&lt;/p>
&lt;h3 id="1-xresources-で全体のdpiを変更する">1. &lt;code>.Xresources&lt;/code> で全体のDPIを変更する&lt;/h3>
&lt;p>これで4Kモニタ側の表示が画質を保ったまま、FHDの表示に近づく
これやるとFHDモニタがタブレット表示のようなどでかい表示になる。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Xft.dpi: &lt;span style="color:#a5d6ff">144&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;h3 id="2-fhd側をスケールする">2. FHD側をスケールする&lt;/h3>
&lt;p>FHDモニタに対し、xrandrのscalingを&amp;gt;1で設定する。&lt;/p>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>exec xrandr --output DP-0 --scale 1.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exec xrandr --output DP-4 --scale 1.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exec_always ~/scripts/monitor_config.sh&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>上記スケーリングの実行後にarandrなりxrandrの解像度設定スクリプトを流すようにすると良い。
スケーリング前のwindowposでやるとずれるので注意。&lt;/p></description></item><item><title>About</title><link>https://amgsk.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://amgsk.dev/about/</guid><description>&lt;ul>
&lt;li>当サイトは Google Analytics を使っています。&lt;/li>
&lt;li>ArchLinux や twm に関する記事が多いと思います。&lt;/li>
&lt;li>普段から Linux を仕事道具として常用しており、その中での気付きやトラブルの情報を発信する目的でブログ書いてます。&lt;br>
Linux 使いが増えると嬉しい。みんな使うべき。&lt;/li>
&lt;li>紹介するショッピングサイトの商品 URL は共有のために貼っているもので、アフィリンクを貼る意図は一切ありません。&lt;br>
そもそも稼げるなんて微塵も思ってません。なので安心してクリックください。&lt;/li>
&lt;li>当サイトで紹介する操作やコマンドの正当性及び、その結果にはいかなる責任も負いません。全て自己責任です。&lt;br>
とはいえ、嘘偽りの情報を意図的に発信するつもりはありません。&lt;br>
少なくとも自分の環境では問題がない事を確認した上で共有するようにしていますが、保証は出来ません。&lt;/li>
&lt;li>バージョン情報もできる限り伝えるようにしています。&lt;br>
更新日時も表示していますので、その情報の新鮮度やバージョンの差異は確認するようお願いいたします。&lt;/li>
&lt;/ul>
&lt;h2 id="pc">#PC&lt;/h2>
&lt;pre class='monospace'>
╭────────────────────────────────╮ 
│ kernel 6.19.6-zen1-1-zen │
│ uptime 1 day, 3 hours, 24 min │
│ shell fish │
│ mem 26.56 GiB / 61.95 GiB │
│ pkgs 2964 │
│ user amgsk │
│ hname arch-desk │
│ distro Arch Linux │
╰────────────────────────────────╯ 
&lt;/pre>
&lt;h2 id="keyboards">#KeyBoards&lt;/h2>
&lt;ul>
&lt;li>Helix Beta&lt;/li>
&lt;li>Corne Cherry&lt;/li>
&lt;li>Corne Cherry lite&lt;/li>
&lt;li>Corne Chocolate&lt;/li>
&lt;li>Lily58&lt;/li>
&lt;li>HHKB Lite2&lt;/li>
&lt;li>HHKB Professional&lt;/li>
&lt;li>HHKB Professional2&lt;/li>
&lt;li>HHKB Type-S&lt;/li>
&lt;li>Realforce GX-1&lt;/li>
&lt;li>Realforce 87U Black&amp;amp;White&lt;/li>
&lt;/ul>
&lt;h2 id="keycaps">#KeyCaps&lt;/h2>
&lt;ul>
&lt;li>MT3 Profile&lt;/li>
&lt;/ul>
&lt;h2 id="3dp">#3DP&lt;/h2>
&lt;ul>
&lt;li>Bambu Lab P1S COMBO(AMS)&lt;/li>
&lt;li>Bambu Lab A1 COMBO(AMS lite)&lt;/li>
&lt;li>Bambu Lab A1 mini&lt;/li>
&lt;/ul>
&lt;h2 id="laser-cutter">#laser cutter&lt;/h2>
&lt;ul>
&lt;li>xTool D1 Pro 20W&lt;/li>
&lt;/ul></description></item><item><title>Gallery</title><link>https://amgsk.dev/gallery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://amgsk.dev/gallery/</guid><description/></item></channel></rss>