<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="/assets/rss-20b3285f.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>标签: i3 - ouuan's blog</title>
        <link>https://ouuan.moe/tag/i3</link>
        <description>标签为 i3 的文章 - ouuan 的博客</description>
        <lastBuildDate>Tue, 15 Oct 2024 17:07:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>Copyright © 2022 - 2026 ouuan
Licensed under CC BY-SA 4.0</copyright>
        <atom:link href="https://ouuan.moe/tag/i3/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[在 i3 中使用多显示器]]></title>
            <link>https://ouuan.moe/post/2024/10/i3-multi-monitor</link>
            <guid>https://ouuan.moe/post/2024/10/i3-multi-monitor</guid>
            <pubDate>Tue, 15 Oct 2024 17:07:34 GMT</pubDate>
            <description><![CDATA[<p>之前我以为大家用多屏都是因为没有 tiling window manager 不会切屏<span class="mojikumi-line-end">，</span>用了才知道竖屏好<span class="mojikumi-line-start">（</span></p>
]]></description>
            <content:encoded><![CDATA[<p>之前我以为大家用多屏都是因为没有 tiling window manager 不会切屏<span class="mojikumi-line-end">，</span>用了才知道竖屏好<span class="mojikumi-line-start">（</span></p>

<p>但两个横屏的话确实就那样吧<span class="mojikumi-line-start">（</span>其实之前看室友也基本上就用一个屏幕然后另一个放壁纸<span class="mojikumi">）</span><span class="mojikumi-line-end">，</span>请买旋转升降支架<span class="mojikumi-line-end">，</span><s>学习使用 tiling window manager<span class="mojikumi-line-start">（</span></s></p>
<h2 id="xrandr-屏幕布局配置" class="heading"><a href="#xrandr-屏幕布局配置" class="heading-anchor" aria-label="章节： xrandr 屏幕布局配置" tabindex="-1"></a><span>xrandr 屏幕布局配置</span></h2>
<p>可以使用 arandr 在 GUI 中调整屏幕布局<span class="mojikumi-line-end">，</span>设置坐标和方向比较方便<span class="mojikumi-line-end">，</span>但它调不了帧率之类的<span class="mojikumi-line-end">，</span>可以保存为脚本之后手动修改<span class="mojikumi-line-end">，</span>在相应的 <code>--output HDMI-0</code> 之后加上 <code>--rate 120</code> 就行<span class="mojikumi-line-end">。</span></p>
<p>我配置了 vertical<span class="mojikumi-line-end">、</span>horizontal<span class="mojikumi-line-end">、</span>single 三种模式<span class="mojikumi-line-end">，</span>用脚本切换<span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" itemprop="hasPart" itemscope itemtype="https://schema.org/SoftwareSourceCode" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" itemprop="programmingLanguage" aria-label="Shell 代码块" data-v-c675dba6>Shell</h3><ile-root id="ile-1"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-1--></div><div class="dark:hidden" itemprop="text" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><code><span><span style="color: #989FB1">#!/bin/bash</span></span>
<span></span>
<span><span style="color: #4876D6">set</span><span style="color: #403F53"> </span><span style="color: #4876D6">-euo</span><span style="color: #403F53"> </span><span style="color: #4876D6">pipefail</span></span>
<span></span>
<span><span style="color: #4876D6">hdmi</span><span style="color: #994CC3">=</span><span style="color: #111111">&quot;</span><span style="color: #C96765">HDMI-0</span><span style="color: #111111">&quot;</span></span>
<span></span>
<span><span style="color: #994CC3">if</span><span style="color: #403F53"> </span><span style="color: #4876D6">xrandr</span><span style="color: #403F53"> </span><span style="color: #0C969B">|</span><span style="color: #403F53"> </span><span style="color: #4876D6">grep</span><span style="color: #403F53"> </span><span style="color: #111111">&quot;</span><span style="color: #4876D6">$hdmi</span><span style="color: #C96765"> connected 1080x1920</span><span style="color: #111111">&quot;</span><span style="color: #403F53">; </span><span style="color: #994CC3">then</span></span>
<span><span style="color: #403F53">    </span><span style="color: #989FB1"># already vertical, switch to horizontal</span></span>
<span><span style="color: #403F53">    </span><span style="color: #4876D6">&quot;$HOME&quot;</span><span style="color: #4876D6">/.screenlayout/horizontal.sh</span></span>
<span><span style="color: #994CC3">elif</span><span style="color: #403F53"> </span><span style="color: #4876D6">xrandr</span><span style="color: #403F53"> </span><span style="color: #0C969B">|</span><span style="color: #403F53"> </span><span style="color: #4876D6">grep</span><span style="color: #403F53"> </span><span style="color: #111111">&quot;</span><span style="color: #4876D6">$hdmi</span><span style="color: #C96765"> connected</span><span style="color: #111111">&quot;</span><span style="color: #403F53">; </span><span style="color: #994CC3">then</span></span>
<span><span style="color: #403F53">    </span><span style="color: #989FB1"># startup or currently horizontal, switch to vertical</span></span>
<span><span style="color: #403F53">    </span><span style="color: #4876D6">&quot;$HOME&quot;</span><span style="color: #4876D6">/.screenlayout/vertical.sh</span></span>
<span><span style="color: #994CC3">else</span></span>
<span><span style="color: #403F53">    </span><span style="color: #989FB1"># HDMI not connected, switch to single</span></span>
<span><span style="color: #403F53">    </span><span style="color: #4876D6">&quot;$HOME&quot;</span><span style="color: #4876D6">/.screenlayout/single.sh</span></span>
<span><span style="color: #994CC3">fi</span></span></code></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><code><span><span style="color: #637777">#!/bin/bash</span></span>
<span></span>
<span><span style="color: #C5E478">set</span><span style="color: #D6DEEB"> </span><span style="color: #82AAFF">-euo</span><span style="color: #D6DEEB"> </span><span style="color: #ECC48D">pipefail</span></span>
<span></span>
<span><span style="color: #C5E478">hdmi</span><span style="color: #C792EA">=</span><span style="color: #D9F5DD">&quot;</span><span style="color: #ECC48D">HDMI-0</span><span style="color: #D9F5DD">&quot;</span></span>
<span></span>
<span><span style="color: #C792EA">if</span><span style="color: #D6DEEB"> </span><span style="color: #82AAFF">xrandr</span><span style="color: #D6DEEB"> </span><span style="color: #7FDBCA">|</span><span style="color: #D6DEEB"> </span><span style="color: #82AAFF">grep</span><span style="color: #D6DEEB"> </span><span style="color: #D9F5DD">&quot;</span><span style="color: #C5E478">$hdmi</span><span style="color: #ECC48D"> connected 1080x1920</span><span style="color: #D9F5DD">&quot;</span><span style="color: #D6DEEB">; </span><span style="color: #C792EA">then</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #637777"># already vertical, switch to horizontal</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">&quot;</span><span style="color: #C5E478">$HOME</span><span style="color: #82AAFF">&quot;</span><span style="color: #82AAFF">/.screenlayout/horizontal.sh</span></span>
<span><span style="color: #C792EA">elif</span><span style="color: #D6DEEB"> </span><span style="color: #82AAFF">xrandr</span><span style="color: #D6DEEB"> </span><span style="color: #7FDBCA">|</span><span style="color: #D6DEEB"> </span><span style="color: #82AAFF">grep</span><span style="color: #D6DEEB"> </span><span style="color: #D9F5DD">&quot;</span><span style="color: #C5E478">$hdmi</span><span style="color: #ECC48D"> connected</span><span style="color: #D9F5DD">&quot;</span><span style="color: #D6DEEB">; </span><span style="color: #C792EA">then</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #637777"># startup or currently horizontal, switch to vertical</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">&quot;</span><span style="color: #C5E478">$HOME</span><span style="color: #82AAFF">&quot;</span><span style="color: #82AAFF">/.screenlayout/vertical.sh</span></span>
<span><span style="color: #C792EA">else</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #637777"># HDMI not connected, switch to single</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">&quot;</span><span style="color: #C5E478">$HOME</span><span style="color: #82AAFF">&quot;</span><span style="color: #82AAFF">/.screenlayout/single.sh</span></span>
<span><span style="color: #C792EA">fi</span></span></code></pre></div></section>
<p>在启动时调用脚本进行初始化<span class="mojikumi-line-end">，</span>在 i3 中可以配置快捷键调用脚本切换布局<span class="mojikumi-line-end">。</span></p>
<h2 id="i3-多显示器配置" class="heading"><a href="#i3-多显示器配置" class="heading-anchor" aria-label="章节： i3 多显示器配置" tabindex="-1"></a><span>i3 多显示器配置</span></h2>
<p>可以参考 <a href="https://i3wm.org/docs/userguide.html#multi_monitor">Multiple monitors - i3 User<span class="mojikumi-narrow-left">’</span>s Guide</a> 的说明<span class="mojikumi-line-end">。</span>配置中用 <code>primary</code> / <code>nonprimary</code> 会比直接写具体的显示器名称更加通用<span class="mojikumi-line-end">，</span>需要在 <code>xrandr</code> 配置中设置 <code>--primary</code><span class="mojikumi-line-end">。</span></p>
<p>默认给各个显示器分配 workspace<span class="mojikumi-line-end">：</span><code>workspace $ws1 output primary</code><span class="mojikumi-line-end">、</span><code>workspace $ws2 output nonprimary</code><span class="mojikumi-line-end">。</span></p>
<p>bar 可以只在一个显示器显示<span class="mojikumi-line-start">（</span><code>bar { output primary }</code><span class="mojikumi">）</span><span class="mojikumi-line-end">，</span>或者在每个显示器都显示<span class="mojikumi-line-end">，</span>配置托盘图标显示在哪<span class="mojikumi-line-end">：</span><code>bar<wbr> { <wbr>tray_output<wbr> <wbr>primary<wbr> }</code><span class="mojikumi-line-end">。</span></p>
<p>绑快捷键<span class="mojikumi-line-end">：</span></p>
<ul>
<li>focus 到另一个显示器<span class="mojikumi-line-end">：</span><code>focus output next</code></li>
<li>移动当前 workspace 到另一个显示器<span class="mojikumi-line-end">：</span><code>move workspace to output next</code></li>
</ul>
<p>我之前一直设的 <code>workspace_<wbr>auto_<wbr>back_<wbr>and_<wbr>forth<wbr> <wbr>yes</code><span class="mojikumi-line-start">（</span>切换 workspace 时如果目标就是当前所在的 workspace<span class="mojikumi-line-end">，</span>就会回到之前所在的 workspace<span class="mojikumi">）</span><span class="mojikumi-line-end">，</span>但是之前就觉得有时候会有些混乱<span class="mojikumi-line-end">，</span>在多显示器时更是容易搞不清当前在哪个 workspace<span class="mojikumi-line-end">，</span>所以把它关了<span class="mojikumi-line-end">。</span></p>
<h2 id="picom-高亮当前窗口" class="heading"><a href="#picom-高亮当前窗口" class="heading-anchor" aria-label="章节： picom 高亮当前窗口" tabindex="-1"></a><span>picom 高亮当前窗口</span></h2>
<p>即使是单显示器<span class="mojikumi-line-end">，</span>高亮当前窗口也是有用的<span class="mojikumi-line-end">，</span>多显示器时尤其有用<span class="mojikumi-line-end">，</span>有助于提示当前在哪个显示器<span class="mojikumi-line-end">。</span></p>
<p>旧版 picom 使用 <code>inactive<wbr>-<wbr>dim</code> 选项<span class="mojikumi-line-end">，</span>现在推荐使用更加灵活的 window rule<span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" aria-label="plain text 代码块" data-v-c675dba6>plain text</h3><ile-root id="ile-2"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-2--></div><div class="dark:hidden" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><samp><span><span style="color: #403f53">rules = (</span></span>
<span><span style="color: #403f53">    { match = &quot;window_type = &#39;normal&#39; &amp;&amp; window_type != &#39;popup_menu&#39; &amp;&amp; !_NET_WM_STATE &amp;&amp; !(focused || group_focused)&quot;; dim = 0.2; },</span></span>
<span><span style="color: #403f53">)</span></span></samp></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><samp><span><span style="color: #d6deeb">rules = (</span></span>
<span><span style="color: #d6deeb">    { match = &quot;window_type = &#39;normal&#39; &amp;&amp; window_type != &#39;popup_menu&#39; &amp;&amp; !_NET_WM_STATE &amp;&amp; !(focused || group_focused)&quot;; dim = 0.2; },</span></span>
<span><span style="color: #d6deeb">)</span></span></samp></pre></div></section>
<p><span class="mojikumi-line-start">（</span>这里 <code>window_type<wbr> != '<wbr>popup_menu<wbr>'</code> 主要是为了 konsole 的菜单<span class="mojikumi-line-end">，</span>它同时是 <code>popup_menu</code> 和 <code>normal</code><span class="mojikumi-line-end">；</span><code>_<wbr>NET_<wbr>WM_<wbr>STATE</code> 主要是为了 <code>rofi</code><span class="mojikumi-line-end">，</span>它没设 window type<span class="mojikumi-line-end">，</span>但有 <code>_<wbr>NET_<wbr>WM_<wbr>STATE_<wbr>ABOVE</code><span class="mojikumi">。</span><span class="mojikumi-line-end">）</span></p>
<h2 id="调整-dpi-修复字体和光标大小" class="heading"><a href="#调整-dpi-修复字体和光标大小" class="heading-anchor" aria-label="章节： 调整 DPI 修复字体和光标大小" tabindex="-1"></a><span>调整 DPI 修复字体和光标大小</span></h2>
<p>由于不同显示器 DPI 不同<span class="mojikumi-line-end">，</span>字体大小之类的可能出问题<span class="mojikumi-line-end">。</span></p>
<p>在 Xorg 启动后<span class="mojikumi-line-end">、</span>i3 启动前<span class="mojikumi-line-end">，</span>使用 <code>xrandr --dpi</code> 调整 DPI 可以改变 i3 窗口标题和 bar 的字体大小<span class="mojikumi-line-end">，</span>例如 <code>xrandr --dpi 144</code> / <code>xrandr --dpi DP-2</code><span class="mojikumi-line-end">。</span></p>
<p>调整 DPI 似乎并不能修复光标大小<span class="mojikumi-line-end">，</span>可以在 <code>~/.<wbr>Xresources</code> 中设置 <code>Xcursor<wbr>.<wbr>size<wbr>: <wbr>24</code><span class="mojikumi-line-end">，</span>然后在启动时加载 <code>xrdb<wbr> -<wbr>merge<wbr> ~/.<wbr>Xresources</code><span class="mojikumi-line-end">。</span><sup><a href="#user-content-fn-xcursor-size" id="user-content-fnref-xcursor-size" data-footnote-ref aria-describedby="footnote-label">1</a></sup></p>
<p>fcitx5 会根据各个屏幕的 DPI 分别调整字体大小<span class="mojikumi-line-end">，</span>可以在 classic user interface 的设置中禁用 <span class="mojikumi">“</span>use per screen DPI<span class="mojikumi">”</span><span class="mojikumi-line-end">。</span></p>
<h2 id="i3lock-布局配置" class="heading"><a href="#i3lock-布局配置" class="heading-anchor" aria-label="章节： i3lock 布局配置" tabindex="-1"></a><span>i3lock 布局配置</span></h2>
<p>position 是基于整个 screen 而非单个 display<span class="mojikumi-line-end">，</span>所以需要分别加上 <code>x</code> 和 <code>y</code><span class="mojikumi-line-end">：</span></p>
<blockquote>
<ul>
<li>
<p><code>x</code> - x position of the current display.
Corresponds to the leftmost column of pixels on that display.</p>
</li>
<li>
<p><code>y</code> - y position of the current display.
Corresponds to the topmost row of pixels on that display.</p>
</li>
</ul>
</blockquote>
<p>坐标计算可以基于 <code>w</code> 和 <code>h</code> 来同时适配横屏和竖屏<span class="mojikumi-line-end">，</span>例如<span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" itemprop="hasPart" itemscope itemtype="https://schema.org/SoftwareSourceCode" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" itemprop="programmingLanguage" aria-label="Shell 代码块" data-v-c675dba6>Shell</h3><ile-root id="ile-3"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-3--></div><div class="dark:hidden" itemprop="text" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><code><span><span style="color: #403F53">    </span><span style="color: #4876D6">--ind-pos</span><span style="color: #403F53"> </span><span style="color: #111111">&quot;</span><span style="color: #C96765">x+w/2:y+h/2-35</span><span style="color: #111111">&quot;</span><span style="color: #403F53"> </span><span style="color: #AA0982">\</span></span>
<span><span style="color: #403F53">    </span><span style="color: #4876D6">--greeter-pos</span><span style="color: #403F53"> </span><span style="color: #111111">&quot;</span><span style="color: #C96765">ix:iy+h/6+160</span><span style="color: #111111">&quot;</span><span style="color: #403F53"> </span><span style="color: #AA0982">\</span></span>
<span><span style="color: #403F53">    </span><span style="color: #4876D6">--time-pos</span><span style="color: #403F53"> </span><span style="color: #111111">&quot;</span><span style="color: #C96765">ix:iy+h/8+100</span><span style="color: #111111">&quot;</span><span style="color: #403F53"> </span><span style="color: #AA0982">\</span></span></code></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><code><span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">--ind-pos</span><span style="color: #D6DEEB"> </span><span style="color: #D9F5DD">&quot;</span><span style="color: #ECC48D">x+w/2:y+h/2-35</span><span style="color: #D9F5DD">&quot;</span><span style="color: #D6DEEB"> </span><span style="color: #F78C6C">\</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">--greeter-pos</span><span style="color: #D6DEEB"> </span><span style="color: #D9F5DD">&quot;</span><span style="color: #ECC48D">ix:iy+h/6+160</span><span style="color: #D9F5DD">&quot;</span><span style="color: #D6DEEB"> </span><span style="color: #F78C6C">\</span></span>
<span><span style="color: #D6DEEB">    </span><span style="color: #82AAFF">--time-pos</span><span style="color: #D6DEEB"> </span><span style="color: #D9F5DD">&quot;</span><span style="color: #ECC48D">ix:iy+h/8+100</span><span style="color: #D9F5DD">&quot;</span><span style="color: #D6DEEB"> </span><span style="color: #F78C6C">\</span></span></code></pre></div></section>
<h2 id="背景图片适配修复" class="heading"><a href="#背景图片适配修复" class="heading-anchor" aria-label="章节： 背景图片适配修复" tabindex="-1"></a><span>背景图片适配修复</span></h2>
<p>为了同时适配横屏和竖屏<span class="mojikumi-line-end">，</span>如果<span class="mojikumi-line-start">（</span><code>i3lock</code><span class="mojikumi-line-end">、</span><code>konsole</code><span class="mojikumi-line-end">、</span><code>feh</code> 等<span class="mojikumi-line-end">）</span>背景图片是少量元素 + 大片背景<span class="mojikumi-line-end">，</span>可以上下扩展背景编辑成竖屏<span class="mojikumi-line-end">，</span>再用 centered / crop 显示<span class="mojikumi-line-end">，</span>横屏时上下背景被截掉就可以正好显示中间的元素<span class="mojikumi-line-end">。</span>其中 konsole 还可以设置 anchor 的位置<span class="mojikumi-line-end">，</span>就不一定要放正中间<span class="mojikumi-line-end">，</span>例如可以放最下面<span class="mojikumi-line-start">（</span><span class="heimu">我用的背景 <a href="https://www.pixiv.net/artworks/78468574">78468574</a> 就很适合放下面</span><span class="mojikumi">）</span><span class="mojikumi-line-end">。</span></p>
<p>屏幕布局<span class="mojikumi-line-start">（</span>旋转方向<span class="mojikumi-line-end">）</span>发生改变时<span class="mojikumi-line-end">，</span>使用 <code>feh</code> 设置的桌面背景可能会乱掉<span class="mojikumi-line-end">，</span>可以在每次布局改变后重新调用 <code>feh</code> 设置背景<span class="mojikumi-line-end">，</span>放在调整屏幕布局的脚本里即可<span class="mojikumi-line-end">；</span>也可以为横竖屏设置不同的背景<span class="mojikumi-line-end">。</span></p>
<h2 id="为不同显示器设置不同壁纸" class="heading"><a href="#为不同显示器设置不同壁纸" class="heading-anchor" aria-label="章节： 为不同显示器设置不同壁纸" tabindex="-1"></a><span>为不同显示器设置不同壁纸</span></h2>
<p>给 <code>feh</code> 传多个文件名参数就可以依次为各个显示器设置不同的壁纸<span class="mojikumi-line-end">。</span>使用 <code>xrandr<wbr> --<wbr>listmonitors</code> 查看显示器的顺序<span class="mojikumi-line-end">。</span></p>
<h2 id="禁用-hdmi-音频输出" class="heading"><a href="#禁用-hdmi-音频输出" class="heading-anchor" aria-label="章节： 禁用 HDMI 音频输出" tabindex="-1"></a><span>禁用 HDMI 音频输出</span></h2>
<p>在连接到外部显示器后我的 pulseaudio 会自动切换到 HDMI 音频输出<span class="mojikumi-line-end">，</span>手动修改 default sink 也没有用<span class="mojikumi-line-end">，</span>在 xrandr 中禁用 HDMI output 就可以恢复正常<span class="mojikumi-line-end">。</span></p>
<p>单次修复可以手动在 <code>pavucontrol</code> 的 <span class="mojikumi">“</span>Configuration<span class="mojikumi">”</span> 中将外部输出的 profile 设为 <span class="mojikumi">“</span>Off<span class="mojikumi">”</span><span class="mojikumi-line-end">，</span>自动修复可以在启动时执行 <code>pactl<wbr> <wbr>set<wbr>-<wbr>card<wbr>-<wbr>profile<wbr> &#x3C;<wbr>card<wbr>> <wbr>off</code><span class="mojikumi-line-end">，</span>其中 card 名称可以通过 <code>pactl list cards</code> 得到<span class="mojikumi-line-end">。</span><sup><a href="#user-content-fn-pulseaudio-hdmi" id="user-content-fnref-pulseaudio-hdmi" data-footnote-ref aria-describedby="footnote-label">2</a></sup></p>
<p>另外还有一种更粗暴的方法是禁用 <code>snd_<wbr>hda_<wbr>codec_<wbr>hdmi</code><span class="mojikumi-line-end">，</span>只不过我这里 blacklist 不管用<span class="mojikumi-line-end">，</span>要执行 <code>rmmod<wbr> -<wbr>f<wbr> <wbr>snd_<wbr>hda_<wbr>codec_<wbr>hdmi</code> 才行<span class="mojikumi-line-end">。</span><sup><a href="#user-content-fn-rmmod-hdmi" id="user-content-fnref-rmmod-hdmi" data-footnote-ref aria-describedby="footnote-label">3</a></sup></p>
<h2 id="限制鼠标跨屏移动" class="heading"><a href="#限制鼠标跨屏移动" class="heading-anchor" aria-label="章节： 限制鼠标跨屏移动" tabindex="-1"></a><span>限制鼠标跨屏移动</span></h2>
<p>多显示器时鼠标光标可以通过屏幕边缘在各个显示器之间移动<span class="mojikumi-line-end">，</span>这在一般的 window manager 中是必不可少的功能<span class="mojikumi-line-end">，</span>但在 i3 中就没必要了<span class="mojikumi-line-end">，</span>反而容易带来麻烦<span class="mojikumi-line-end">，</span>导致移动光标到屏幕边缘更加困难<span class="mojikumi-line-end">。</span></p>
<p>如果将屏幕布局设置为两个显示器角对角只有一个像素相交<span class="mojikumi-line-end">，</span>从一个显示器移动到另一个显示器就只能在这一个像素进行<span class="mojikumi-line-end">，</span>能一定程度上缓解问题<span class="mojikumi-line-end">。</span>但实际上<span class="mojikumi-line-end">，</span>由于光标会卡在屏幕边缘<span class="mojikumi-line-end">，</span>角落的这一个像素其实很容易移动到<span class="mojikumi-line-end">，</span>还是很容易意外滑到另一个显示器<span class="mojikumi-line-end">。</span>另外<span class="mojikumi-line-end">，</span>虽然空出来的大量屏幕空间不会显示出来<span class="mojikumi-line-end">，</span>但仍然会占用显存<span class="mojikumi-line-end">，</span>也可能导致神秘渲染问题<sup><a href="#user-content-fn-pointer-barrier" id="user-content-fnref-pointer-barrier" data-footnote-ref aria-describedby="footnote-label">4</a></sup><span class="mojikumi-line-end">。</span></p>
<p>更好的解决方法是使用 <code>xpointerbarrier</code><span class="mojikumi-line-end">，</span>可以在 AUR 安装<span class="mojikumi-line-end">，</span>运行 <code>xpointerbarrier<wbr> <wbr>0<wbr> <wbr>0<wbr> <wbr>0<wbr> <wbr>0</code> 即可<span class="mojikumi-line-end">。</span><sup><a href="#user-content-fn-pointer-barrier" id="user-content-fnref-pointer-barrier-2" data-footnote-ref aria-describedby="footnote-label">4</a></sup><span class="mojikumi-line-start">（</span>我实测这个 barrier 并不 100% 靠谱<span class="mojikumi-line-end">，</span>大力多晃几次鼠标可以越过去<span class="mojikumi-line-end">，</span>但实际使用中效果还行<span class="mojikumi">。</span><span class="mojikumi-line-end">）</span></p>
<p>但 <code>xpointerbarrier</code> 只是限制了光标<span class="mojikumi-line-end">，</span>在 i3 中 focus / move 时依然可以跨屏<span class="mojikumi-line-end">，</span>不会 wrap around<span class="mojikumi-line-start">（</span>循环<span class="mojikumi">）</span><span class="mojikumi-line-end">，</span>设置为对角布局可以解决这个问题<span class="mojikumi-line-end">。</span>对于 focus<span class="mojikumi-line-end">，</span>还有一种办法是设置 <code>focus_<wbr>wrapping<wbr> <wbr>workspace</code> 来避免 focus 到另一个显示器<span class="mojikumi-line-end">，</span>但 move 并没有类似的设置<span class="mojikumi-line-end">，</span>倒是影响不大<span class="mojikumi-line-end">。</span></p>
<p>只不过<span class="mojikumi-line-end">，</span>如果不设置为对角布局<span class="mojikumi-line-end">，</span>光标跨屏显示可能会令人困惑<span class="mojikumi-line-end">，</span>而且也有小概率不小心越过 barrier<span class="mojikumi-line-end">，</span>所以设置对角布局也有其好处<span class="mojikumi-line-start">（</span>如果不缺显存的话<span class="mojikumi">）</span><span class="mojikumi-line-end">。</span></p>
<h2 id="dunst-通知跟随当前显示器" class="heading"><a href="#dunst-通知跟随当前显示器" class="heading-anchor" aria-label="章节： dunst 通知跟随当前显示器" tabindex="-1"></a><span>dunst 通知跟随当前显示器</span></h2>
<p>在 <code>~/.<wbr>config<wbr>/<wbr>dunst<wbr>/<wbr>dunstrc</code> 中可以修改通知显示在哪个显示器<span class="mojikumi-line-end">，</span>其中 <code>follow</code> 选项可以根据当前的 focus 改变通知显示的位置<span class="mojikumi-line-end">。</span></p>
<h2 id="解决运行时连接显示器导致黑屏" class="heading"><a href="#解决运行时连接显示器导致黑屏" class="heading-anchor" aria-label="章节： 解决运行时连接显示器导致黑屏" tabindex="-1"></a><span>解决运行时连接显示器导致黑屏</span></h2>
<p>我观察到如果开机后再连接显示器<span class="mojikumi-line-end">，</span>切换布局后会黑屏<span class="mojikumi-line-end">。</span>后来确认是 picom 使用 glx / egl backend 时的问题<span class="mojikumi-line-end">，</span>使用 xrender 就不会这样<span class="mojikumi-line-end">。</span>关闭 / 重启 picom 就可以恢复显示<span class="mojikumi-line-end">，</span>但 Firefox 也会卡一会儿<span class="mojikumi-line-end">，</span>应该也是 OpenGL 相关问题<span class="mojikumi-line-end">。</span>暂不清楚具体原因以及彻底修复的方法<span class="mojikumi-line-end">，</span>目前我的 workaround 是在切换布局的脚本中重启 picom<span class="mojikumi-line-end">。</span></p>
<p>log 里观察到大量 <code>Duplicate vblank event found with msc</code><span class="mojikumi-line-end">，</span>可能和 <a href="https://github.com/yshui/picom/issues/1265">https<wbr>://<wbr>github<wbr>.<wbr>com<wbr>/<wbr>yshui<wbr>/<wbr>picom<wbr>/<wbr>issues<wbr>/<wbr>1265</a> 相关<span class="mojikumi-line-end">，</span>下个版本看看会不会好<span class="mojikumi-line-end">。</span></p>
<section data-footnotes class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-xcursor-size">
<p><a href="https://www.reddit.com/r/i3wm/comments/8ix88z/how_can_i_change_the_mouse_cursor_size/">How can I change the mouse cursor size : r/i3wm</a> <a href="#user-content-fnref-xcursor-size" data-footnote-backref class="data-footnote-backref" aria-label="Back to content">↩</a></p>
</li>
<li id="user-content-fn-pulseaudio-hdmi">
<p><a href="https://askubuntu.com/questions/15497/how-to-remove-nvidia-hdmi-audio-output-in-pulseaudio/">How to remove Nvidia HDMI audio output in PulseAudio? - Ask Ubuntu</a> <a href="#user-content-fnref-pulseaudio-hdmi" data-footnote-backref class="data-footnote-backref" aria-label="Back to content">↩</a></p>
</li>
<li id="user-content-fn-rmmod-hdmi">
<p><a href="https://bbs.archlinux.org/viewtopic.php?id=253258">[SOLVED] How to disable nvidia hdmi audio? / Kernel &#x26; Hardware / Arch Linux Forums</a> <a href="#user-content-fnref-rmmod-hdmi" data-footnote-backref class="data-footnote-backref" aria-label="Back to content">↩</a></p>
</li>
<li id="user-content-fn-pointer-barrier">
<p><a href="https://bbs.archlinux.org/viewtopic.php?id=258091">[SOLVED]Multihead: is there a way to forbid mouse from leaving screen? / Applications &#x26; Desktop Environments / Arch Linux Forums</a> <a href="#user-content-fnref-pointer-barrier" data-footnote-backref class="data-footnote-backref" aria-label="Back to content">↩</a> <a href="#user-content-fnref-pointer-barrier-2" data-footnote-backref class="data-footnote-backref" aria-label="Back to content">↩<sup>2</sup></a></p>
</li>
</ol>
</section>]]></content:encoded>
            <category domain="https://ouuan.moe/tag/i3">i3</category>
            <category domain="https://ouuan.moe/tag/Arch%20Linux">Arch Linux</category>
            <category domain="https://ouuan.moe/tag/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB">经验分享</category>
        </item>
    </channel>
</rss>