Isquariel 18.08.2012 22:43

Tips & tricksОбщая конфигурация Wine для всех пользователей

Появилась задача настроить Wine так, чтобы он был один для всех пользователей. Сначала я попробовала создать папку /media/Data/.wine, принадлежащую root:wine и с правами 775, включила необходимых пользователей в группу wine и сделала для каждого
1
ln -s /media/Data/.wine ~/.wine

Но при попытке запустить wine он ругался на права
1
wine: /media/Data/.wine is not owned by you

Тогда было изобретено решение создать некоего пользователя, от имени которого все будут запускать wine.Предполагается, что wine и sudo уже установлены.
Итак, создаём нового пользователя wine
1
# adduser wine

добавляем пользователей, которые смогут запускать wine в группу wine
1
gpasswd -a username wine

Создаём /etc/sudoers.d/10-wine с примерно таким содержимым:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#
# This file MUST be edited with the 'visudo' command as root.
#

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias WINE = /usr/bin/wine, /usr/bin/wine32, /usr/bin/wine-auto,\
/usr/bin/wineboot, /usr/bin/wineboot32, /usr/bin/winecfg,\
/usr/bin/winecfg32, /usr/bin/wineconsole,\
/usr/bin/wineconsole32, /usr/bin/winedbg, /usr/bin/winedbg32,\
/usr/bin/winefile, /usr/bin/winefile32,\
/usr/bin/wine-font-convert, /usr/bin/wine-font-convert32,\
/usr/bin/winemine, /usr/bin/winemine32,\
/usr/bin/winepath, /usr/bin/winepath32,\
/usr/bin/wine-safe
# User privilege specification

# Allow members of group sudo to execute any command
%wine ALL = (wine) WINE

Теперь делаем, чтобы .wine этого пользователя было /media/Data/.wine
1
ln -s /media/Data/.wine /home/wine/.wine

Перезагружаемся, бла-бла-бла, пробуем что-нибудь запустить
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sudo -u wine wine regedit
No protocol specified
No protocol specified
No protocol specified
No protocol specified
err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
fixme:heap:HeapSetInformation (nil) 1 (nil) 0
No protocol specified
No protocol specified
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
fixme:ole:CoInitializeSecurity ((nil),-1,(nil),(nil),0,3,(nil),0,(nil)) - stub!
No protocol specified
No protocol specified
No protocol specified
No protocol specified
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.

О нет! Пользователь wine не может заюзать наши иксы! Придётся ему разрешить:
1
xhost +SI:localuser:wine

Всё, теперь снова можем запускать, и всё работает. Но не вводить же каждый раз эту команду. Надо бы прописать её в автозапуск куда-нибудь. В /etc/X11/xinit/xinitrc не заработало, в /etc/profile.d/wine.sh не заработало в иксах, хотя в консоли всё как раз отлично. Уже поздно, разбираться с этим лениво. И я накидала простенький скрипт:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh

WINEGROUP=wine
WINEUSER=wine
WINEDIR=/home/$WINEUSER/.wine

if [ '`groups | grep $WINEGROUP`' ]; then

if [ "$DISPLAY" ]; then
if ! [ '`xhost | grep $WINEUSER`' ]; then
xhost "SI:localuser:$WINEUSER"
fi
fi

sudo -u "$WINEUSER" wine "$@"

fi

exit 0

Не забудьте про права на всё это дело.
  • drwxrwxr-x wine:wine /media/Data/.wine
  • lrwxrwxrwx wine:wine .wine -> /media/Data/.wine
  • -rwxr-xr-x root staff /usr/local/bin/Wine


Как обычно: что вы думаете об идее в целом и о реализации в частности?


Тэги: debian wine настройка
+ 5 -
Похожие Поделиться

predator 18.08.2012 23:03 #
а не пробовали просто поставить владельцем папки /media/Data/.wine группу wine, добавить пользователей в эту группу и сделать cd ~ && ln -s /media/Data/.wine?
Isquariel 18.08.2012 23:10 #
Он ругается.
wine: /media/Data/.wine is not owned by you

Вайн хочет, чтобы пользователь не в группе владельцев был, а владельцем вообще.
TiGR 29.10.2012 13:10 #
Я создавал для каждого пользователя отдельно в его домашней директории .wine с нужными симлинками в единое хранилище, где были проставлены права, а все пользователи были добавлены в группу wine. Вайн создавал домашние папки для каждого пользователя в c:users и эти папки уже принадлежали каждому конкретному пользователю.

Но это всё равно костыльное решение, нужно чтобы вайн это поддерживал из коробки.
cppmm 19.08.2012 03:36 #
Отличный ход мыслей и замечательный костыль(без сарказма). Я такое люблю сам делать. :)
Не проверял, правда, потому как наоборот люблю полное разграничение прав.
xelez 19.08.2012 08:38 #
Хм, возможно у этого решения есть ложка дёгтя. Попробуй из под вайна, запущенного таким образом создать файл. Скорее всего у него будет неверный владелец, если вообще удастся его создать. Ибо теперь uid=euid=wine и если у приложения и будут права создавать файлы в каталоге пользователя, то пользователь возможно не сможет его потом, например, удалить. Хотя можно попробовать побаловаться с UMASK`ом, но не факт что поможет.

Также общий wine для всех пользователей плох тем, что каждый может что-нибудь в нём испортить.

Я бы предпочел метод, когда общий лишь drive_c или вообще только диск с программами, а .wine копировался в домашнюю папку с оригинала при каждом входе в профиль. На мой взгляд куда более простое и эффективное решение.
mealsforall 19.08.2012 18:31 #
Wine Wiki предупреждает против этого:
http://wiki.winehq.org/FAQ/#head-f54d469b937b82e6d757a851dfcece0167919859

Мол, реестр можно попортить.
xelez 20.08.2012 12:13 #
Не, в данном костыле всё запускается из под одного пользователя, так что wineserver будет один и с этим-то проблем как раз не будет.
manqwest 20.08.2012 12:35 #
http://bugs.winehq.org/show_bug.cgi?id=11112

http://wiki.winehq.org/FAQ#head-f54d469b937b82e6d757a851dfcece0167919859

http://www.winehq.org/docs/wineusr-guide/using-regedit
4.2.4