Wine - Como instalar um programa Windows para todos os usuários do computador (incluindo a conta Convidado)

Publicado por Eduardo Mozart de Oliveira em 06/07/2017

[ Hits: 8.610 ]

Blog: http://www.eduardomozartdeoliveira.wordpress.com/

 


Wine - Como instalar um programa Windows para todos os usuários do computador (incluindo a conta Convidado)



NOTA: este procedimento, apesar de funcionar, não é suportado pela comunidade do Wine.

No local onde trabalho possuímos um sistema de controle de material desenvolvido em Visual Basic (Windows) com banco de dados Firebird. O programa é compatível com o Wine, por isso, podemos executá-lo em ambiente Linux.

O Wine, por padrão, é monousuário (ou seja, cada usuário possuí uma "instalação" do Windows única, com configurações e programas específicos para aquele usuário). Nativamente, ele não suporta a instalação compartilhada (Shared, de acordo com a CrossOver) de programas.

Nossas estações Linux estão ingressadas ao Active Directory através do cid. Cada usuário possuí um usuário e senha para poder mexer no computador. Tanto o dono do computador quanto os seus auxiliares precisam utilizar o programa, mas o dono não estava disposto a compartilhar seu usuário e senha devido a documentos confidenciais que estão armazenados no computador.

Precisaríamos deslocar a equipe de TI para instalar o programa para cada novo auxiliar que utilizar o computador com seu usuário ou senha (uma seção que possuí alta rotatividade), ou poderíamos automatizar a instalação do programa para cada novo usuário que loga-se no computador: escolhemos a última.

OS PASSOS A SEGUIR INSTALARÃO O PROGRAMA APENAS PARA NOVOS USUÁRIOS (/etc/skel). OS USUÁRIOS ATUAIS NÃO SERÃO AFETADOS. O diretório /etc/skel é a base (em tradução literal, skel pode ser entendido como abreviação da palavra "esqueleto" [skeleton]) do diretório $HOME de novos usuários: todo conteúdo deste diretório é copiado para a $HOME do usuário (/home/$USER) quando ele realiza logon pela primeira vez (apenas na primeira vez - por isso, usuários atuais não serão afetados ao alterarmos o diretório /etc/skel).

Para criar um perfil do Wine para todos os usuários:

1 - Instale o programa Windows através do Wine no usuário atual.

2 - Copie o diretório .wine do usuário atual para /etc/skel (diretório que contém o "esqueleto" (skel) de arquivos e diretórios que são copiados automaticamente para o diretório home do usuário quando ele loga pela primeira vez no sistema) com o comando:

sudo cp -R ~/.wine /etc/skel

3 - Agora, precisamos disponibilizar os ícones dos programas Windows instalados pelo Wine do usuário atual para novos usuários com o comando:

sudo mkdir -p /etc/skel/.local/share/icons
$ sudo cp -R ~/.local/share/icons/hicolor /etc/skel/.local/share/icons


3 - Para criarmos um atalho para o programa para novos usuários, copie o atalho local (~/.local/share/applications/wine) do programa para /etc/skel/.local/share/applications/wine.

sudo mkdir -p /etc/skel/.local/share/applications/wine
$ sudo cp -R ~/.local/share/applications/wine/Programs /etc/skel/.local/share/applications/wine


Como o Wine instalou o programa somente para o usuário atual, os atalhos para a execução do programa apontarão para a pasta $HOME (/home/$USER) do usuário atual. Precisamos editar todos os arquivos *.desktop em /etc/skel/.local/share/applications/wine/Programs para apontar para ~ (diretório $HOME do usuário que logará no computador). Para não termos de alterar cada arquivo individualmente, podemos automatizar este processo com o comando [1] [2]:

sudo find /etc/skel/.local/share/applications/wine/Programs -name "*.desktop" -print0 | xargs -0 sudo sed -i "s|${HOME}|\~|g"

Infelizmente, atalhos (arquivos *.desktop) não expandem variáveis (~ é uma variável para o diretório $HOME do usuário atual). Precisamos criar um script para ser executado após o login do usuário para expandir ~ para o diretório home do usuário atual (/home/$USER). Para isso, crie o arquivo /etc/profile.d/wine.sh com o conteúdo:

#!/bin/bash
find ~/.local/share/applications/wine/Programs -name "*.desktop" -print0 | xargs -0 sed -i "s|\~|${HOME}|g"
cp ~/.local/share/applications/wine/Programs/SimatexOm\ 3.3.3/SISCOFIS\ OM\ 3.3.3.desktop ~/Área\ de\ Trabalho
chmod +x ~/Área\ de\Trabalho/SISCOFIS\ OM\ 3.3.3.desktop

As duas últimas linhas do script são opcionais: Ela cria um atalho para um programa Wine específico (SISCOFIS OM) para a Área de Trabalho e dá ao atalho permissão de execução ao usuário atual.

Referências

[1] STACK OVERFLOW. Linux - Find Files with Name Containing String, 2012 http://stackoverflow.com/questions/11328988/linux-find-files-with-name-containing-string (último acesso em 03 de setembro de 2016)

[2] STACK OVERFLOW. Awk/Sed: How to do a recursive find/replace of a string?, 2010 http://stackoverflow.com/questions/1583219/awk-sed-how-to-do-a-recursive-find-replace-of-a-string (último acesso em 03 de setembro de 2016)

Outras dicas deste autor

Acessando compartilhamentos de rede do Windows pelo CentOS

Como abrir um arquivo .mht no Linux

Pacotes RPM no CentOS - Erro: "Warning: RPMDB altered outside of yum" [Resolvido]

Instalando o Spark IM no Ubuntu

Miniatura de arquivos SWF no Linux

Leitura recomendada

[RESOLVIDO] Slackware 13.1.x sob CentOS/KVM não reconhece interface de rede

Migrar Servidor Samba de Hardware

Zimbra Collaboration Server 7 - Community Edition

Redimensionar imagens VDI (VirtualBox) no GNU/Linux

atrpms.repo para yum no rhel4

  

Comentários
[1] Comentário enviado por brunossilva32 em 06/05/2019 - 15:58h

Cara muito obrigado me ajudou muito aqui na empresa uma situação idêntica e funcionou.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts