Найдите исполняемый файл недавно установленного приложения «Beyond Compare» - PullRequest
0 голосов
/ 14 ноября 2018

Некоторые средства просмотра исходного кода позволяют пользователю выбирать приложение не по умолчанию для разрешения конфликтов во время слияний. Для этого мне нужно указать местоположение нужного мне инструмента, поэтому я установил Beyond Compare из Ubuntu Software. Но я не смог найти установленную базовую папку.

Попытался выяснить это, проверив атрибуты работающего экземпляра "Beyond Compare", используя ps -ef. Действительно, один из запущенных процессов, порожденный из файла /snap/bcompare/90/usr/bin/bcompare из скрипта типа bash.

Я предполагаю, что это файл, который вызывался один раз, дважды щелкнув по значку Beyond Compare в списке приложений.

Я открыл файл и увидел, что он указывает на $SNAP/usr/lib/beyondcompare/Bcompare, но я не могу найти настройку $SNAP.

Поэтому я искал имя приложения в суффиксе ("/ usr / lib / beyondcompare ..), но ничего не нашел.

В конце концов я обнаружил отсутствующую исполняемую ссылку в /snap/bin/bcompare,

zohark@ubuntu:/snap/bin$ ls -ltr /snap/bin/bcompare 
lrwxrwxrwx 1 root root 13 Nov 14 00:21 /snap/bin/bcompare -> /usr/bin/snap

Когда я запускаю его напрямую, я не поддаюсь сравнению, но если я запускаю связанный файл /usr/bin/snap, я получаю инструмент привязки.

Мои вопросы

  1. Почему установщик выбирает место вне /usr/share/application этого инструмента?

  2. Где можно увидеть процесс двойного щелчка по приложению до этапа, на котором оно запущено? Где он устанавливает некоторые переменные окружения, такие как $SNAP?.

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2018
  1. Начиная с версии 16.04, Canonical решила представить в Ubuntu собственную систему управления пакетами snap в дополнение к существующему deb / apt, поставляемому Debian. Он в основном используется для несвободного (не открытого, т.е. проприетарного) программного обеспечения, такого как Beyond Compare, и другого программного обеспечения, которое никогда не добавлялось в репозитории Ubuntu deb *.

Я ожидаю, что они решили установить пакет мгновенной установки в другое место, чем по умолчанию, поскольку это помогает предотвратить определенные виды конфликтов, которые могут быть вызваны сосуществованием файлов, управляемых различными системами управления пакетами в одном и том же каталоге (ах).


  1. Значки приложений на самом деле соответствуют .desktop файлам. Эти файлы обычно помещаются в специальные папки, где файловые менеджеры и рабочие столы смогут их найти. Мне известны следующие папки:

    • /usr/share/applications
    • /var/lib/snapd/desktop
    • ~/.local/share/applications
    • /etc/xdg/autostart/

Следующая команда должна найти все файлы .desktop в вашей системе.

find /opt /snap /usr ~ /etc /lib* /srv /var /sbin /bin -name '*.desktop' 2>/dev/null

Файл .desktop выглядит следующим образом:

$ cat /usr/share/applications/filezilla.desktop
[Desktop Entry]
Name=FileZilla
GenericName=FTP client
GenericName[da]=FTP-klient
GenericName[de]=FTP-Client
GenericName[fr]=Client FTP
Comment=Download and upload files via FTP, FTPS and SFTP
Comment[da]=Download og upload filer via FTP, FTPS og SFTP
Comment[de]=Dateien über FTP, FTPS und SFTP übertragen
Comment[fr]=Transférer des fichiers via FTP, FTPS et SFTP
Exec=filezilla
Terminal=false
Icon=filezilla
Type=Application
Categories=Network;FileTransfer;
Version=1.0

Для приложений, расположение которых необычно, запись Exec= обычно представляет собой абсолютный путь, поэтому вы знаете, где на самом деле находится файл для выполнения. Это касается кода Visual Studio:

$ cat /usr/share/applications/code.desktop 
[Desktop Entry]
Name=Visual Studio Code
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=/usr/share/code/code --unity-launch %F
Icon=code
Type=Application
StartupNotify=true
StartupWMClass=Code
Categories=Utility;TextEditor;Development;IDE;
MimeType=text/plain;inode/directory;
Actions=new-empty-window;
Keywords=vscode;

[Desktop Action new-empty-window]
Name=New Empty Window
Exec=/usr/share/code/code --new-window %F
Icon=code

Если вы хотите узнать значение переменной $SNAP, я ожидаю, что лучшее, что вы можете сделать, - это изменить скрипт и включить строку, подобную приведенной ниже, вверху.

echo 'SNAP='"$SNAP" > /tmp/SNAP_VALUE

Затем запустите приложение и проверьте файл /tmp/SNAP_VALUE, либо с помощью gedit, либо из терминала:

more /tmp/SNAP_VALUE
...