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.979 ]

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

Miniatura de arquivos SWF no Linux

Acessando compartilhamentos de rede do Windows pelo CentOS

Comando "df -h" retorna 0 em espaço disponível (Avail) após instalação do Ubuntu [Resolvido]

Acessando desktop do Debian 8 (Jessie) remotamente através do TightVNC

Como criar pacotes RPM ou DEB pelo código-fonte utilizando FPM (Ruby on Rails)

Leitura recomendada

Aprenda mais sobre o GNU/Linux

Erro na instalação do Liquorix: "gpg: keyserver receive failed: No name" [RESOLVIDO]

Instalando pacotes x86 no Debian 7 x64

Criando uma imagem Docker a partir de uma máquina virtual

Criando bibliotecas (shared library) *.so

  

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