Вопрос или проблема
У меня есть приложение, в котором я создал файл /usr/share/application/foo.desktop из моего dpkg.
Я хочу иметь несколько экземпляров типов LINK на моем ~/Desktop/, которые отличаются только Name и Exec. Это выглядело просто, и моя попытка в этом ‘сработала частично’, за исключением того, что Desktop/foo1.desktop и foo2.desktop не получают иконку из файла /usr/share/application.
То, что я хочу, кажется достаточно простым. У вас есть стандартный файл рабочего стола, установленный пакетом, а затем вы ссылаетесь на него, и каждая ссылка изменяет некоторые ключевые параметры.
В моем случае это тип диктофона, и я собираюсь запускать несколько различных записей потоков данных.
ChatGPT, похоже, считает, что это невозможно. Я скептически настроен, так как большая часть действительно работает. Я чувствую, что пропускаю какой-то ключевой момент, поэтому буду рад предложениям. Если кому-то интересно, я могу привести примеры.
Нельзя. Создание ссылок (man ln
) изменяет иноды (записи в каталоге) и не вмешивается в содержимое файла.
Если вы хотите другого поведения, вам придется иметь разные файлы.
Во время установки вы можете сделать что-то вроде:
sed -e `/^Exec=/s%=.*%=/path/to/yours%`
foo.desktop >foo1.desktop
Вы можете использовать несколько -e
для изменения разных строк.
Читать man sed
и info sed
.
Ответ или решение
Вопрос, который вы поднимаете, касается создания нескольких экземпляров .desktop файлов для одной и той же программы, с изменёнными параметрами, такими как Name
и Exec
. Это распространенная задача для разработчиков приложений и пользователей Linux, которые хотят организовать работу со своими приложениями более удобно. Давайте рассмотрим все аспекты этой проблемы.
Основная проблема
Вы создали основной файл /usr/share/applications/foo.desktop для вашего приложения и хотите создать несколько ярлыков на рабочем столе, которые будут отличаться лишь некоторыми параметрами. Хотя концепция "ссылок" на файл выглядит привлекательной, на практике это приводит к ограничениям из-за особенностей работы файловой системы и формата .desktop.
Почему ссылки не подойдут?
Как вы правильно заметили, использование символических ссылок (или жестких ссылок) не изменяет содержимое самого файла; вместо этого это лишь указывает на один и тот же inode в файловой системе. Поэтому любые изменения, сделанные в основном .desktop файле, отразятся и на ваших ярлыках, что не соответствует вашим требованиям. Кроме того, к сожалению, не все элементы, такие как иконки, правильным образом отображаются при использовании ссылки.
Решение через копирование
Лучший способ – это создать отдельные .desktop файлы для каждого экземпляра вашего приложения. Вы можете скопировать основное приложение и затем изменить нужные параметры. Чтобы сделать это быстро и эффективно, можно использовать sed
на этапе установки вашего пакета.
Пример использования sed
Для автоматизации процесса вы можете внедрить следующий скрипт в процесс сборки вашего пакета:
#!/bin/bash
# Копируем оригинальный файл
cp /usr/share/applications/foo.desktop ~/Desktop/foo1.desktop
# Изменяем необходимые поля
sed -i -e 's/^Name=.*/Name=Переключитель 1/' \
-e 's|^Exec=.*|Exec=/path/to/your/recorder1|' \
~/Desktop/foo1.desktop
# Повторяем для второго экземпляра
cp /usr/share/applications/foo.desktop ~/Desktop/foo2.desktop
sed -i -e 's/^Name=.*/Name=Переключатель 2/' \
-e 's|^Exec=.*|Exec=/path/to/your/recorder2|' \
~/Desktop/foo2.desktop
Параметры смены
В данном примере:
- Копируется оригинальный файл
foo.desktop
. - С помощью
sed
изменяются строкиName
иExec
. - Вы можете добавлять дополнительные изменения для других параметров по мере необходимости.
Параметры управления иконками
Однако помимо изменения Name
и Exec
, если вы хотите варьировать иконки, вы можете добавить дополнительные параметры в каждом из ваших .desktop файлов. Например, измените строку Icon
, если у вас есть разные иконки для каждого экземпляра.
Заключение
Создание нескольких .desktop файлов с разными параметрами является наиболее подходящим решением для вашей задачи. Это позволяет избежать проблем с ссылками и гарантирует, что каждый файл будет соответствовать вашим требованиям. Использование sed
для автоматизации процесса копирования и изменения предыдущих значений существенно упростит вашу работу. Таким образом, у вас будет возможность независимо управлять различными экземплярами вашего приложения, достигнув желаемого результата.
Если у вас есть дополнительные вопросы или требуется помощь в реализации, не стесняйтесь обращаться!