<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>kt286</title>
    <link>https://blog.kt286.com/</link>
    
    <atom:link href="https://blog.kt286.com/rss.xml" rel="self" type="application/rss+xml"/>
    
    <description></description>
    <pubDate>Thu, 04 Jan 2024 17:04:52 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>Deepin V23 去除玲珑计划</title>
      <link>https://blog.kt286.com/post/remove-linglong-for-deepin23/</link>
      <guid>https://blog.kt286.com/post/remove-linglong-for-deepin23/</guid>
      <pubDate>Thu, 04 Jan 2024 17:04:52 GMT</pubDate>
      
        
        
      <description>&lt;p&gt;使用了一段时间 V23 版本，饱受玲珑应用的毒害，很多原来功能正常的应用上了玲珑就各种小问题，但是仓库里不提供 deb 版，所以打算在玲珑应用彻底稳定之前，先去除玲珑这个毒瘤。&lt;/p&gt;
&lt;p&gt;目前本人使用的软件有音乐、影院、归档管理器、看图、邮箱、截图录屏、文本编辑器、文档</description>
        
      
      
      
      <content:encoded><![CDATA[<p>使用了一段时间 V23 版本，饱受玲珑应用的毒害，很多原来功能正常的应用上了玲珑就各种小问题，但是仓库里不提供 deb 版，所以打算在玲珑应用彻底稳定之前，先去除玲珑这个毒瘤。</p><p>目前本人使用的软件有音乐、影院、归档管理器、看图、邮箱、截图录屏、文本编辑器、文档查看器，本计划只针对这几个软件。</p><h3 id="音乐"><a href="#音乐" class="headerlink" title="音乐"></a>音乐</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-music.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-music<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.music<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-music_7.0.3_amd64.deb<br></code></pre></td></tr></table></figure><h3 id="文本编辑器"><a href="#文本编辑器" class="headerlink" title="文本编辑器"></a>文本编辑器</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-editor.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-editor<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.editor<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-editor_6.0.15_amd64.deb<br></code></pre></td></tr></table></figure><h3 id="影院"><a href="#影院" class="headerlink" title="影院"></a>影院</h3><p>影院需要修改 control 文件中依赖版本</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-movie-reborn.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-movie-reborn<br><span class="hljs-comment"># 修改依赖版本</span><br><span class="hljs-comment"># 修改 deepin-movie-reborn/debian/control 中 libavcodec60、libavformat60、libavutil58 为 libavcodec58、libavformat58、libavutil56</span><br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.movie<br><span class="hljs-comment"># 安装 deb 版（xxx为版本号）</span><br>sudo apt install ../deepin-movie_xxx.deb ../libdmr_xxx.deb<br></code></pre></td></tr></table></figure><h3 id="看图"><a href="#看图" class="headerlink" title="看图"></a>看图</h3><p>看图需要额外编译一下依赖包</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-ocr-plugin-manager.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-ocr-plugin-manager<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 安装</span><br>sudo apt install ../libdeepin-ocr-plugin-manager-dev_1.0.0_amd64.deb ../libdeepin-ocr-plugin-manager_1.0.0_amd64.deb<br><br><br><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-image-viewer.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-image-viewer<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.image.viewer<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-image-viewer_6.0.3_amd64.deb<br><span class="hljs-comment"># 删除玲珑中目目录</span><br>sudo <span class="hljs-built_in">rm</span> -rf /persistent/linglong/entries/share/deepin-ocr-plugin-manager<br></code></pre></td></tr></table></figure><h3 id="文档查看器"><a href="#文档查看器" class="headerlink" title="文档查看器"></a>文档查看器</h3><p>文档查看器编译时测试可能报错，这里先去掉测试</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-reader.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-reader<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><br><span class="hljs-comment"># 移除测试代码</span><br><span class="hljs-comment"># 打开 deepin-reader/tests/tests.pro 文件，找到以下代码，删除 main.cpp \ 后边的内容</span><br><span class="hljs-comment"># SOURCES += \</span><br><span class="hljs-comment">#     main.cpp \</span><br><span class="hljs-comment"># ============下边开始删除===========</span><br><span class="hljs-comment">#     ut_mainwindow.cpp \</span><br><span class="hljs-comment">#     ut_common.cpp \</span><br><span class="hljs-comment">#     ut_application.cpp \</span><br><span class="hljs-comment">#     ............</span><br><span class="hljs-comment">#     uiframe/ut_centraldocpage.cpp \</span><br><span class="hljs-comment">#     uiframe/ut_docsheet.cpp \</span><br><span class="hljs-comment">#     uiframe/ut_doctabbar.cpp</span><br><span class="hljs-comment"># ============删除到这里===========</span><br><br><br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.reader<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-reader_6.0.7_amd64.deb<br></code></pre></td></tr></table></figure><h3 id="归档管理器"><a href="#归档管理器" class="headerlink" title="归档管理器"></a>归档管理器</h3><p>归档管理器需要修改部分代码</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-compressor.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-compressor<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><br><span class="hljs-comment"># 修改代码，参考下边链接</span><br><span class="hljs-comment"># https://github.com/linuxdeepin/deepin-compressor/pull/156/files</span><br><br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.compressor<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-compressor_6.0.0_amd64.deb<br></code></pre></td></tr></table></figure><h3 id="截图录屏"><a href="#截图录屏" class="headerlink" title="截图录屏"></a>截图录屏</h3><p>这个比较特殊，opencv 安装时有依赖问题，需要重新编译</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 下载源码</span><br>apt <span class="hljs-built_in">source</span> libopencv-dev<br><span class="hljs-built_in">cd</span> opencv_4.5.4+dfsg.1-1+dde<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 安装</span><br>sudo apt install ../libopencv-imgcodecs4.5_4.5.4+dfsg.1-1+dde_amd64.deb<br><br><br><span class="hljs-comment"># 下载源码</span><br>git <span class="hljs-built_in">clone</span> https://github.com/linuxdeepin/deepin-screen-recorder.git --depth=1<br><span class="hljs-built_in">cd</span> deepin-screen-recorder<br><span class="hljs-comment"># 安装依赖</span><br>sudo apt build-dep .<br><span class="hljs-comment"># 编译</span><br>dpkg-buildpackage -b -us -uc<br><span class="hljs-comment"># 有可能需要将 deepin-screen-recorder/src/Makefile 中 std=gnu-11 替换为 std=gnu-14 (共发现两处)</span><br>dpkg-buildpackage -b -us -uc -nc<br><span class="hljs-comment"># 卸载玲珑版</span><br>ll-cli uninstall org.deepin.screen-recorder<br><span class="hljs-comment"># 安装 deb 版</span><br>sudo apt install ../deepin-screen-recorder_6.0.1_amd64.deb<br></code></pre></td></tr></table></figure><h3 id="邮箱"><a href="#邮箱" class="headerlink" title="邮箱"></a>邮箱</h3><p>邮箱没有源码，需要复制文件到指定目录</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo <span class="hljs-built_in">cp</span> -r /persistent/linglong/layers/org.deepin.mail/5.4.28/x86_64/files/bin/deepin-mail /usr/bin/deepin-mail<br>sudo <span class="hljs-built_in">cp</span> -r /persistent/linglong/layers/org.deepin.mail/5.4.28/x86_64/files/share/applications/* /usr/share/applications/<br>sudo <span class="hljs-built_in">cp</span> -r /persistent/linglong/layers/org.deepin.mail/5.4.28/x86_64/files/share/deepin-mail/* /usr/share/deepin-mail/<br>sudo <span class="hljs-built_in">cp</span> -r /persistent/linglong/layers/org.deepin.mail/5.4.28/x86_64/entries/deepin-manual/* /usr/share/deepin-manual/ <br>sudo <span class="hljs-built_in">cp</span> -r /persistent/linglong/layers/org.deepin.mail/5.4.28/x86_64/entries/icons/* /usr/share/icons/<br><br><span class="hljs-built_in">cp</span> -r ~/.linglong/org.deepin.mail/share/deepin/deepin-mail/* ~/.local/share/deepin/deepin-mail/<br></code></pre></td></tr></table></figure><h3 id="最后卸载玲珑"><a href="#最后卸载玲珑" class="headerlink" title="最后卸载玲珑"></a>最后卸载玲珑</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt purge linglong*<br>sudo <span class="hljs-built_in">rm</span> -rf /persistent<br>sudo <span class="hljs-built_in">rm</span> -rf ~/.linglong<br></code></pre></td></tr></table></figure>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Deepin/">Deepin</category>
      
      
      <category domain="https://blog.kt286.com/tags/deepin/">deepin</category>
      
      <category domain="https://blog.kt286.com/tags/c/">c++</category>
      
      
      <comments>https://blog.kt286.com/post/remove-linglong-for-deepin23/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>深度文件管理器改造小记</title>
      <link>https://blog.kt286.com/post/dde-file-manager-beautify/</link>
      <guid>https://blog.kt286.com/post/dde-file-manager-beautify/</guid>
      <pubDate>Thu, 19 May 2022 16:22:24 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;使用深度文件管理器的时候，遇到一些小问题。翻了翻代码，发现修改起来不是很复杂，就顺手改了。下面记录一下修改内容。本次修改基于最新内测版5.6</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>使用深度文件管理器的时候，遇到一些小问题。翻了翻代码，发现修改起来不是很复杂，就顺手改了。下面记录一下修改内容。本次修改基于最新内测版5.6.3。</p><h2 id="环境准备"><a href="#环境准备" class="headerlink" title="环境准备"></a>环境准备</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">apt <span class="hljs-built_in">source</span> dde-file-manager<br><span class="hljs-built_in">cd</span> dde-file-manager-5.6.3<br>sudo apt build-dep .<br></code></pre></td></tr></table></figure><h2 id="修改内容"><a href="#修改内容" class="headerlink" title="修改内容"></a>修改内容</h2><p>环境配置好后就可以修改了，本次修改的内容如下：</p><h3 id="1-列表模式显示太密集"><a href="#1-列表模式显示太密集" class="headerlink" title="1.列表模式显示太密集"></a>1.列表模式显示太密集</h3><p>这个问题很简单，就是改一下列表项高度。</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs diff"># src/dde-file-manager-lib/interfaces/dlistitemdelegate.cpp<br><br>void DListItemDelegate::updateItemSizeHint()<br>&#123;<br>    Q_D(DListItemDelegate);<br><br>    d-&gt;textLineHeight = parent()-&gt;parent()-&gt;fontMetrics().lineSpacing();<br><span class="hljs-deletion">-    d-&gt;itemSizeHint = QSize(-1, qMax(int(parent()-&gt;parent()-&gt;iconSize().height() * 1.1), d-&gt;textLineHeight));</span><br><span class="hljs-addition">+    d-&gt;itemSizeHint = QSize(-1, qMax(int(parent()-&gt;parent()-&gt;iconSize().height() * 1.5), d-&gt;textLineHeight));</span><br>&#125;<br></code></pre></td></tr></table></figure><p><img src="/img/posts/dde-file-manager-beautify/1.png" alt="修改前"><br><img src="/img/posts/dde-file-manager-beautify/2.png" alt="修改后"></p><h3 id="2-浅色主题下，计算机里我的目录中文件夹选中后文字看不清楚"><a href="#2-浅色主题下，计算机里我的目录中文件夹选中后文字看不清楚" class="headerlink" title="2.浅色主题下，计算机里我的目录中文件夹选中后文字看不清楚"></a>2.浅色主题下，计算机里我的目录中文件夹选中后文字看不清楚</h3><p>这个问题比较有意思，文字高亮颜色为白色，浅色主题中看不清楚，深色主题反而效果很好。这里有两种修改思路</p><ol><li>判断一下使用的主题，分别设置不同的文字高亮颜色</li><li>去掉文字高亮<br>为了和其他地方保持一致，这里选择方案2</li></ol><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs diff"># src/dde-file-manager-lib/views/computerviewitemdelegate.cpp<br><br>void ComputerViewItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &amp;option, const QModelIndex &amp;index) const<br>&#123;<br><br># 省略部分代码<br><br>        painter-&gt;setFont(par-&gt;font());<br><span class="hljs-deletion">-        painter-&gt;setPen(qApp-&gt;palette().color((option.state &amp; QStyle::StateFlag::State_Selected) ? QPalette::ColorRole::HighlightedText : QPalette::ColorRole::Text));</span><br><span class="hljs-addition">+        painter-&gt;setPen(qApp-&gt;palette().color(QPalette::ColorRole::Text));</span><br>        painter-&gt;drawText(option.rect.x() + (option.rect.width() - fstw) / 2, option.rect.y() + topmargin + iconsize + text_topmargin, elided_text);<br>        return;<br><br># 省略部分代码<br>    <br>&#125;<br></code></pre></td></tr></table></figure><p><img src="/img/posts/dde-file-manager-beautify/3.png" alt="修改前"><br><img src="/img/posts/dde-file-manager-beautify/4.png" alt="修改后"></p><h3 id="3-开启保险箱功能"><a href="#3-开启保险箱功能" class="headerlink" title="3.开启保险箱功能"></a>3.开启保险箱功能</h3><p>保险箱功能实际上代码里有，只是判断了仅在 UOS 专业版中开放，我们只需要去掉这些判断即可。</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs diff"># src/dde-file-manager-lib/vault/vaulthelper.cpp<br><br>bool VaultHelper::isVaultEnabled()<br>&#123;<br><span class="hljs-addition">+    return true;</span><br><span class="hljs-deletion">-    if (!VaultController::ins()-&gt;isVaultVisiable())     // 判断域管策略,是否显示保险箱</span><br><span class="hljs-deletion">-        return false;</span><br><span class="hljs-deletion">-</span><br><span class="hljs-deletion">-    // 获取系统类型</span><br><span class="hljs-deletion">-    DSysInfo::UosType uosType = DSysInfo::uosType();</span><br><span class="hljs-deletion">-    // 获取系统版本</span><br><span class="hljs-deletion">-    DSysInfo::UosEdition uosEdition = DSysInfo::uosEditionType();</span><br><span class="hljs-deletion">-    if (DSysInfo::UosServer == uosType) &#123;   // 如果是服务器类型</span><br><span class="hljs-deletion">-        // 如果是企业版/行业版/欧拉版</span><br><span class="hljs-deletion">-        if (DSysInfo::UosEnterprise == uosEdition</span><br><span class="hljs-deletion">-                || DSysInfo::UosEnterpriseC == uosEdition</span><br><span class="hljs-deletion">-                || DSysInfo::UosEuler == uosEdition) &#123;</span><br><span class="hljs-deletion">-            return true;</span><br><span class="hljs-deletion">-        &#125;</span><br><span class="hljs-deletion">-    &#125; else if (DSysInfo::UosDesktop == uosType) &#123;   // 如果是桌面类型</span><br><span class="hljs-deletion">-        // 如果是专业版</span><br><span class="hljs-deletion">-        if (DSysInfo::UosProfessional == uosEdition) &#123;</span><br><span class="hljs-deletion">-            return true;</span><br><span class="hljs-deletion">-        &#125;</span><br><span class="hljs-deletion">-    &#125;</span><br><span class="hljs-deletion">-    return false;</span><br>&#125;<br></code></pre></td></tr></table></figure><p><img src="/img/posts/dde-file-manager-beautify/5.png" alt="修改后"></p><h2 id="编译安装"><a href="#编译安装" class="headerlink" title="编译安装"></a>编译安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> build<br><span class="hljs-built_in">cd</span> build<br>qmake ../filemanager.pro<br>make -j4<br>sudo <span class="hljs-built_in">cp</span> src/dde-file-manager-lib/libdde-file-manager.so.1.8.2 /usr/lib/x86_64-linux-gnu/<br></code></pre></td></tr></table></figure><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>文件管理器还有另一个问题：文件夹中文件数量过多时，需要大量时间才可以全部加载完成。能力有限，就等待官方修改吧。</p>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Deepin/">Deepin</category>
      
      
      <category domain="https://blog.kt286.com/tags/deepin/">deepin</category>
      
      
      <comments>https://blog.kt286.com/post/dde-file-manager-beautify/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>在 deepin 中使用小鹤音形</title>
      <link>https://blog.kt286.com/post/use-flypy-in-deepin/</link>
      <guid>https://blog.kt286.com/post/use-flypy-in-deepin/</guid>
      <pubDate>Mon, 14 Mar 2022 20:56:25 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;之前一直在使用全拼输入法，但是全拼有一个众所周知的问题：重码率高。虽然这类输入法大都有词频动态调整、云输入等功能。但是每个用户习惯不同，换台</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>之前一直在使用全拼输入法，但是全拼有一个众所周知的问题：重码率高。虽然这类输入法大都有词频动态调整、云输入等功能。但是每个用户习惯不同，换台设备后打字效率就会降低。而五笔输入法需要记忆大量字根，上手难度大。所以在网上看到小鹤音形的时候眼前一亮，决定尝试一下。</p><h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><p>小鹤音形分双拼和双形两部分，简单理解就是先告诉输入法这个字怎么读，再告诉输入法怎么写。通过两个维度确定一个字，极大减少了重码问题。详细介绍见小鹤音形官网<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="[小鹤入门](https://help.flypy.com/#/xh)">[1]</span></a></sup>。下边放一下双拼键位图和鹤形字根图备忘。</p><h3 id="双拼"><a href="#双拼" class="headerlink" title="双拼"></a>双拼</h3><p><img src="/img/posts/use-flypy-in-deepin/hejp.png" alt="小鹤双拼键位图"></p><h3 id="双形"><a href="#双形" class="headerlink" title="双形"></a>双形</h3><p><img src="/img/posts/use-flypy-in-deepin/xhup.png" alt="小鹤鹤形字根图"></p><h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><h3 id="方案1：rime-挂接（官方）"><a href="#方案1：rime-挂接（官方）" class="headerlink" title="方案1：rime 挂接（官方）"></a>方案1：rime 挂接（官方）</h3><p>小鹤官方只提供了 Windows 和 Android 版安装包，其他平台需要使用 rime 挂接。但是 deepin 仓库中未提供 fcitx5-rime 包，需要我们自己编译安装。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装编译工具</span><br>sudo apt-get install -y build-essential cmake-extras extra-cmake-modules<br><br><span class="hljs-comment"># 编译支持 lua 的 librime 库</span><br>sudo apt-get install -y libcapnp-dev libgoogle-glog-dev libyaml-cpp-dev libleveldb-dev libmarisa-dev capnproto<br>git <span class="hljs-built_in">clone</span> https://github.com/rime/librime.git ~/workspace/librime<br><span class="hljs-built_in">cd</span> ~/workspace/librime<br>./install-plugins.sh hchunhui/librime-lua<br>make merged-plugins<br>sudo make install<br><br><span class="hljs-comment"># 编译 fcitx5-rime</span><br>sudo apt-get install -y appstream libecm-dev libfcitx5core-dev fcitx5-modules-dev<br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-rime<br>git <span class="hljs-built_in">clone</span> https://github.com/fcitx/fcitx5-rime.git ~/workspace/fcitx5-rime<br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-rime/build<br><span class="hljs-built_in">cd</span> ~/workspace/fcitx5-rime/build<br>cmake .. -DCMAKE_INSTALL_PREFIX=/usr<br>make -j4<br>sudo make install<br></code></pre></td></tr></table></figure><p>编译安装完成后，下载小鹤网盘<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><span class="hint--top hint--rounded" aria-label="[小鹤网盘](http://flypy.ys168.com)">[2]</span></a></sup>中挂接文件 <code>3.1.挂接——音形码/小鹤音形“鼠须管”for macOS.zip</code>。解压后，将 rime 目录中所有文件复制到 <code>~/.local/share/fcitx5/rime</code> 目录中。重启 fcitx5 ，添加 <code>中州韻</code> 输入法后即可使用。<br><img src="/img/posts/use-flypy-in-deepin/fcitx5-rime.png" alt="fcitx5-rime"></p><h3 id="方案2：fcitx5-flypy"><a href="#方案2：fcitx5-flypy" class="headerlink" title="方案2：fcitx5-flypy"></a>方案2：fcitx5-flypy</h3><p>fcitx5-flypy 是基于公开码表打造的适配 fcitx5 的输入法，无需安装 rime 即可使用。编译安装方法如下</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装编译工具</span><br>sudo apt-get install -y build-essential cmake-extras extra-cmake-modules<br><br><span class="hljs-comment"># 编译 fcitx5-lua (orq 输入当前日期功能使用 lua 实现，如不需要，可以跳过此步)</span><br>sudo apt-get install -y gettext appstream libfcitx5core-dev fcitx5-modules-dev liblua5.3-dev <br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-lua<br>git <span class="hljs-built_in">clone</span> https://github.com/fcitx/fcitx5-lua.git ~/workspace/fcitx5-lua<br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-lua/build<br><span class="hljs-built_in">cd</span> ~/workspace/fcitx5-lua/build<br>cmake .. -DCMAKE_INSTALL_PREFIX=/usr<br>make -j4<br>sudo make install<br><br><span class="hljs-comment"># 编译 fcitx5-flypy</span><br>sudo apt-get install -y gettext appstream libecm-dev libfcitx5core-dev libboost-dev libimecore-dev libimetable-dev<br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-flypy<br>git <span class="hljs-built_in">clone</span> https://github.com/kt286/fcitx5-flypy.git ~/workspace/fcitx5-flypy<br><span class="hljs-built_in">mkdir</span> -p ~/workspace/fcitx5-flypy/build<br><span class="hljs-built_in">cd</span> ~/workspace/fcitx5-flypy/build<br>cmake .. -DCMAKE_INSTALL_PREFIX=/usr<br>make -j4<br>sudo make install<br></code></pre></td></tr></table></figure><p>目前发现几个小问题：</p><ol><li>使用万能键 ` 时，会提示词语，而不仅仅是单字</li><li>码表中记录条数没有官方码表多（Windows 版有 67656 条数据，但本项目只有 57655 条数据）</li><li><del>使用 orq、ouj 无法输入当前日期和时间</del></li></ol><p><img src="/img/posts/use-flypy-in-deepin/mabn.png" alt="Windows 版码表"></p><p>如在使用过程中遇到其他问题，欢迎到 <a href="https://github.com/kt286/fcitx5-flypy/issues">github</a> 中提 issue。</p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><ol><li>deepin 20 仓库里虽然提供了 fcitx5，但是只提供了一些基础包。fcitx5-rime、fcitx5-lua 等都没有提供。希望后续可以补全。</li><li>使用了一段时间小鹤音形后，输入人名拼音时会不自觉输入双拼。而且由于之前过于依赖拼音输入法，导致很多字只会读，不会写。打字速度反而明显降低。需要一段时间去适应。算是有得有失吧。</li></ol><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span><a href="https://help.flypy.com/#/xh">小鹤入门</a><a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><a href="http://flypy.ys168.com/">小鹤网盘</a><a href="#fnref:2" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Deepin/">Deepin</category>
      
      
      <category domain="https://blog.kt286.com/tags/deepin/">deepin</category>
      
      <category domain="https://blog.kt286.com/tags/flypy/">flypy</category>
      
      <category domain="https://blog.kt286.com/tags/rime/">rime</category>
      
      
      <comments>https://blog.kt286.com/post/use-flypy-in-deepin/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>大幅降低 Wine 微信内存占用</title>
      <link>https://blog.kt286.com/post/reduce-wine-wechat-memory-usage/</link>
      <guid>https://blog.kt286.com/post/reduce-wine-wechat-memory-usage/</guid>
      <pubDate>Fri, 25 Feb 2022 11:20:18 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;每次打开 Wine 版微信，内存使用率就会涨上一大截。平时没怎么在意，今天随意看了一眼就惊呆了：微信刚打开就已经占用了 1G 左右，而且随着</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>每次打开 Wine 版微信，内存使用率就会涨上一大截。平时没怎么在意，今天随意看了一眼就惊呆了：微信刚打开就已经占用了 1G 左右，而且随着使用时间推移甚至能涨到 2G 。不能忍，今天一定要好好治一治这个内存大户。<br><img src="/img/posts/reduce-wine-wechat-memory-usage/1.png" alt="Wine 微信内存占用"></p><h2 id="分析"><a href="#分析" class="headerlink" title="分析"></a>分析</h2><p>系统监视器里搜索 <code>wechat</code> ，发现了华点：微信本体只占用了不到 100M 内存，剩下的都被 <code>WeChatWebBrower.exe</code> 和 <code>WeChatApp.exe</code> 这两个进程占走了。纳尼？？我用的可是微信，不是微信浏览器。精简掉这两个进程应该就可以减少内存占用了。</p><h2 id="精简"><a href="#精简" class="headerlink" title="精简"></a>精简</h2><p>右键属性里找到这两个进程所在的目录，发现两个都在一起，刚好可以一网打尽。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">rm</span> -rf ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb/<br><span class="hljs-built_in">touch</span> ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb<br><span class="hljs-built_in">chmod</span> 000 ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb <br></code></pre></td></tr></table></figure><p>精简掉这两个进程后再次打开微信，只占用 200M 左右内存，舒服了。<br><img src="/img/posts/reduce-wine-wechat-memory-usage/2.png" alt="精简后的微信内存占用"></p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>当然了，精简之后肯定会有一些功能异常，目前发现的只有收到的链接、公众号文章无法打开，小程序无法使用。反正我也不在电脑上使用小程序，可以忍。至于公众号文章查看，可以通过一些设置来继续使用，只是有些繁琐。<br><img src="/img/posts/reduce-wine-wechat-memory-usage/3.png" alt="关闭`使用系统默认浏览器打开网页`"><br><img src="/img/posts/reduce-wine-wechat-memory-usage/4.png" alt="用默认浏览器打开"></p>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Wine/">Wine</category>
      
      
      <category domain="https://blog.kt286.com/tags/Wine/">Wine</category>
      
      <category domain="https://blog.kt286.com/tags/%E5%BE%AE%E4%BF%A1/">微信</category>
      
      
      <comments>https://blog.kt286.com/post/reduce-wine-wechat-memory-usage/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>使用 FFmpeg 下载伪装成图片的 m3u8 视频</title>
      <link>https://blog.kt286.com/post/ffmpeg-download-video-faked-as-image/</link>
      <guid>https://blog.kt286.com/post/ffmpeg-download-video-faked-as-image/</guid>
      <pubDate>Sun, 13 Feb 2022 16:07:43 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;最近看到一个不错的视频，想要下载到本地收藏起来，免得哪天网址失效无法播放。但是使用 FFmpeg 下载的时候报了个错&lt;/p&gt;
&lt;figure</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近看到一个不错的视频，想要下载到本地收藏起来，免得哪天网址失效无法播放。但是使用 FFmpeg 下载的时候报了个错</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs plaintext">[hls,applehttp @ 0x55efcdf226c0] Could not find codec parameters for stream 0 (Video: png, none(pc)): unspecified size<br>Consider increasing the value for the &#x27;analyzeduration&#x27; and &#x27;probesize&#x27; options<br>Input #0, hls,applehttp, from &#x27;https://pv.xbottle.top/demo/rick.m3u8&#x27;:<br>  Duration: 00:03:32.44, bitrate: 0 kb/s<br>  Program 0 <br>    Metadata:<br>      variant_bitrate : 0<br>    Stream #0:0: Video: png, none(pc), 25 tbr, 25 tbn, 25 tbc<br>    Metadata:<br>      variant_bitrate : 0<br>Output #0, mp4, to &#x27;rick.mp4&#x27;:<br>Output file #0 does not contain any stream<br></code></pre></td></tr></table></figure><p><img src="/img/posts/ffmpeg-download-video-faked-as-image/1.png" alt="FFmpeg 下载报错"></p><p>PNG ？？网页里明明可以播放的。下载了其中一个片段，打开后发现真的是一张图片。使用 hexdump 查看了一下，文件最开始确实是 PNG 图片，但是紧接着就看到了 <code>FFmpeg Service01</code> 字样，确认了这个文件是由一张图片和一段视频拼接而成。</p><p><img src="/img/posts/ffmpeg-download-video-faked-as-image/2.png" alt="hexdump 输出"></p><p>Google 了一下，找到两篇文章 <sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="[搞事情：用“图床”传视频，自带免费 CDN 加速（已复活！）](https://akarin.dev/2020/02/07/alicdn-video-hosting/)">[1]</span></a></sup> <sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><span class="hint--top hint--rounded" aria-label="[用图床看视频的体验·改](https://bottle.moe/post-269.html)">[2]</span></a></sup>。讲的是通过在视频前加一个小的 PNG 图片来伪装成图片骗过图床的校验，hls.js 在播放时会自动忽略前边的图片。但 FFmpeg 没有相关处理，把伪装后的视频识别成了图片导致下载失败。</p><h2 id="解决思路"><a href="#解决思路" class="headerlink" title="解决思路"></a>解决思路</h2><p>知道了问题的原因，解决思路就有了。但是实际操作过程中遇到了很多问题，这里记录一下。</p><h3 id="第一次尝试（失败）"><a href="#第一次尝试（失败）" class="headerlink" title="第一次尝试（失败）"></a>第一次尝试（失败）</h3><p>首先想到的就是给 m3u8 中每个片段指定格式，但是翻阅 FFmpeg 文档后没有找到相关参数，只找到了 hls 格式中一个参数 <code>seg_format_options</code> <sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><span class="hint--top hint--rounded" aria-label="[FFmpeg Formats Documentation](https://ffmpeg.org/ffmpeg-formats.html#hls-1)">[3]</span></a></sup>, 根据描述猜测是解析视频片段时的一些参数，尝试搭配 <code>skip_initial_bytes</code> 参数使用。结果还是报错</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">ffmpeg -f hls -seg_format_options skip_initial_bytes=8 -i https://pv.xbottle.top/demo/rick.m3u8 -c copy output.mp4<br></code></pre></td></tr></table></figure><p>由于这个参数是最近才添加的，翻遍全网都没找到更详细的描述，故放弃此方法。</p><h3 id="第二次尝试（成功）"><a href="#第二次尝试（成功）" class="headerlink" title="第二次尝试（成功）"></a>第二次尝试（成功）</h3><p>既然指定格式行不通了，那我们还可以屏蔽 FFmeg 对图片格式的检测。但是 FFmpeg 文档里也没有找到相关参数（笑哭😂）。这里我们可以通过自己编译来屏蔽图片格式支持。下面是编译过程：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> --depth=1 https://github.com/FFmpeg/FFmpeg.git<br><span class="hljs-built_in">cd</span> FFmpeg<br>./configure --disable-doc --disable-asm --disable-x86asm --enable-openssl --enable-protocols --enable-protocol=https --disable-demuxer=image*<br>make -j4<br></code></pre></td></tr></table></figure><p>使用自己编译的 FFmpeg 尝试下载，果然成功了。</p><h3 id="第三次尝试（成功）"><a href="#第三次尝试（成功）" class="headerlink" title="第三次尝试（成功）"></a>第三次尝试（成功）</h3><p>在查找资料的过程中，发现 m3u8 语法中有一个标签 <code>EXT-X-BYTERANGE</code> <sup id="fnref:4" class="footnote-ref"><a href="#fn:4" rel="footnote"><span class="hint--top hint--rounded" aria-label="[RFC 8216 - HTTP Live Streaming](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.2)">[4]</span></a></sup>，可以读取指定范围的视频片段，语法为：<code>#EXT-X-BYTERANGE:&lt;读取内容长度&gt;[@&lt;起始位置偏移量&gt;]</code>。由于只要要破坏 PNG 格式头就可以使 FFmpeg 识别到正确的视频，偏移 8 字节足够了。这里我们把参数设置为 <code>100000000@8</code>。下载脚本如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 手动下载 m3u8 文件</span><br>wget https://pv.xbottle.top/demo/rick.m3u8<br><span class="hljs-comment"># 给每一个视频片段都加上截取范围</span><br>sed -i <span class="hljs-string">&#x27;/#EXTINF:*/a\#EXT-X-BYTERANGE:100000000@8&#x27;</span> ./rick.m3u8<br><span class="hljs-comment"># 开始下载</span><br>ffmpeg -protocol_whitelist file,http,https,tls,tcp -i ./rick.m3u8 -c cooy output.mp4<br></code></pre></td></tr></table></figure><p>虽然可以下载，但是由于不知道每个视频片段具体大小，使用了写死的 <code>100000000</code>，FFmpeg 下载时会卡好久，不是一个完美的方案，故不推荐。</p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>虽然尝试成功了两次，但是做法都不是太优雅，还是希望 FFmpeg 官方可以增强对 hls 自定义设置的支持，如可以强制指定片段格式等。可以通过一条命令成功下载</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span><a href="https://akarin.dev/2020/02/07/alicdn-video-hosting/">搞事情：用“图床”传视频，自带免费 CDN 加速（已复活！）</a><a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><a href="https://bottle.moe/post-269.html">用图床看视频的体验·改</a><a href="#fnref:2" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:3" class="footnote-text"><span><a href="https://ffmpeg.org/ffmpeg-formats.html#hls-1">FFmpeg Formats Documentation</a><a href="#fnref:3" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:4" class="footnote-text"><span><a href="https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.2">RFC 8216 - HTTP Live Streaming</a><a href="#fnref:4" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/FFmpeg/">FFmpeg</category>
      
      
      <category domain="https://blog.kt286.com/tags/ffmpeg/">ffmpeg</category>
      
      <category domain="https://blog.kt286.com/tags/m3u8/">m3u8</category>
      
      
      <comments>https://blog.kt286.com/post/ffmpeg-download-video-faked-as-image/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>为深度音乐添加内嵌歌词支持</title>
      <link>https://blog.kt286.com/post/deepin-music-embeded-lyrics/</link>
      <guid>https://blog.kt286.com/post/deepin-music-embeded-lyrics/</guid>
      <pubDate>Sun, 30 Jan 2022 09:09:09 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;一个月黑风高的晚上，结束了一天的紧张工作（摸鱼）后打算在睡前听一会网抑云音乐。刚要打开播放器的时候突然想到之前看到的深度音乐的截图，决定试用</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一个月黑风高的晚上，结束了一天的紧张工作（摸鱼）后打算在睡前听一会网抑云音乐。刚要打开播放器的时候突然想到之前看到的深度音乐的截图，决定试用一下。</p><p>将下载好的音乐导入深度音乐后点击播放，兴冲冲的打开歌词显示，大大的“没有找到歌词”映入眼帘<br><img src="/img/posts/deepin-music-embeded-lyrics/1.png" alt="没有找到歌词"></p><p>不对呀，我记得我下载歌曲的时候明明勾选了嵌入歌词的。掏出祖传的 <code>ffprobe</code> 查看了一下，发现确实是有歌词的。看来是深度音乐不支持了。与其慢慢等官方实现，不如自己动手、丰衣足食。<br><img src="/img/posts/deepin-music-embeded-lyrics/2.png" alt="ffprobe 结果"></p><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>既然知道歌词已经写到歌曲中了。就先看看写到了歌曲的什么位置，打开 <a href="https://github.com/lyswhut/lx-music-desktop">洛雪音乐助手</a> 的源码，全局搜索 <code>lyrics</code>，找到如下代码：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-comment">// src/main/utils/mp3Meta.js</span><br><br><span class="hljs-keyword">const</span> <span class="hljs-title function_">handleWriteMeta</span> = (<span class="hljs-params">meta, filePath</span>) =&gt; &#123;<br>  <span class="hljs-keyword">if</span> (meta.<span class="hljs-property">lyrics</span>) &#123;<br>    meta.<span class="hljs-property">unsynchronisedLyrics</span> = &#123;<br>      <span class="hljs-attr">language</span>: <span class="hljs-string">&#x27;zho&#x27;</span>,<br>      <span class="hljs-attr">text</span>: meta.<span class="hljs-property">lyrics</span>,<br>    &#125;<br>    <span class="hljs-keyword">delete</span> meta.<span class="hljs-property">lyrics</span><br>  &#125;<br>  <span class="hljs-title class_">NodeID3</span>.<span class="hljs-title function_">write</span>(meta, filePath)<br>&#125;<br></code></pre></td></tr></table></figure><p>根据代码我们可以知道歌词被写入到 ID3 标签中的 <code>unsynchronisedLyrics</code> 中。Google 了一下，发现这个是 ID3v2 标准专门用来存储文本歌词<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="[Unsychronised_lyrics_text_transcription - id3v2.3.0 - ID3.org](https://id3.org/id3v2.3.0#Unsychronised_lyrics.2Ftext_transcription)">[1]</span></a></sup>的，而洛雪音乐助手写入的是 lrc 格式的歌词，所以我们只需要读取这个属性中内容，直接提供给深度音乐显示就可以了。</p><h2 id="开发"><a href="#开发" class="headerlink" title="开发"></a>开发</h2><p>歌词的提取我们可以参考深度音乐对歌曲封面图的处理方法：添加歌曲后开始读取歌词，读取到歌词后，写入缓存文件夹里的 lyrics 文件夹。播放时先使用原来的逻辑获取歌曲同目录下同名歌词文件，如果没找到就去缓存文件夹里 lyrics 文件夹中查找歌词文件，如果还没找到再显示“没有找到歌词”。</p><p>核心代码如下，代码参考了 Stack Overflow 的一个回答<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><span class="hint--top hint--rounded" aria-label="[macos - How to get the lyrics of a song from the song file - Stack Overflow](https://stackoverflow.com/questions/11051055/how-to-get-the-lyrics-of-a-song-from-the-song-file)">[2]</span></a></sup> 和 TagLib 文档<sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><span class="hint--top hint--rounded" aria-label="[TagLib API Documentation](https://taglib.org/api/namespaceTagLib_1_1ID3v2.html)">[3]</span></a></sup></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-comment">// src/libdmusic/metadetector.cpp</span><br><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;taglib/mpegfile.h&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;taglib/id3v2tag.h&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;taglib/id3v2frame.h&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;taglib/unsynchronizedlyricsframe.h&gt;</span></span><br><br><span class="hljs-comment">// 获取歌词数据，写到缓存目录</span><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">MetaDetector::getLyricData</span><span class="hljs-params">(<span class="hljs-type">const</span> QString &amp;path, <span class="hljs-type">const</span> QString &amp;tmpPath, <span class="hljs-type">const</span> QString &amp;hash)</span></span><br><span class="hljs-function"></span>&#123;<br>    QString lyricsDirPath = tmpPath + <span class="hljs-string">&quot;/lyrics&quot;</span>;<br>    QString lyricName = hash + <span class="hljs-string">&quot;.lrc&quot;</span>;<br>    <span class="hljs-function">QDir <span class="hljs-title">lyricsDir</span><span class="hljs-params">(lyricsDirPath)</span></span>;<br>    <span class="hljs-keyword">if</span> (!lyricsDir.<span class="hljs-built_in">exists</span>()) &#123;<br>        <span class="hljs-type">bool</span> isExists = lyricsDir.<span class="hljs-built_in">cdUp</span>();<br>        isExists &amp;= lyricsDir.<span class="hljs-built_in">mkdir</span>(<span class="hljs-string">&quot;lyrics&quot;</span>);<br>        isExists &amp;= lyricsDir.<span class="hljs-built_in">cd</span>(<span class="hljs-string">&quot;lyrics&quot;</span>);<br>    &#125;<br><br>    <span class="hljs-keyword">if</span> (!path.<span class="hljs-built_in">isEmpty</span>() &amp;&amp; !tmpPath.<span class="hljs-built_in">isEmpty</span>() &amp;&amp; !hash.<span class="hljs-built_in">isEmpty</span>()) &#123;<br>        <span class="hljs-keyword">if</span> (!lyricsDir.<span class="hljs-built_in">exists</span>(lyricName)) &#123;<br>            <span class="hljs-function">QFile <span class="hljs-title">lyric</span><span class="hljs-params">(lyricsDirPath + <span class="hljs-string">&quot;/&quot;</span> + lyricName)</span></span>;<br><br>            TagLib::<span class="hljs-function">MPEG::File <span class="hljs-title">f1</span><span class="hljs-params">(path.toStdString().c_str())</span></span>;<br>            TagLib::ID3v2::FrameList frames = f1.<span class="hljs-built_in">ID3v2Tag</span>()-&gt;<span class="hljs-built_in">frameListMap</span>()[<span class="hljs-string">&quot;USLT&quot;</span>];<br>            <span class="hljs-keyword">if</span> (!frames.<span class="hljs-built_in">isEmpty</span>()) &#123;<br>                TagLib::ID3v2::UnsynchronizedLyricsFrame *frame = <span class="hljs-built_in">dynamic_cast</span>&lt;TagLib::ID3v2::UnsynchronizedLyricsFrame *&gt;(frames.<span class="hljs-built_in">front</span>());<br>                <span class="hljs-keyword">if</span> (frame) &#123;<br>                    <span class="hljs-keyword">if</span> (lyric.<span class="hljs-built_in">open</span>(QIODevice::WriteOnly)) &#123;<br>                        QString str = <span class="hljs-built_in">TStringToQString</span>(frame-&gt;<span class="hljs-built_in">text</span>());<br>                        lyric.<span class="hljs-built_in">write</span>(str.<span class="hljs-built_in">toUtf8</span>());<br>                    &#125;<br>                    lyric.<span class="hljs-built_in">close</span>();<br>                &#125;<br>            &#125;   <br>        &#125;<br>    &#125;<br><br>    <span class="hljs-keyword">return</span>;<br>&#125;<br><br></code></pre></td></tr></table></figure><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-comment">// src/music-player/widget/lrc/musiclyricwidget.cpp</span><br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">MusicLyricWidget::onMusicPlayed</span><span class="hljs-params">(MediaMeta meta)</span></span><br><span class="hljs-function"></span>&#123;<br>    <span class="hljs-built_in">Q_UNUSED</span>(meta)<br>    <span class="hljs-function">QFileInfo <span class="hljs-title">fileInfo</span><span class="hljs-params">(Player::getInstance()-&gt;getActiveMeta().localPath)</span></span>;<br>    QString lrcPath = fileInfo.<span class="hljs-built_in">dir</span>().<span class="hljs-built_in">path</span>() + QDir::<span class="hljs-built_in">separator</span>() + fileInfo.<span class="hljs-built_in">completeBaseName</span>() + <span class="hljs-string">&quot;.lrc&quot;</span>;<br>    <span class="hljs-function">QFile <span class="hljs-title">file</span><span class="hljs-params">(lrcPath)</span></span>;<br>    <span class="hljs-keyword">if</span> (!file.<span class="hljs-built_in">exists</span>()) &#123;<br>        <span class="hljs-comment">// 读取根目录中歌词文件失败后读取媒体文件内嵌的歌词</span><br>        MediaMeta meta = Player::<span class="hljs-built_in">getInstance</span>()-&gt;<span class="hljs-built_in">getActiveMeta</span>();<br>        <span class="hljs-function">QFileInfo <span class="hljs-title">lyricInfo</span><span class="hljs-params">(Global::cacheDir() + <span class="hljs-string">&quot;/lyrics/&quot;</span> + meta.hash + <span class="hljs-string">&quot;.lrc&quot;</span>)</span></span>;<br>        <span class="hljs-keyword">if</span> (!lyricInfo.<span class="hljs-built_in">exists</span>()) &#123;<br>            m_nolyric-&gt;<span class="hljs-built_in">show</span>();<br>            m_lyricview-&gt;<span class="hljs-built_in">hide</span>();<br>        &#125; <span class="hljs-keyword">else</span> &#123;<br>            m_nolyric-&gt;<span class="hljs-built_in">hide</span>();<br>            m_lyricview-&gt;<span class="hljs-built_in">show</span>();<br>            m_lyricview-&gt;<span class="hljs-built_in">getFromFile</span>(lyricInfo.<span class="hljs-built_in">filePath</span>());<br>        &#125;<br>    &#125; <span class="hljs-keyword">else</span> &#123;<br>        m_nolyric-&gt;<span class="hljs-built_in">hide</span>();<br>        m_lyricview-&gt;<span class="hljs-built_in">show</span>();<br>        m_lyricview-&gt;<span class="hljs-built_in">getFromFile</span>(lrcPath);<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>完整代码见：<a href="https://github.com/linuxdeepin/deepin-music/pull/111/">https://github.com/linuxdeepin/deepin-music/pull/111/</a></p><p><img src="/img/posts/deepin-music-embeded-lyrics/3.png" alt="效果图"></p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>本次修改只实现了对 ID3v2 标签中非同步歌词<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><span class="hint--top hint--rounded" aria-label="[Unsychronised_lyrics_text_transcription - id3v2.3.0 - ID3.org](https://id3.org/id3v2.3.0#Unsychronised_lyrics.2Ftext_transcription)">[1]</span></a></sup>的读取。至于另一种同步歌词<sup id="fnref:4" class="footnote-ref"><a href="#fn:4" rel="footnote"><span class="hint--top hint--rounded" aria-label="[Synchronised_lyrics_text - id3v2.3.0 - ID3.org](https://id3.org/id3v2.3.0#Synchronised_lyrics.2Ftext)">[4]</span></a></sup>，手头上没有测试文件，就暂时搁置，以后有时间再来实现。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span><a href="https://id3.org/id3v2.3.0#Unsychronised_lyrics.2Ftext_transcription">Unsychronised_lyrics_text_transcription - id3v2.3.0 - ID3.org</a><a href="#fnref:1" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><a href="https://stackoverflow.com/questions/11051055/how-to-get-the-lyrics-of-a-song-from-the-song-file">macos - How to get the lyrics of a song from the song file - Stack Overflow</a><a href="#fnref:2" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:3" class="footnote-text"><span><a href="https://taglib.org/api/namespaceTagLib_1_1ID3v2.html">TagLib API Documentation</a><a href="#fnref:3" rev="footnote" class="footnote-backref"> ↩</a></span></span></li><li><span id="fn:4" class="footnote-text"><span><a href="https://id3.org/id3v2.3.0#Synchronised_lyrics.2Ftext">Synchronised_lyrics_text - id3v2.3.0 - ID3.org</a><a href="#fnref:4" rev="footnote" class="footnote-backref"> ↩</a></span></span></li></ol></div></section>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Deepin/">Deepin</category>
      
      
      <category domain="https://blog.kt286.com/tags/deepin/">deepin</category>
      
      <category domain="https://blog.kt286.com/tags/music/">music</category>
      
      <category domain="https://blog.kt286.com/tags/c/">c++</category>
      
      
      <comments>https://blog.kt286.com/post/deepin-music-embeded-lyrics/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>使用 UserScript 给 438kan 添加网页全屏支持</title>
      <link>https://blog.kt286.com/post/438kan-webfullscreen/</link>
      <guid>https://blog.kt286.com/post/438kan-webfullscreen/</guid>
      <pubDate>Fri, 28 Jan 2022 19:26:15 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;最近一直在 &lt;a href=&quot;http://438kan.com/&quot;&gt;438kan&lt;/a&gt; 上追剧，但是 438kan 自带的播放器嵌套在一</description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近一直在 <a href="http://438kan.com/">438kan</a> 上追剧，但是 438kan 自带的播放器嵌套在一个 iframe 中，不能使用网页全屏功能。而使用全屏播放视频时遇到要回复QQ、微信消息的情况则需要不断在全屏/非全屏之间切换，非常麻烦。所以决定研究研究，实现 438kan 的网页全屏功能。</p><h2 id="初次分析"><a href="#初次分析" class="headerlink" title="初次分析"></a>初次分析</h2><p>我们首先在浏览器中打开播放器地址 <a href="http://438kan.com/static/player/dplayer.html">http://438kan.com/static/player/dplayer.html</a>，右键-查看网页源代码，找到了其中的关键代码</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">var</span> dplayer = <span class="hljs-keyword">new</span> <span class="hljs-title class_">DPlayer</span>(&#123;<br><span class="hljs-attr">element</span>: <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&quot;player&quot;</span>),<br><span class="hljs-attr">autoplay</span>: <span class="hljs-literal">true</span>,<br><span class="hljs-attr">video</span>: &#123;<br><span class="hljs-attr">url</span>: parent.<span class="hljs-property">MacPlayer</span>.<span class="hljs-property">PlayUrl</span>,<br><span class="hljs-attr">type</span>:<span class="hljs-string">&#x27;hls&#x27;</span>,<br>&#125;<br>&#125;);<br></code></pre></td></tr></table></figure><p>通过 <code>parent.MacPlayer.PlayUrl</code> 这句我们可以发现，视频播放地址是在 iframe 外加载的，根本没必要使用 iframe ，可以把 iframe 整个替换掉。这里我们直接用这个 iframe 的父级div <code>MacPlayer</code> 作为播放器的容器，通过 <code>UserScript</code> 中的 <code>@require</code> 加载 <code>dplayer</code> 及其依赖 <code>hls</code>，直接加载 <code>MacPlayer.PlayUrl</code> 这个地址的视频</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-comment">// ==UserScript==</span><br><span class="hljs-comment">// @name             438kan网页全屏</span><br><span class="hljs-comment">// @description      438kan网页全屏</span><br><span class="hljs-comment">// @version          1.0</span><br><span class="hljs-comment">// @author           kt286</span><br><span class="hljs-comment">// @include          *://*.438kan.com/*</span><br><span class="hljs-comment">// @include          *://438kan.com/*</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/hls.js@1.1.3/dist/hls.min.js</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/dplayer@1.26.0/dist/DPlayer.min.js</span><br><span class="hljs-comment">// @grant            none</span><br><span class="hljs-comment">// @run-at           document-end</span><br><span class="hljs-comment">// ==/UserScript==</span><br><span class="hljs-keyword">var</span> dplayer = <span class="hljs-keyword">new</span> <span class="hljs-title class_">DPlayer</span>(&#123;<br>    <span class="hljs-attr">element</span>: <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;.MacPlayer&quot;</span>),<br>    <span class="hljs-attr">autoplay</span>: <span class="hljs-literal">true</span>,<br>    <span class="hljs-attr">video</span>: &#123;<br>        <span class="hljs-attr">url</span>: <span class="hljs-title class_">MacPlayer</span>.<span class="hljs-property">PlayUrl</span><br>    &#125;<br>&#125;);<br></code></pre></td></tr></table></figure><p>这里需要注意一个问题，iframe 中播放器地址是被 <a href="http://438kan.com/static/player/dplayer.js">http://438kan.com/static/player/dplayer.js</a> 这个 js 加载的，为了防止不必要的资源加载，我们使用 <code>uBlock Origin</code> 或 <code>Adblock Plus</code> 将其拦截。</p><h2 id="第二次分析"><a href="#第二次分析" class="headerlink" title="第二次分析"></a>第二次分析</h2><p>脚本写完后，复制到 <a href="https://violentmonkey.github.io/">Violentmonkey</a> 中，刷新网页。音乐声响起，但是视频没有出现。通过 F12 我们可以发现视频已经加载出来了，但是高度异常</p><p><img src="/img/posts/438kan-webfullscreen/1.png" alt="视频高度异常"></p><p>继续分析我们发现 <code>MacPlayer</code> 这个元素的 <code>padding-bottom</code> 居然有 <code>500</code> 多，把视频高度都给挤没了。</p><p><img src="/img/posts/438kan-webfullscreen/2.png" alt="播放器 padding-bottom"></p><p>既然知道问题出在哪里了，解决方案也就有了，那就是设置 <code>padding-bottom</code> 为 <code>0px</code>。现在我们就有两种实现方案：<code>UserCSS</code> 和 <code>UserScript</code>。这里我们继续使用 <code>UserScript</code>。<code>UserScript</code>中添加自定义样式的方法是 <code>GM_addStyle</code>。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-comment">// ==UserScript==</span><br><span class="hljs-comment">// @name             438kan网页全屏</span><br><span class="hljs-comment">// @description      438kan网页全屏</span><br><span class="hljs-comment">// @version          1.0</span><br><span class="hljs-comment">// @author           kt286</span><br><span class="hljs-comment">// @include          *://*.438kan.com/*</span><br><span class="hljs-comment">// @include          *://438kan.com/*</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/hls.js@1.1.3/dist/hls.min.js</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/dplayer@1.26.0/dist/DPlayer.min.js</span><br><span class="hljs-comment">// @grant            GM_addStyle</span><br><span class="hljs-comment">// @run-at           document-end</span><br><span class="hljs-comment">// ==/UserScript==</span><br><span class="hljs-title function_">GM_addStyle</span>(<span class="hljs-string">&quot;.MacPlayer &#123; padding:0!important; &#125;&quot;</span>);<br><span class="hljs-keyword">var</span> dplayer = <span class="hljs-keyword">new</span> <span class="hljs-title class_">DPlayer</span>(&#123;<br>    <span class="hljs-attr">element</span>: <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;.MacPlayer&quot;</span>),<br>    <span class="hljs-attr">autoplay</span>: <span class="hljs-literal">true</span>,<br>    <span class="hljs-attr">video</span>: &#123;<br>        <span class="hljs-attr">url</span>: <span class="hljs-title class_">MacPlayer</span>.<span class="hljs-property">PlayUrl</span><br>    &#125;<br>&#125;);<br></code></pre></td></tr></table></figure><h2 id="第三次分析"><a href="#第三次分析" class="headerlink" title="第三次分析"></a>第三次分析</h2><p>增加自定义样式后，视频出来了，网页全屏功能也正常了。但还有一点点小瑕疵，就是导航栏悬浮在播放器上方，遮挡了一部分视频。这个就简单了，只要把播放器 <code>z-index</code> 值设置的大于导航栏的值就可以了，完整代码如下：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-comment">// ==UserScript==</span><br><span class="hljs-comment">// @name             438kan网页全屏</span><br><span class="hljs-comment">// @description      438kan网页全屏</span><br><span class="hljs-comment">// @version          1.0</span><br><span class="hljs-comment">// @author           kt286</span><br><span class="hljs-comment">// @include          *://*.438kan.com/*</span><br><span class="hljs-comment">// @include          *://438kan.com/*</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/hls.js@1.1.3/dist/hls.min.js</span><br><span class="hljs-comment">// @require          https://cdn.jsdelivr.net/npm/dplayer@1.26.0/dist/DPlayer.min.js</span><br><span class="hljs-comment">// @grant            GM_addStyle</span><br><span class="hljs-comment">// @run-at           document-end</span><br><span class="hljs-comment">// ==/UserScript==</span><br><span class="hljs-title function_">GM_addStyle</span>(<span class="hljs-string">&quot;.MacPlayer &#123; padding:0!important; z-index:999!important; &#125;&quot;</span>);<br><span class="hljs-keyword">var</span> dplayer = <span class="hljs-keyword">new</span> <span class="hljs-title class_">DPlayer</span>(&#123;<br>    <span class="hljs-attr">element</span>: <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;.MacPlayer&quot;</span>),<br>    <span class="hljs-attr">autoplay</span>: <span class="hljs-literal">true</span>,<br>    <span class="hljs-attr">video</span>: &#123;<br>        <span class="hljs-attr">url</span>: <span class="hljs-title class_">MacPlayer</span>.<span class="hljs-property">PlayUrl</span><br>    &#125;<br>&#125;);<br></code></pre></td></tr></table></figure><p>刷新视频，网页全屏一切正常。这下舒服了。</p>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/UserScript/">UserScript</category>
      
      
      <category domain="https://blog.kt286.com/tags/userscript/">userscript</category>
      
      <category domain="https://blog.kt286.com/tags/dplayer/">dplayer</category>
      
      
      <comments>https://blog.kt286.com/post/438kan-webfullscreen/#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>我的 deepin 初始化脚本</title>
      <link>https://blog.kt286.com/post/deepin-init/</link>
      <guid>https://blog.kt286.com/post/deepin-init/</guid>
      <pubDate>Fri, 28 Jan 2022 11:21:45 GMT</pubDate>
      
        
        
      <description>&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;本人一直喜欢折腾系统，经常会玩过头把系统搞崩溃。每次重装后都需要进行大量配置，费时费力。所以写了个脚本一键配置，解放双手。&lt;/p&gt;
&lt;h2 </description>
        
      
      
      
      <content:encoded><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>本人一直喜欢折腾系统，经常会玩过头把系统搞崩溃。每次重装后都需要进行大量配置，费时费力。所以写了个脚本一键配置，解放双手。</p><h2 id="目标"><a href="#目标" class="headerlink" title="目标"></a>目标</h2><table><thead><tr><th>目标</th><th>进度</th></tr></thead><tbody><tr><td>卸载安装常用软件</td><td>100%</td></tr><tr><td>系统配置（控制中心设置）</td><td>70%</td></tr><tr><td>系统应用配置（文件管理器、编辑器等）</td><td>0%</td></tr><tr><td>用户应用配置（Chrome、VSCode等）</td><td>0%</td></tr></tbody></table><h2 id="兼容性"><a href="#兼容性" class="headerlink" title="兼容性"></a>兼容性</h2><p>仅适配最新版本 Deepin，当前版本 <code>20.6</code></p><h2 id="食用方法"><a href="#食用方法" class="headerlink" title="食用方法"></a>食用方法</h2><blockquote><p>搭配 <a href="https://bbs.deepin.org/post/228568">《我的deepin变形记》</a> 食用效果更佳</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget https://raw.githubusercontent.com/kt286/deepin-init/master/deepin-init.sh<br><span class="hljs-built_in">chmod</span> +x deepin-init.sh<br>sh deepin-init.sh<br></code></pre></td></tr></table></figure><p>连接不上 Github 的同学也可以复制下文中脚本，另存为 <code>deepin-init.sh</code> 文件使用</p><h2 id="脚本原文"><a href="#脚本原文" class="headerlink" title="脚本原文"></a>脚本原文</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><br><span class="hljs-comment">#先进到用户下载目录</span><br><span class="hljs-built_in">cd</span> ~/Downloads<br><br><span class="hljs-comment"># 关闭控制中心自动更新</span><br>busctl call com.deepin.lastore /com/deepin/lastore com.deepin.lastore.Updater SetAutoCheckUpdates b 0<br>busctl call com.deepin.lastore /com/deepin/lastore com.deepin.lastore.Updater SetAutoDownloadUpdates b 0<br>busctl call com.deepin.lastore /com/deepin/lastore com.deepin.lastore.Updater SetUpdateNotify b 0<br>busctl call com.deepin.lastore /com/deepin/lastore com.deepin.lastore.Manager SetAutoClean b 0<br><br><span class="hljs-comment"># 系统设置</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.xsettings dtk-window-radius 8  <span class="hljs-comment"># 窗口圆角-中</span><br><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.dock display-mode <span class="hljs-string">&#x27;efficient&#x27;</span>  <span class="hljs-comment"># dock-高效模式</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.dock window-size-efficient 46  <span class="hljs-comment"># dock-高度增加</span><br><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;显示桌面&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用显示桌面插件</span><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;屏幕键盘&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用屏幕键盘插件</span><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;多任务视图&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用多任务窗口插件</span><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;通知中心&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用通知中心插件</span><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;全局搜索&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用全局搜索插件</span><br>busctl --user call com.deepin.dde.Dock /com/deepin/dde/Dock com.deepin.dde.Dock setPluginVisible sb <span class="hljs-string">&#x27;截图录屏&#x27;</span> <span class="hljs-literal">false</span>  <span class="hljs-comment"># dock-禁用截图录屏插件</span><br><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.mouse disable-touchpad <span class="hljs-literal">true</span>  <span class="hljs-comment">#插入鼠标时禁用触控板</span><br><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power battery-lid-closed-action <span class="hljs-string">&#x27;turnOffScreen&#x27;</span> <span class="hljs-comment">#使用电池-笔记本合盖时-关闭屏幕</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power battery-press-power-button <span class="hljs-string">&#x27;showSessionUI&#x27;</span> <span class="hljs-comment">#使用电池-按电源按钮时-不做任何操作</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power battery-lock-delay 0  <span class="hljs-comment">#使用电池-自动锁屏 从不</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power battery-screen-black-delay 300  <span class="hljs-comment">#使用电池-关闭显示器 5分钟</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power battery-sleep-delay 0  <span class="hljs-comment">#使用电池-进入待机模式 从不</span><br><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power line-power-lid-closed-action <span class="hljs-string">&#x27;turnOffScreen&#x27;</span> <span class="hljs-comment">#连接电源-笔记本合盖时-关闭屏幕</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power line-power-press-power-button <span class="hljs-string">&#x27;showSessionUI&#x27;</span> <span class="hljs-comment">#连接电源-按电源按钮时-不做任何操作</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power line-power-lock-delay 0  <span class="hljs-comment">#连接电源-自动锁屏 从不</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power line-power-screen-black-delay 900  <span class="hljs-comment">#连接电源-关闭显示器 15分钟</span><br>gsettings <span class="hljs-built_in">set</span> com.deepin.dde.power line-power-sleep-delay 0  <span class="hljs-comment">#连接电源-进入待机模式 从不</span><br><br><span class="hljs-comment">#grub 主题美化</span><br>sudo busctl call com.deepin.daemon.Grub2 /com/deepin/daemon/Grub2/Theme com.deepin.daemon.Grub2.Theme SetBackgroundSourceFile s <span class="hljs-string">&#x27;/usr/share/wallpapers/deepin/mike-yukhtenko-a2kD4b0KK4s-unsplash.jpg&#x27;</span><br>sudo sed -i <span class="hljs-string">&#x27;s/deepin-fallback/deepin/g&#x27;</span> /etc/default/grub<br>sudo /usr/lib/deepin-api/adjust-grub-theme -width 1920 -height 1080<br>sudo update-grub2 <br><br><span class="hljs-comment">#添加Chrome源到source.list.d</span><br>wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main&quot; &gt; /etc/apt/sources.list.d/google-chrome.list&#x27;</span><br><br><span class="hljs-comment">#添加VSCode源到source.list.d</span><br>wget -q -O - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main&quot; &gt; /etc/apt/sources.list.d/vscode.list&#x27;</span><br><br><span class="hljs-comment">#添加Docker源到source.list.d</span><br>wget -q -O - https://mirrors.cloud.tencent.com/docker-ce/linux/debian/gpg | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb [arch=amd64] https://mirrors.cloud.tencent.com/docker-ce/linux/debian buster stable&quot; &gt; /etc/apt/sources.list.d/docker.list&#x27;</span><br><br><span class="hljs-comment">#添加Beyond Compare源到source.list.d</span><br>wget -q -O - https://www.scootersoftware.com/RPM-GPG-KEY-scootersoftware | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb https://www.scootersoftware.com/ bcompare4 non-free&quot; &gt; /etc/apt/sources.list.d/scootersoftware.list&#x27;</span><br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;Package: bcompare\nPin: origin www.scootersoftware.com\nPin-Priority: 600&quot; &gt; /etc/apt/preferences.d/scootersoftware&#x27;</span><br><br><span class="hljs-comment">#添加nodejs源到source.list.d</span><br>wget -q -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb https://deb.nodesource.com/node_16.x buster main&quot; &gt; /etc/apt/sources.list.d/nodesource.list&#x27;</span><br><br><span class="hljs-comment">#添加内测源到source.list.d</span><br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb [trusted=yes] https://proposed-packages.deepin.com/dde-apricot unstable main contrib non-free&quot; &gt; /etc/apt/sources.list.d/deepin-unstable.list&#x27;</span><br><br><span class="hljs-comment">#添加better-dde源到source.list.d</span><br>wget -q -O - https://better-dde.github.io/ppa/better-dde.gpg | sudo apt-key add -<br>sudo sh -c <span class="hljs-string">&#x27;echo &quot;deb https://better-dde.github.io/ppa/ ./&quot; &gt; /etc/apt/sources.list.d/better-dde.list&#x27;</span><br><br><span class="hljs-comment">#卸载系统自带Flash</span><br>sudo apt purge -y libflashplugin-pepper<br><span class="hljs-built_in">rm</span> -rf ~/.config/google-chrome/PepperFlash/<br><br><span class="hljs-comment">#卸载深度帮助手册和深度欢迎两个没用还占地方的东西（会同时卸载dde，貌似没啥问题）</span><br>sudo apt purge -y deepin-manual<br>sudo apt purge -y dde-manual-content<br>sudo apt purge -y dde-introduction<br><br><span class="hljs-comment">#卸载自己不需要的软件</span><br>sudo apt purge -y deepin-feedback<br>sudo apt purge -y deepin-app-store<br>sudo apt purge -y deepin-deepinid-client<br>sudo apt purge -y deepin-calculator<br>sudo apt purge -y deepin-draw<br>sudo apt purge -y deepin-voice-note<br>sudo apt purge -y deepin-album<br>sudo apt purge -y deepin-camera<br>sudo apt purge -y deepin-mail<br>sudo apt purge -y deepin-screensaver*<br>sudo apt purge -y deepin-clone<br>sudo apt purge -y deepin-recovery-plugin<br>sudo apt purge -y deepin-ab-recovery<br>sudo apt purge -y deepin-boot-maker<br>sudo apt purge -y gnome-theme*<br>sudo apt purge -y libreoffice*<br>sudo apt purge -y simple-scan<br>sudo apt purge -y printer-driver-deepin-cloud-print<br>sudo apt purge -y org.deepin.browser<br>sudo apt purge -y org.deepin.downloader<br>sudo apt purge -y deepin-deb-installer<br>sudo apt purge -y uos-release-note<br>sudo apt purge -y deepin-forum<br>sudo apt purge -y fcitx*<br>sudo apt purge -y nano<br><br><span class="hljs-comment">#更新20.4后，卸载这个会导致无法右键跳转到设置，酌情卸载</span><br><span class="hljs-comment">#sudo apt purge -y onboard-common</span><br><br><span class="hljs-comment">#这个是用来开关机画面的，我个人喜欢看开机输出文字信息，所以卸载</span><br>sudo apt purge -y plymouth*<br><br><span class="hljs-comment">#这几个是系统自带小游戏（五子棋和连连看）</span><br>sudo apt purge -y com.deepin*<br><br><span class="hljs-comment">#清理一下</span><br>sudo apt autoremove -y --purge<br><br><span class="hljs-comment">#安装软件</span><br>sudo apt update &amp;&amp; sudo apt dist-upgrade -y<br>sudo apt install -y curl<br>sudo apt install -y git<br>sudo apt install -y console-setup<br>sudo apt install -y cmake-extras<br>sudo apt install -y extra-cmake-modules<br>sudo apt install -y build-essential<br>sudo apt install -y code<br>sudo apt install -y google-chrome-stable<br>sudo apt install -y com.qq.office.deepin<br>sudo apt install -y com.qq.weixin.deepin<br>sudo apt install -y com.oray.sunlogin.client<br>sudo apt install -y cn.wps.wps-office<br>sudo apt install -y docker-ce<br>sudo apt install -y fcitx5-chinese-addons<br>sudo apt install -y fcitx5-material-color<br>sudo apt install -y fcitx5-pinyin-zhwiki<br>sudo apt install -y fcitx5-flypy<br>sudo apt install -y bcompare<br>sudo apt install -y nodejs<br>sudo apt install -y remmina<br><br><span class="hljs-comment">#安装nvidia闭源驱动</span><br>sudo apt install -y nvidia-detect<br>nvidia-detect | awk <span class="hljs-string">&#x27;match($0, /nvidia-.*/, a) &#123;print a[0]&#125;&#x27;</span> | xargs sudo apt -y install<br><br><span class="hljs-comment">#安装任务栏显卡驱动切换插件</span><br>sudo apt install -y dde-dock-graphics-plugin<br><br><span class="hljs-comment">#隐藏启动器中 fcitx5配置、键盘布局查看工具</span><br>sudo sed -i <span class="hljs-string">&#x27;$a\NoDisplay=true&#x27;</span> /usr/share/applications/fcitx5-configtool.desktop <br>sudo sed -i <span class="hljs-string">&#x27;$a\NoDisplay=true&#x27;</span> /usr/share/applications/kbd-layout-viewer5.desktop<br><br><span class="hljs-comment">#修复命令行安装TIM、微信、向日葵、WPS，启动器中没有图标</span><br><span class="hljs-built_in">mkdir</span> -p ~/.local/share/applications/<br><br><span class="hljs-built_in">cp</span> -r /opt/apps/com.qq.office.deepin/entries/icons/* ~/.local/share/icons/<br><span class="hljs-built_in">cp</span> -r /opt/apps/com.qq.office.deepin/entries/applications/* ~/.local/share/applications/<br><br><span class="hljs-built_in">cp</span> -r /opt/apps/com.qq.weixin.deepin/entries/icons/* ~/.local/share/icons/<br><span class="hljs-built_in">cp</span> -r /opt/apps/com.qq.weixin.deepin/entries/applications/* ~/.local/share/applications/<br><br><span class="hljs-built_in">cp</span> -r /opt/apps/com.oray.sunlogin.client/entries/icons/* ~/.local/share/icons/<br><span class="hljs-built_in">cp</span> -r /opt/apps/com.oray.sunlogin.client/entries/applications/* ~/.local/share/applications/<br><br><span class="hljs-built_in">cp</span> -r /opt/apps/cn.wps.wps-office/entries/icons/* ~/.local/share/icons/<br><span class="hljs-built_in">cp</span> -r /opt/apps/cn.wps.wps-office/entries/applications/* ~/.local/share/applications/<br><br><span class="hljs-comment">#修复安装VSCode后，Win + E 打开的是VSCode</span><br>xdg-mime default dde-file-manager.desktop inode/directory<br><br><span class="hljs-comment">#删除Chrome推荐设置</span><br>sudo <span class="hljs-built_in">rm</span> /etc/opt/chrome/policies/recommended/*.json<br><br><span class="hljs-comment">#fcitx5开机自启动</span><br><span class="hljs-built_in">mkdir</span> -p ~/.config/autostart<br>sudo <span class="hljs-built_in">cp</span> /usr/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/org.fcitx.Fcitx5.desktop<br><br><span class="hljs-comment">#fcitx5图标美化</span><br>sudo <span class="hljs-built_in">mv</span> /usr/share/icons/bloom/actions/24/input-keyboard-symbolic.svg /usr/share/icons/bloom/actions/24/input-keyboard-symbolic.svg.bak<br>sudo <span class="hljs-built_in">ln</span> -s /usr/share/icons/bloom/status/20/keyboard-symbolic.svg /usr/share/icons/bloom/status/20/input-keyboard-symbolic.svg<br><br><span class="hljs-comment">#更新TIM到最新版本</span><br>sh -c  <span class="hljs-string">&#x27;/opt/apps/com.qq.office.deepin/files/run.sh -c&#x27;</span><br><span class="hljs-built_in">export</span> WINEPREFIX=<span class="hljs-variable">$HOME</span>/.deepinwine/Deepin-TIM<br><span class="hljs-built_in">rm</span> TIM3.3.9.22051.exe<br>wget -t 3 -T 15 https://dldir1.qq.com/qqfile/qq/TIM3.3.9/TIM3.3.9.22051.exe<br>deepin-wine6-stable TIM3.3.9.22051.exe<br><br><span class="hljs-comment">#更新微信到最新版本</span><br>sh -c  <span class="hljs-string">&#x27;/opt/apps/com.qq.weixin.deepin/files/run.sh -c&#x27;</span><br><span class="hljs-built_in">export</span> WINEPREFIX=<span class="hljs-variable">$HOME</span>/.deepinwine/Deepin-WeChat<br><span class="hljs-built_in">rm</span> WeChatSetup.exe<br>wget -t 3 -T 15 https://dldir1.qq.com/weixin/Windows/WeChatSetup.exe<br>deepin-wine6-stable WeChatSetup.exe<br><br><span class="hljs-comment">#大幅降低微信内存占用（牺牲小程序和公众号，慎用）</span><br><span class="hljs-built_in">rm</span> -rf ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb/<br><span class="hljs-built_in">touch</span> ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb<br><span class="hljs-built_in">chmod</span> 000 ~/.deepinwine/Deepin-WeChat/drive_c/users/$(<span class="hljs-built_in">whoami</span>)/Application\ Data/Tencent/WeChat/XPlugin/Plugins/XWeb <br><br><span class="hljs-comment">#清理一下</span><br>sudo apt autoremove -y --purge<br></code></pre></td></tr></table></figure>]]></content:encoded>
      
      
      <category domain="https://blog.kt286.com/categories/Deepin/">Deepin</category>
      
      
      <category domain="https://blog.kt286.com/tags/deepin/">deepin</category>
      
      
      <comments>https://blog.kt286.com/post/deepin-init/#disqus_thread</comments>
      
    </item>
    
  </channel>
</rss>
