Несколько файлов рабочего стола используют одни и те же системные файлы рабочего стола /usr/share/application.

Вопрос или проблема

У меня есть приложение, в котором я создал файл /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

Параметры смены

В данном примере:

  1. Копируется оригинальный файл foo.desktop.
  2. С помощью sed изменяются строки Name и Exec.
  3. Вы можете добавлять дополнительные изменения для других параметров по мере необходимости.

Параметры управления иконками

Однако помимо изменения Name и Exec, если вы хотите варьировать иконки, вы можете добавить дополнительные параметры в каждом из ваших .desktop файлов. Например, измените строку Icon, если у вас есть разные иконки для каждого экземпляра.

Заключение

Создание нескольких .desktop файлов с разными параметрами является наиболее подходящим решением для вашей задачи. Это позволяет избежать проблем с ссылками и гарантирует, что каждый файл будет соответствовать вашим требованиям. Использование sed для автоматизации процесса копирования и изменения предыдущих значений существенно упростит вашу работу. Таким образом, у вас будет возможность независимо управлять различными экземплярами вашего приложения, достигнув желаемого результата.

Если у вас есть дополнительные вопросы или требуется помощь в реализации, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...