Bug 1240

Summary: Надо разобраться, можно ли создать перемещаемый ярлык
Product: LINUX@Etersoft Reporter: Vitaly Lipatov <lav>
Component: ОбщееAssignee: Danil Michailov <danil>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P4 CC: baraka, info, kondratyuk, lav, sin
Version: не указана   
Target Milestone: выпуск 1.0   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 4159    
Bug Blocks: 8900, 9097, 638    

Description Vitaly Lipatov 2008-02-29 23:07:08 MSK
Для работы wine в режиме административной установки нужно разобраться как устроить перемещаемый ярлык: не имеющий прямых путей.

Что хочется:
- относительный путь к запускаемой программе (реализуется через WINEPREFIX?)
- относительный (не указываемый) путь к значку ярлыка
- способ указания оконному менеджеру (XDG?) дополнительного каталога с ярлыками для появления в меню
- способ указания у пользователя дополнительного пути к значкам

В качестве исключения придётся использовать путь к общему каталогу (/var/lib/wine...)
Comment 1 Vitaly Lipatov 2009-08-02 17:26:07 MSD
http://portland.freedesktop.org/xdg-utils-1.0/xdg-desktop-menu.html

Если невозможно указать дополнительный каталог для deskstop-файлов и  значков, придётся делать команду их копирования/обновления пользователю?

Comment 2 Devaev Maxim 2010-01-09 17:04:51 MSK
Я не совсем понял задачу. Опиши, пожалуйста, пример такого ярлыка.
Comment 3 Vitaly Lipatov 2010-01-09 18:36:51 MSK
Нужно сделать ярлык для приложения (со значком), при условии, что файл приложения и файл значка располагаются в домашнем каталоге. При этом в ярлыке не должно быть явной привязки к домашнему каталогу.
То есть кладёшь программу в ~/bin, а значок в ~/.local/share/icons
делаешь на них ярлык, а потом передаёшь мне ярлык вместе с файлами из bin и icons, и ярлык у меня работает.
Comment 4 Devaev Maxim 2010-01-10 01:55:24 MSK
В стандарте ничего не сказано про относительные пути: http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s06.html
Там говорится, что можно использовать или имя команды, тогда для поиска будет использоваться $PATH, или полный путь.

Но я попробовал создать .desktop, у которого прописан ключ Exec=~/test, где test - имя команды. при этом сам десктоп-файл находился в другом каталоге и все запускалось нормально. Затем попробовал указывать Exec=$HOME/test, тоже работает. Мне кажется, это какая-то недокументированная фича.

У меня стоит KDE4, надо проверить в гноме.
Comment 5 Devaev Maxim 2010-01-11 14:59:37 MSK
Порядок тестирования:

$ mkdir -p ~/test/test
$ ln -s `which xterm` ~/test/test
$ echo -e '[Desktop Entry]\nType=Application\nName=xterm\nExec=~/test/test/xterm' > ~/xterm.desktop

Полученный файл xterm.desktop пробуем запустить двойным кликом из конкверора или аналогичной программе в гноме. Затем меняем пусть к исполняемому файлу на Exec=$HOME/test/test/xterm.
Comment 6 Devaev Maxim 2010-01-11 15:20:11 MSK
Konqueror запускает без вопросов в федоровском kde4. Dolphin спрашивает подтверждения при первом запуске. И там, и там работает и использование ~/... и переменных окружения типа $HOME

UPD: Desktop Entry пишется через пробел.
Comment 7 Vitaly Lipatov 2010-01-11 16:35:34 MSK
Основная проблема - со значком. Команду, понятно, так или иначе, можно запустить. 
Comment 8 Devaev Maxim 2010-01-11 16:51:34 MSK
Для иконки нельзя указать относительный путь. То есть, использование всяких ~ и $HOME не работает. Только абсолютный или вообще без пути и расширения, тогда файл ищется в общесистемных каталогах.
Comment 9 Devaev Maxim 2010-01-11 17:21:45 MSK
Так, я сейчас вспомнил, что в хоуме есть отражения стандартного /usr/share/local, а именно, ~/.local. И есть каталог ~/.local/share/icons, в который можно скинуть иконку и затем в ключе Icon=blablabla указывать без полного пути, просто имя иконки. Проверил в кедах у себя, работает. Не знаю на счет стандартизированности, но ~/.local это общеизвестная штука.
Comment 10 Devaev Maxim 2010-01-11 18:58:09 MSK
На этом, думаю, проблему можно считать решенной.
Comment 11 Vitaly Lipatov 2010-01-11 19:00:48 MSK
Переоткрываю, чтобы Денис проверил на GNOME
Comment 12 Vitaly Lipatov 2010-02-09 19:54:05 MSK
Пример работающего переносимого ярлыка:
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=1C:Предприятие
Exec=env WINEPREFIX="$HOME/.wine-buh" wine "C:\\Program Files\\1cv82\\common\\1cestart.exe".
Type=Application
StartupNotify=true
Icon=89d2_shortcut_thinstarter.0.png

