午未 發表於 2021-2-4 09:47:00

deepin定制virt-manager

<h1 id="背景介绍">背景介绍</h1>
<blockquote>
<p>本文最新更新于 2022年04月26号<br>
更新内容:通过virt-manager打开deepin后直接全屏。</p>
</blockquote>
<p>我在deepin20.1系统安装了kvm后,通过virt-manager创建了一个deepin虚拟机,部署了一台虚拟机,平时做些开发调试,以免对正式工作环境造成影响。但是我不太喜欢virt-manager全屏后,鼠标扫过屏幕顶端的中间部位时,突出的键盘内容(vnc-viewer类似的操作菜单),所以我自己修改了以下源码,使其在左上角显示。</p>
<blockquote>
<p>deepin 安装kvm及virt-manager:sudo apt-get install qemu-kvm virt-manager</p>
</blockquote>
<h1 id="操作过程">操作过程</h1>
<p><strong>首先找到管理器程序</strong></p>
<p><code>which virt-manager</code>,路径在<code>/usr/bin/virt-manager</code>,执行<code>file /usr/bin/virt-manager</code>发现是一个shell脚本</p>
<p><code>vim /usr/bin/virt-manager</code>,发现是一个调用了<code>/usr/share/virt-manager/virt-manager</code>的shell脚本</p>
<p>再次<code>file /usr/share/virt-manager/virt-manager</code>,发现是一个python脚本,也就是virt-manager实际上是一个python+gtk编写的虚拟机管理界面程序,不是二进制程序,就好办多了。</p>
<p><strong>查找源码里面的关键字</strong></p>
<p>我希望能够找到“全屏”的关键字,但是我报的希望不大,毕竟一个国际化的程序,直接在源码里面写汉字的可能性几乎没有。</p>
<p>首先进入到目录:<code>cd /usr/share/virt-manager/virtManager</code>,执行<code>ls</code>发现很多python脚本,这肯定就是virt-manager的各种功能实现了</p>
<p>执行<code>egrep -n "全屏"</code>,结果不意外,什么都没有</p>
<p>换个说法吧:<code>egrep -n "fullscreen"</code>,这下子就出现很多内容了</p>
<p><strong>定位分析和修改源码</strong></p>
<p>看到一个console.py文件,没错,就是它了。所谓的全屏,就是控制台全屏。</p>
<p><code>vim console.py</code>,按照老套路,先大概看一下,<strong>发现了Gtk.Align.CENTER</strong>的字样,通篇检索一下,发现这个字样只有一处</p>
<p>那应该就是这个地方定义了全屏退出的位置。</p>
<p>修改Gtk.Align.CENTER为Gtk.Align.START,保存退出</p>
<p><strong>效果展示</strong></p>
<p>首先退出virt-manager,然后再次打开它,进入全屏模式,发现全屏退出已经在左上角了</p>
<h1 id="后续">后续</h1>
<p>上述过程不是很难,前后没有花费超过我15分钟时间。</p>
<p>但是virt-manager对于vmware workstation的沉浸模式来说,还是体验查了很多。</p>
<blockquote>
<p>vmware workstation的沉浸模式,完全不会让你鼠标扫到退出全屏的菜单,它需要通过组合键退出。个人感觉这种方式不错</p>
</blockquote>
<p>所以后续我可能完全禁止掉这个功能,直接通过组合键进入全屏模式,通过组合键退出全屏。</p>
<p>如果是在使用虚拟机,感觉跟使用物理机一样,而不是类似于远程桌面</p>
<h1 id="2022年4月26号更新">2022年4月26号更新</h1>
<p>之前把通过virt-manager进入虚拟机控制台,全屏以后,把上面的顶栏位置更换。但是每次打开virt-manager的过程,还需要手动点击全屏,很麻烦。</p>
<p>这次直接把这个过程省略掉。</p>
<p>主要操作:</p>
<p>修改文件<code>sudo vim/usr/share/virt-manager/virtManager/console.py</code></p>
<pre><code class="language-shell">    def force_reveal(self, val):
      self._unregister_timeout()
      self._in_fullscreen = val
      self._revealer.set_reveal_child(val)
      #self._schedule_unreveal_timeout(2000)
      self._schedule_unreveal_timeout(0) # modify by liwl@2022/04/23,进入全屏时不显示topbar
</code></pre>
<pre><code class="language-shell">      self._refresh_resizeguest_from_settings()
      self.add_gsettings_handle(
            self.vm.on_console_resizeguest_changed(
                self._refresh_resizeguest_from_settings))
      self.add_gsettings_handle(
            self.config.on_console_accels_changed(self._refresh_enable_accel))

      self._change_fullscreen(True) # 直接进入全屏。add by liwl@2022/04/23

</code></pre>
<p>修改内容2处,如上。保存退出。</p>
<p>然后,在deepin的/home/${USER}/.bashrc里面创建一个alias,<code>alias vncdp='virt-manager --connect qemu:///system --show-domain-console deepin'</code></p>
<p>保存退出,<code>source /home/${USER}/.bashrc</code>,即可通过vncdp打开deepin虚拟机。</p><br><br>
来源:https://www.cnblogs.com/liwanliangblog/p/14370917.html
頁: [1]
查看完整版本: deepin定制virt-manager