虚拟操作系统使用与主机相同的壁纸

虚拟操作系统使用与主机相同的壁纸

问候,

我在 Windows XP 上运行了一个客户 Linux 操作系统,它使用PowerToy 壁纸更换器。我希望我的客户操作系统能够以某种方式检测主机正在使用哪种壁纸,并自动切换到它。

为什么?因为如果我以无缝模式运行客户操作系统并具有透明窗口,我希望透明背景与主机操作系统相匹配。这样看起来不错 :)。

一些相关信息:

  • 客户操作系统是 Peppermint Ice(基于 Ubuntu)
  • 主机操作系统是 Windows XP
  • VirtualBox 作为虚拟化软件

我意识到这在某种程度上打破了主机和客户机之间的界限,但我想要我漂亮的旋转壁纸!我猜有一种方法可以使用脚本和共享文件夹或类似的东西,如果不是通过查询主机操作系统的话。

答案1

这个问题将不再需要编程。你可以开始听桌面设置更改,当应用新设置时,从注册表中获取壁纸的当前路径并向某些应用程序“发出信号”。

这是我制作并测试的一个例子,针对 Microsft Windows 7 64 位,使用 mingw32 进行编译(此处为 linux devel)壁纸监视器。您可以轻松更改/扩展第 62 行。

答案2

如果您使用 Windows PowerToys,当前活动壁纸将位于C:\WINDOWS\system32\toyhide.bmp

您可以设置虚拟机以安装 system32 文件夹,并添加一个 cron 作业,以便每分钟将壁纸设置为 toyhide.bmp 文件。将此文件夹安装为只读可能是个好主意,以防有人试图破坏它。

编辑:我的 cron 解决方案总是刷新壁纸,即使壁纸没有变化,这让我很烦,所以我编写了一个在启动时运行的 Python 脚本。这个脚本基本上会查看已安装的 toyhide.bmp,并且只有在壁纸被修改时才会刷新壁纸,每秒检查一次以减少延迟时间。

#!/usr/bin/python
import os
import time

# Update to wherever you mounted toyhide.bmp
fname = "/<mnt_location>/toyhide.bmp"

# Peppermint uses pcmanfm for setting the wallpaper. YMMV
wallpaper_cmd = "/usr/bin/pcmanfm  --set-wallpaper=%s" % fname

# Update the wallpaper on startup and save the mod time
os.system(wallpaper_cmd)
mod_time = os.path.getmtime(fname)

while True:
    try:
        # If mod time changes, set wallpaper again and get new mod time
        if os.path.getmtime(fname) != mod_time:
            mod_time = os.path.getmtime(fname)
            os.system(wallpaper_cmd)
    except OSError:
        # Sometimes the mount seems to fail if my computer is sleeping.
        # Just catch the error and try again
        pass 
    time.sleep(1)

相关内容