<div class="sect1"> <h2 id="_免责声明">免责声明</h2> <div class="sectionbody"> <div class="admonitionblock caution"> <table> <tr> <td class="icon"> <div class="title">Caution</div> </td> <td class="content"> <div class="paragraph"> <p>本文内容仅为交流目的,不保证在任何情况下均可达到预期效果,同时所涉及操作存在一定风险,因此造成的任何损失本人概不负责,请在继续操作前慎重考虑。</p> </div> <div class="paragraph"> <p>此外,请务必对数据进行备份,以免造成不必要的损失。</p> </div> </td> </tr> </table> </div> </div> </div> <div class="sect1"> <h2 id="_写在前面">写在前面</h2> <div class="sectionbody"> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/gole-1-pro-bfad6ef6-d441-3921-94a4-75ec312a3673.jpg" alt="gole-1-pro"/> <div class="paragraph"> <p>最近入手了一台高乐 <code>Gole 1 Pro</code> 小主机,自带了 5.5 英寸触摸屏和电池,十分小巧便携。</p> </div> <div class="paragraph"> <p>由于小主机没有自带风扇,所以为了降低发热,我分出 60GB 安装了 <code>Kubuntu</code>。其实系统的安装过程并没有什么特别,但安装之后存在一些重要的问题,需要手动解决,记录如下文。</p> </div> <div class="quoteblock"> <blockquote> <div class="paragraph"> <p>Linux 下具体的问题表现为:</p> </div> <div class="ulist"> <ul> <li> <p>没有 <code>WiFi</code></p> </li> <li> <p>没有声音,但耳机可用</p> </li> <li> <p>始终显示 <code>“未在充电”</code></p> </li> <li> <p>界面是旋转显示的状态</p> </li> </ul> </div> </blockquote> </div> </div> </div> <div class="sect1"> <h2 id="_问题修复">问题修复</h2> <div class="sectionbody"> <div class="paragraph"> <p>相关文件和包均已上传到 <code>gitee</code> 仓库:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo apt install git git clone https://gitee.com/meniny/gole-1-pro-linux-fix.git cd gole-1-pro-linux-fix/</code></pre> </div> </div> <div class="admonitionblock caution"> <table> <tr> <td class="icon"> <div class="title">Caution</div> </td> <td class="content"> <div class="paragraph"> <p>虽然已经附带离线的内核以及网卡驱动、蓝牙驱动源代码等,但并没有附带编译工具、<code>ALSA</code> 的离线包,建议通过网线或 <code>Linux</code> 免驱的外置无线网卡连接到网络。</p> </div> <div class="paragraph"> <p>淘宝可以很容易找到 <code>COMFAST CF-WU810N</code> 外置无线网卡,大概不到 20 元。</p> </div> </td> </tr> </table> </div> <div class="sect2"> <h3 id="_画面旋转">画面旋转</h3> <div class="paragraph"> <p>首先是屏幕旋转的问题,登录后桌面的旋转可以在设置中的显示设置中进行配置,各种桌面环境中都大同小异,这里就不赘述了。</p> </div> <div class="paragraph"> <p>比较重要的是登录界面旋转和触摸屏旋转。</p> </div> <div class="sect3"> <h4 id="_登录界面">登录界面</h4> <div class="paragraph"> <p>由于我使用的是 <code>Kubuntu</code>,因此默认使用 <code>sddm</code> 作为 <code>Display Manager</code>。</p> </div> <div class="paragraph"> <p>那么,首先我们确定一下显示器的名称:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">xrandr</code></pre> </div> </div> <div class="paragraph"> <p>输出的结果显示:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">Screen 0: minimum 320 x 200, current 1280 x 720, maximum 16384 x 16384 DSI-1 connected primary 1280x720+0+0 right (normal left inverted right x axis y axis) 0mm x 0mm 720x1280 60.00*+ 1280x720 60.00 960x720 60.00 …</code></pre> </div> </div> <div class="paragraph"> <p>这里记录 <code>DSI-1</code> 即可,接下来编辑 <code>sddm</code> 配置来旋转登录界面:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo nano /etc/sddm.conf</code></pre> </div> </div> <div class="paragraph"> <p>加入下面的内容,如果 <code>[X11]</code> 已经存在,则加入到已存在的组中即可:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">[X11] DisplayCommand=/usr/share/sddm/scripts/Xsetup</code></pre> </div> </div> <div class="paragraph"> <p>继续编辑 <code>/usr/share/sddm/scripts/Xsetup</code> 文件:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo nano /usr/share/sddm/scripts/Xsetup</code></pre> </div> </div> <div class="paragraph"> <p>加入下面的内容:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">xrandr --output DSI-1 --rotate right</code></pre> </div> </div> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效。</p> </div> <div class="quoteblock"> <blockquote> <div class="paragraph"> <p>其他 <code>DM</code> 的旋转方法其实也大同小异,可以到 <code>Google</code> 搜索,例如 <code>rotate lightdm</code>, <code>rotate gdm</code> 等。</p> </div> </blockquote> </div> </div> <div class="sect3"> <h4 id="_触屏操控">触屏操控</h4> <div class="paragraph"> <p>接下来,你会发现触摸屏的操作是不正确的,点击与实际响应的位置不一致。</p> </div> <div class="paragraph"> <p>那么首先我们确认一下触屏设备的名称:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">xinput -list</code></pre> </div> </div> <div class="paragraph"> <p>可以很明显的找到触屏设备,也即 <code>Goodix Capacitive TouchScreen</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ BY Tech Air60 id=9 [slave pointer (2)] ⎜ ↳ Logitech MX Master 3 id=11 [slave pointer (2)] ⎜ ↳ Telink Wireless Receiver Mouse id=14 [slave pointer (2)] ⎜ ↳ Telink Wireless Receiver Consumer Control id=17 [slave pointer (2)] ⎜ ↳ Goodix Capacitive TouchScreen id=20 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Telink Wireless Receiver System Control id=8 [slave keyboard (3)] ↳ BY Tech Air60 id=10 [slave keyboard (3)] ↳ Logitech MX Master 3 id=12 [slave keyboard (3)] ↳ Intel HID events id=13 [slave keyboard (3)] ↳ Intel HID 5 button array id=15 [slave keyboard (3)] ↳ Telink Wireless Receiver id=16 [slave keyboard (3)] ↳ Telink Wireless Receiver Consumer Control id=18 [slave keyboard (3)] ↳ BY Tech Air60 id=19 [slave keyboard (3)] ↳ Goodix Capacitive TouchScreen id=21 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=22 [slave keyboard (3)]</code></pre> </div> </div> <div class="paragraph"> <p>接下来我们需要编辑 <code>~/.profile</code> 文件:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">nano ~/.profile</code></pre> </div> </div> <div class="paragraph"> <p>在文件末尾加入下面的命令:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh"># Rotate TouchScreen to Right xrandr -o right xinput set-prop 'pointer:Goodix Capacitive TouchScreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1</code></pre> </div> </div> <div class="paragraph"> <p>保存后,执行 <code>source ~/.profile</code> 即可生效。</p> </div> <div class="quoteblock"> <blockquote> <div class="paragraph"> <p>如果有兴趣,可以阅读 <a href="https://wiki.ubuntu.com/X/InputCoordinateTransformation">Ubuntu Wiki 文档</a> 了解其背后的逻辑。</p> </div> </blockquote> </div> <div class="sect4"> <h5 id="_横竖切换">横竖切换</h5> <div class="paragraph"> <p>现在触摸屏可以正常工作了。如果希望随时切换横竖屏的话,我们需要创建两个脚本:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">nano ~/landscape.sh</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">#!/bin/sh # Rotate TouchScreen to Right xrandr -o right xinput set-prop 'pointer:Goodix Capacitive TouchScreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">nano ~/portrait.sh</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">#!/bin/sh # Rotate TouchScreen back to Normal xrandr -o normal xinput set-prop 'pointer:Goodix Capacitive TouchScreen' 'Coordinate Transformation Matrix' 0 0 0 0 0 0 0 0 0</code></pre> </div> </div> <div class="paragraph"> <p>并通过 <code>chmod +x ~/landscape.sh</code>/<code>chmod +x ~/portrait.sh</code> 赋予执行权限,以后只需要根据需要运行这两个脚本中的一个,就可以进行横竖屏切换了。</p> </div> <div class="paragraph"> <p>更进一步的,你还可以创建两个图标方便操作:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">nano ~/Desktop/landscape.desktop</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">[Desktop Entry] Name=Landscape Comment=Rotate the screen of Gole 1 Pro to landscape Exec=bash -c 'xrandr -o right; xinput set-prop "pointer:Goodix Capacitive TouchScreen" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1' Icon=utilities-terminal Terminal=true Type=Application Categories=Application;</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">nano ~/Desktop/portrait.desktop</code></pre> </div> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">[Desktop Entry] Name=Portrait Comment=Rotate the screen of Gole 1 Pro to portrait Exec=bash -c 'xrandr -o normal; xinput set-prop "pointer:Goodix Capacitive TouchScreen" "Coordinate Transformation Matrix" 0 0 0 0 0 0 0 0 0' Icon=utilities-terminal Terminal=true Type=Application Categories=Application;</code></pre> </div> </div> <div class="paragraph"> <p>并通过 <code>chmod +x ~/Desktop/landscape.desktop</code>/<code>chmod +x ~/Desktop/portrait.desktop</code> 赋予执行权限,以后只需要根据需要点击桌面上的图标,就可以进行横竖屏切换了。</p> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/tsicons-12b0c3ef-f510-3203-8c64-766b07ad078d.jpg" alt="tsicons"/> </div> </div> </div> <div class="sect2"> <h3 id="_内核回退">内核回退</h3> <div class="admonitionblock caution"> <table> <tr> <td class="icon"> <div class="title">Caution</div> </td> <td class="content"> <div class="paragraph"> <p>截止至本文完成时,最新的稳定内核是 <code>6.2.0</code>,但是网卡驱动并没有找到能<a href="https://github.com/lwfinger/rtw89">在 <code>5.18</code> 以上内核运行</a>正常的版本,所以只好回退内核到 <code>5.15.0-79</code> 版本。</p> </div> </td> </tr> </table> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo apt update sudo apt --fix-missing install linux-headers-5.15.0-79-generic linux-image-5.15.0-79-generic linux-modules-5.15.0-79-generic linux-modules-extra-5.15.0-79-generic</code></pre> </div> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <div class="paragraph"> <p>如果你现在没有网络,或者无法在 <code>Ubuntu</code> 仓库找到对应的包,可以直接安装 <code>gitee</code> 仓库中的相关包:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo dpkg -i linux-headers-5.15.0-79_5.15.0-79.86_all.deb linux-headers-5.15.0-79-generic_5.15.0-79.86_amd64.deb linux-image-5.15.0-79-generic_5.15.0-79.86_amd64.deb linux-modules-5.15.0-79-generic_5.15.0-79.86_amd64.deb linux-modules-extra-5.15.0-79-generic_5.15.0-79.86_amd64.deb</code></pre> </div> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效,并且<strong>在 GRUB 界面选择 Ubuntu, with kernel 5.15.0-79-generic</strong> 启动。</p> </div> </div> <div class="sect2"> <h3 id="_grub">GRUB</h3> <div class="sect3"> <h4 id="_默认内核">默认内核</h4> <div class="paragraph"> <p>方便起见可以直接修改 <code>/etc/default/grub</code> 通过 <code>GRUB_DEFAULT=0</code> 来控制默认的内核。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo nano /etc/default/grub</code></pre> </div> </div> <div class="paragraph"> <p>如果你的情况和我一样,在默认内核的基础上安装了上述的内核,那么 <code>5.15.0-79-generic</code> 很可能是 <code>GRUB</code> 菜单中 <span class="underline">第 2 项的第 3 个子项</span>。那么我们需要将 <code>GRUB_DEFAULT=0</code> 改为 <code>GRUB_DEFAULT='1>2'</code>,因为所有的序列都是从 <code>0</code> 开始编号的。</p> </div> <div class="paragraph"> <p>完成后<strong>务必</strong>要执行 <code>sudo update-grub</code> 进行更新。</p> </div> <div class="paragraph"> <p>如果后续安装了新内核,最好确认一下是否需要更改默认内核。</p> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/grub-5a305ab3-fb02-3c1b-9dbf-655a5c3cbdf3.jpg" alt="grub"/> </div> <div class="sect3"> <h4 id="_终端旋转">终端旋转</h4> <div class="paragraph"> <p>类似的,我们还需要修改 <code>GRUB_CMDLINE_LINUX_DEFAULT</code>、<code>GRUB_CMDLINE_LINUX</code>、<code>GRUB_GFXMODE</code> 来旋转开关机时的终端界面:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">GRUB_CMDLINE_LINUX_DEFAULT="video=efifb fbcon=rotate_all:1 quiet" GRUB_CMDLINE_LINUX="video=efifb fbcon=rotate_all:1 quiet splash"
GRUB_GFXMODE=1280x720,auto</code></pre> </div> </div> <div class="paragraph"> <p>完成后需要执行 <code>sudo update-grub</code> 并<strong>重启系统</strong>生效。</p> </div> </div> </div> <div class="sect2"> <h3 id="_充电状态">充电状态</h3> <div class="paragraph"> <p>如果充电状态或电量显示出现异常,需要安装 `linux-hwe-5.15-headers-5.15.0-79:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo apt install linux-hwe-5.15-headers-5.15.0-79</code></pre> </div> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <div class="paragraph"> <p>如果你现在没有网络,或者无法在 <code>Ubuntu</code> 仓库找到对应的包,可以直接安装 <code>gitee</code> 仓库中的相关包:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo dpkg -i linux-hwe-5.15-headers-5.15.0-79_5.15.0-79.86~20.04.2_all.deb</code></pre> </div> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效,并且<strong>在 GRUB 界面选择 Ubuntu, with kernel 5.15.0-79-generic</strong> 启动。</p> </div> </div> <div class="sect2"> <h3 id="_无线网络">无线网络</h3> <div class="paragraph"> <p>由于驱动需要自己 <code>make</code>,所以我们需要安装依赖:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo apt --fix-missing install gcc bc make build-essential</code></pre> </div> </div> <div class="paragraph"> <p>接下来安装 <code>rtl8852BE_WiFi_linux_v1.19.7.0-18-gee24b6aac.20230614_PC</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">cd rtl8852BE_WiFi_linux_v1.19.7.0-18-gee24b6aac.20230614_PC/ make -j8 sudo make install sudo modprobe 8852be</code></pre> </div> </div> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效,并且<strong>在 GRUB 界面选择 Ubuntu, with kernel 5.15.0-79-generic</strong> 启动。</p> </div> </div> <div class="sect2"> <h3 id="_蓝牙扫描">蓝牙扫描</h3> <div class="paragraph"> <p>你可能已经发现,此时蓝牙出现了异常,不能扫描甚至不能启动。现在我们来<a href="https://github.com/HRex39/rtl8852be_bt.git">解决这个问题</a>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">#相对与刚才的网卡驱动目录 cd ../rtl8852be_bt make sudo make install sudo modprobe btusb</code></pre> </div> </div> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效,并且<strong>在 GRUB 界面选择 Ubuntu, with kernel 5.15.0-79-generic</strong> 启动。</p> </div> </div> <div class="sect2"> <h3 id="_声音播放">声音播放</h3> <div class="paragraph"> <p>当然,首先要确定驱动是否安装正常:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">inxi -A</code></pre> </div> </div> <div class="paragraph"> <p>如果音频设备的 <code>driver</code> 显示 <code>snd_hda_intel</code> 则正常。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">Audio: Device-1: Intel Celeron/Pentium Silver Processor High Definition Audio driver: snd_hda_intel Sound Server-1: ALSA v: k5.15.0-79-generic running: yes Sound Server-2: PulseAudio v: 15.99.1 running: yes Sound Server-3: PipeWire v: 0.3.48 running: yes</code></pre> </div> </div> <div class="quoteblock"> <blockquote> <div class="paragraph"> <p>如果没有 <code>inxi</code> 可以通过 <code>sudo apt install inxi</code> 进行安装。</p> </div> </blockquote> </div> <div class="paragraph"> <p>接下来安装 <code>ALSA</code> 相关工具:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">sudo apt --fix-missing install alsa-base alsa-utils alsa-tools alsa-tools-gui alsamixergui</code></pre> </div> </div> <div class="paragraph"> <p>通过 <code>aplay -l</code> 可以看到我们的音频设备是 <code>Realtek ALC269VB Analog</code>。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">* PLAYBACK 硬體裝置清單 * card 0: PCH [HDA Intel PCH], device 0: ALC269VB Analog [ALC269VB Analog] 子设备: 1/1 子设备 #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0] 子设备: 1/1 子设备 #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1] 子设备: 1/1 子设备 #0: subdevice #0 …</code></pre> </div> </div> <div class="paragraph"> <p>启动 <code>HDAJackRetask</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">hdajackretask</code></pre> </div> </div> <div class="paragraph"> <p>在出现的 <code>HDAJackRetask</code> 程序界面中:</p> </div> <div class="ulist"> <ul> <li> <p>最上方 <code>Select a codec</code> 处选择 <code>Realtek ALC269VB</code></p> </li> <li> <p>勾选 <code>Internel Speaker</code> 一栏的 <code>Override</code></p> </li> <li> <p>选择 <code>Line Out (Front)</code> 项</p> </li> <li> <p>点击 <code>Install boot override</code></p> </li> </ul> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/hdajackretask-4ccd630e-0058-3e8d-86af-2a10c48c30df.jpg" alt="hdajackretask"/> <div class="paragraph"> <p>安装完成之后需要<strong>重启系统</strong>生效,并且<strong>在 GRUB 界面选择 Ubuntu, with kernel 5.15.0-79-generic</strong> 启动。</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <div class="paragraph"> <p>如果仍旧存在问题,可以尝试手动执行 <code>sudo alsa force-reload</code>。</p> </div> </td> </tr> </table> </div> </div> </div> </div> <div class="sect1"> <h2 id="_扩展_tldr">扩展 TLDR;</h2> <div class="sectionbody"> <div class="paragraph"> <p>至此,在 <code>Linux</code> (<code>Kubuntu with kernel 5.15.0-79-generic</code>) 环境下的网络、蓝牙、音频、画面等问题已经全部解决。</p> </div> <div class="paragraph"> <p>后续,如果感兴趣的话,在理论上你也可以手动编译内核,并加入正确的驱动。</p> </div> <div class="paragraph"> <p>可以通过以下页面获取资源:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/torvalds/linux/tree/master/drivers">Linux Source Code: drivers</a></p> </li> <li> <p><a href="https://packages.ubuntu.com/">Ubuntu Packages</a></p> </li> </ul> </div> <div class="paragraph"> <p><code>Makefile</code> 示例:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-sh" data-lang="sh">obj-m += thedriver.o
all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_其它">其它</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="_自动登录">自动登录</h3> <div class="paragraph"> <p>由于 <code>Linux</code> 系统可能没有自带屏幕触摸键盘,因此最好设置用户自动登录,以便在没有键盘的时候也可以登入系统。</p> </div> </div> <div class="sect2"> <h3 id="_屏幕键盘">屏幕键盘</h3> <div class="paragraph"> <p>可以通过 <code>sudo apt install onboard</code> 安装 <a href="https://launchpad.net/onboard">Onboard</a> 屏幕键盘并设置开机启动,不过,它似乎并不能在登录界面使用。</p> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/onboard-7053f38c-a9d3-3282-a142-c00ed76aecfb.jpg" alt="onboard"/> </div> <div class="sect2"> <h3 id="_便携键鼠">便携键鼠</h3> <div class="paragraph"> <p>日本品牌 <code>SANWA</code> 的 <code>400-SKB070</code> 折叠键盘是个不错的选择,支持三个蓝牙连接,且自带了一个小型触控板。折叠后仅与一台 <code>iPhone 14</code> 尺寸相当。</p> </div> <div class="paragraph"> <p>当然,缺点也有,这个键盘没有 <code>F1~F12</code> 功能键,也没有 <code>Escape</code> 键,如果比较介意的话你也可以选择 <code>GSKBBT30BK</code>。</p> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/sanwa-eb0f24f2-c2aa-3dac-be17-390cb31cee53.jpg" alt="sanwa"/> <div class="paragraph"> <p>另一个推荐是 <code>RII k06</code> 迷你键盘,长度与 <code>Gole 1 Pro</code> 相当,支持蓝牙及 <code>2.4G</code> 双模式,自带触摸板,而且按键齐全。</p> </div> <img data-lightbox="Gole 1 Pro Linux Fix" data-title="Gole 1 Pro Linux Fix" loading="eager" border="0" class="image" src="/media/posts/images/rii-1146ef24-e2c3-3040-b78b-26a372424371.jpg" alt="rii"/> <div class="sect3"> <h4 id="_键盘隐射">键盘隐射</h4> <div class="paragraph"> <p>题外话,对于没有 <code>Escape</code> 键的问题,可以通过键盘映射来解决,在 <code>Linux</code> 中可以使用 <a href="https://github.com/sezanzeb/input-remapper">Input Remapper</a>,<code>Windows</code> 中可以使用 <a href="https://github.com/microsoft/PowerToys">PowerToy</a>,<code>macOS</code> 中可以使用 <a href="https://karabiner-elements.pqrs.org/">Karabiner Elements</a>。</p> </div> <hr> <div class="paragraph text-center"> <p><span class="small">Made with ♡ in Shenzhen</span></p> </div> </div> </div> </div> </div>