Comment 13 Денис Баранов 2010-07-05 21:23:50 MSD
(In reply to comment #12)
> Пример работающего переносимого ярлыка:
> #!/usr/bin/env xdg-open
> [Desktop Entry]
> Name=1C:Предприятие
> Exec=env WINEPREFIX="$HOME/.wine-buh" wine "C:\\Program
> Files\\1cv82\\common\\1cestart.exe".
> Type=Application
> StartupNotify=true
> Icon=89d2_shortcut_thinstarter.0.png
> 

Ну он будет не совсем работающий, так как картинку то с собой придется нести, а так, он будет работать.
Comment 14 Денис Баранов 2010-07-13 17:50:54 MSD
В Gnome при использовании такой команды запуска: Exec=env WINEPREFIX=$HOME/.wine wine "C:\\ProgramFiles\\1cv82\\common\\1cestart.exe"
происходит создание нового окружения в каталоге /home/user/$HOME/.wine
т.е. не происходит расшифровки $HOME
тестировал в WINE@Etersoft 1.0.12 eter6.12/eter11 Ubuntu 10.04
Comment 15 Vitaly Lipatov 2011-01-12 16:38:41 MSK
Александр Морозов 2011-01-12 15:59:01 MSK

Отработанное время: 0.5
> Хочется Win-путь к ярлыку для увеличения переносимости ярлыков.
Кроме пути к Win-программе .desktop-файл содержит ещё рабочую директорию, её
нельзя записать в виде win-пути. Так что переносимым ярлык всё равно не будет.
Comment 16 Vitaly Lipatov 2011-01-12 16:47:05 MSK
Итак, на данный момент для W@E 2.0 осталось выяснить, можно ли записать WINEPREFIX как ~/.wine или $HOME/.wine
Comment 17 Александр Морозов 2011-01-12 17:00:43 MSK
(В ответ на http://bugs.etersoft.ru/show_bug.cgi?id=6748#c11)
> А рабочую директорию возможно записать через переменную вроде: ~/.wine или
> $HOME/.wine ?

Это поддерживается не везде: http://www.mail-archive.com/xdg@lists.freedesktop.org/msg04327.html
В спецификации ничего про ~ и переменные окружения нет: http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html

Но вообще Path по спецификации не требуется. Возможно, устроит .desktop-файл с запуском .lnk с помощью start (я не разбирался, хранится ли в .lnk рабочая директория).

(В ответ на comment #16)
> Итак, на данный момент для W@E 2.0 осталось выяснить, можно ли записать
> WINEPREFIX как ~/.wine или $HOME/.wine
Насколько я понимаю, это будет работать не везде.
Comment 18 Александр Морозов 2011-01-12 17:13:30 MSK
> Но вообще Path по спецификации не требуется. Возможно, устроит .desktop-файл с
> запуском .lnk с помощью start (я не разбирался, хранится ли в .lnk рабочая
> директория).
От проблемы с WINEPREFIX это, правда, всё равно не избавит.

Может просто из ярлыка вызывать скрипт, который всё запустит как надо (с нужным WINEPREFIX)?
Comment 19 Vitaly Lipatov 2011-01-12 18:39:20 MSK
(В ответ на comment #15)
> > Хочется Win-путь к ярлыку для увеличения переносимости ярлыков.
> Кроме пути к Win-программе .desktop-файл содержит ещё рабочую директорию, её
> нельзя записать в виде win-пути. Так что переносимым ярлык всё равно не будет.
Подожди, настоящий рабочий каталог должен храниться в lnk-файле. в desktop не всегда есть его поддержка.
Comment 20 Vitaly Lipatov 2011-01-12 18:40:30 MSK
(В ответ на comment #17)
...
> (В ответ на comment #16)
> > Итак, на данный момент для W@E 2.0 осталось выяснить, можно ли записать
> > WINEPREFIX как ~/.wine или $HOME/.wine
> Насколько я понимаю, это будет работать не везде.
Сказки не надо — WINEPREFIX обрабатывается внутри Wine, если мы там решим раскрывать «~», то будет раскрываться.
Comment 21 Александр Морозов 2011-01-12 19:05:34 MSK
> > > Итак, на данный момент для W@E 2.0 осталось выяснить, можно ли записать
> > > WINEPREFIX как ~/.wine или $HOME/.wine
> > Насколько я понимаю, это будет работать не везде.
> Сказки не надо — WINEPREFIX обрабатывается внутри Wine, если мы там решим
> раскрывать «~», то будет раскрываться.
Ну, это если решим...
Comment 22 Дмитрий 2011-06-15 16:18:32 MSK
Добрый день. Есть-ли какие-то продвижения по этому вопросу? Интересует каким образом можно создать ссылку на запуск 1С в /etc/skel, чтобы при добавлении нового пользователя ярлык автоматически появлялся на рабочем столе? Директорию .wine c установленной 1С в /etc/skel скопировали.
Comment 23 Александр Морозов 2011-06-15 17:03:08 MSK
Вообще говоря, WINEPREFIX нужно устанавливать, только если используется нестандартный wineprefix, не ~/.wine. Но если таки нужно его прописать, то, думаю, должно работать такое:
Exec=sh -c 'WINEPREFIX="$HOME/.wine-buh" wine "C:\\Program Files\\1cv82\\common\\1cestart.exe"'

> Добрый день. Есть-ли какие-то продвижения по этому вопросу? Интересует каким
> образом можно создать ссылку на запуск 1С в /etc/skel, чтобы при добавлении
> нового пользователя ярлык автоматически появлялся на рабочем столе? Директорию
> .wine c установленной 1С в /etc/skel скопировали.

Поместите создающийся при установке 1С ярлык в /etc/skel/Desktop, удалив env WINEPREFIX="..." в Exec. Скопируйте иконку (имя задано в Icon в ярлыке) в /etc/skel/.local/share/icons. Думаю, должно работать.
Comment 24 Danil Michailov 2013-07-15 18:15:44 MSK
1) Создал файл /etc/skel/Desktop/notepad.desktop

#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Notepad
Exec="wine notepad"
Type=Application
StartupNotify=true
Icon=/etc/skel/.local/share/icons/wine.png

2) Положил иконку
cp /usr/share/icons/wine.ico /etc/skel/.local/share/icons/

3) Создал нового пользователя
adduser -b /var/ftp/tmp -m tempuser

Указание иконки через
Icon=~/.local/share/icons/wine.png
Icon=$HOME/.local/share/icons/wine.png
не работают