Virtual OS usando o mesmo papel de parede como host

5

Saudações

Estou executando um sistema operacional convidado Linux em cima do Windows XP, que roda seus papéis de parede usando o PowerToy Wallpaper Changer . Eu estou esperando por 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:).

Algumas informações importantes:

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

Eu percebo que isso está um pouco quebrando as fronteiras entre o host e o convidado, mas eu quero meu bonito papel de parede 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.

    
por Jeff 07.06.2011 / 01:55

2 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 papel de parede do registro e "sinal" para algum aplicativo.

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

    
por 08.06.2011 / 22:47
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 no 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.

Editar: Minha solução cron me incomodava sempre atualizando meu papel de parede mesmo quando ele não tinha mudado, então eu escrevi um script python para rodar 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)
    
por 07.06.2011 / 23:05