SO virtual usando o mesmo papel de parede como host

5

Saudações,

Estou executando um sistema operacional Linux convidado no topo do Windows XP, que roda seus papéis de parede usando o PowerToy Wallpaper Changer . Eu estou esperando uma maneira para o meu sistema operacional convidado de alguma forma detectar qual papel de parede o host está usando, e automaticamente mudar para ele.

Por quê? Porque se eu executar meu sistema operacional convidado no modo transparente e tiver janelas transparentes, quero que o plano de fundo transparente corresponda ao sistema operacional host. Parece legal assim :).

Um par de petiscos de informação relevante:

  • OS convidado é Peppermint Ice (baseado em Ubuntu)
  • O sistema operacional do host é o Windows XP
  • VirtualBox como software de virtualização

Eu percebo que isso é um pouco quebrar as fronteiras entre o host eo convidado, mas eu quero o meu papel de parede muito rotativo! Eu estou supondo que há uma maneira de usar scripts e pastas compartilhadas ou algo semelhante, se não por meio de apenas consultar o sistema operacional host.

Jeff
fonte

Respostas:

4

Esta questão terminará precisando de programação. Você pode começar a ouvir as alterações nas Configurações da Área de Trabalho , quando uma nova configuração é aplicada, pegue o caminho atual para o papel de parede do registro e "sinalize" para algum aplicativo.

Isso é um exemplo que eu fiz e testei contra o Microsoft Windows 7 64bits foi compilado usando mingw32 (linux devel aqui) Wallpaper Monitor . Você pode facilmente alterar / expandir a linha 62.

dvd
fonte
Obrigado, eu estou supondo que a mesma configuração do registro também funciona para o Windows 7?
Jeff
1
Sim mesmo @Jeff. Aqui está um pequeno código meu para configurar o projeto aleatório wp rejeane.c em C.
dvd
Parece que você deu informações suficientes aqui para eu conseguir algo trabalhando na minha máquina com Windows 7 também! Obrigado!
Jeff
1

Se você estiver usando o Windows PowerToys, o papel de parede ativo atual estará em C:\WINDOWS\system32\toyhide.bmp.

Você pode configurar a máquina virtual para montar a pasta system32 e adicionar uma tarefa cron para definir o papel de parede para o arquivo toyhide.bmp a cada minuto. Pode ser uma boa ideia montar esta pasta como somente leitura, para o caso de algo tentar atrapalhá-la.

Edit: Minha solução cron me incomodou por sempre atualizar meu papel de parede, mesmo quando não tinha mudado, então, em vez disso, eu escrevi um script python para ser executado na inicialização. Este script basicamente olha para o toyhide.bmp montado e só atualiza o papel de parede se ele foi modificado, verificando a cada segundo para reduzir o tempo de atraso.

#!/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)
Jeff
fonte