Сайт | Скачать | Видео | Wiki

Автор Тема: Gui утилита для простого создания desktop файла на YAD.  (Прочитано 616 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
Хочу представить простую Gui утилиту для  создания desktop файла на YAD.
В поисковике на запрос о программе, для простого создания desktop файла, ответов было много ,но они то ли устарели (библиотеки), то ли интерфейс переусложненый, а мне нужна ,брат попросил, была утилита крайне простая, мой брат использует linux давно, но он любит больше мышкой работать, те программы что пробовал ему бы не подошли, потому пришел к решению писать своё.
Для работы скрипта необходимо установить yad .
Как использовать?
Запустить скрипт, откроется окно и делать то что пишут в заголовке  поэтапно открывающихся окон. Скрипт крайне простой , и сделан в основном для новичков, или любящих мышь, мне например быстрее desktop файл написать в текстовом, но каждому своё... Думаю  этот скрипт, может быть полезным. На форуме видел скрипт на эту тему, на basic, у меня не заработал...

---------------
обновил скрипт, убрал некоторые ошибки, улучшил вывод инструкций, ввел некоторое форматирование
---------------
Код
#!/bin/bash
#set -x
mkdir -p $HOME/.local/share/applications
# Запрос имени desktop файла
DESKTOP_NAME=$(yad --title "Введите имя desktop файла" --text "Введите имя desktop файла\n-------------------------------------------"  --entry --width=400 --height=100)

# Запрос пути к исполняемому файлу
SCRIPT_PATH=$(yad --file --title "Выберите исполняемый файл" --text "Выберите исполняемый файл\n------------------------------------------------" --width=400 --height=100)

# Запрос комментария
COMMENT=$(yad --title "Введите комментарий" --text "Введите комментарий\n-----------------------------------" --entry --width=400 --height=100)

# Запрос пути к иконке
ICON_PATH=$(yad --file --title "Выберите иконку" --text "Выберите иконку\n----------------------------" --width=400 --height=100)

# Запрос опции открытия в терминале
TERMINAL_OPTION=$(yad --title "Выберите опцию открытия в терминале" --text "Выберите опцию открытия в терминале\n--------------------------------------------------------------" --list --radiolist --column "Выбор" --column "Опция" FALSE "false" TRUE "true" --width=450 --height=200)

# Обработка опции открытия в терминале
TERMINAL=$(echo "$TERMINAL_OPTION" | sed 's/TRUE//i; s/|//g')

# Запрос категорий
CATEGORIES=$(yad --title "Выберите категории" --text "Выберите категории\n---------------------------------" --form --field="Network:CHK" "FALSE" --field="AudioVideo:CHK" "FALSE" --field="Settings:CHK" "FALSE" --field="System:CHK" "FALSE" --field="Utility:CHK" "FALSE" --separator=" " --width=400 --height=100)

# Вывод отмеченных категорий
echo "Selected categories:"

# Преобразование в массив
IFS=' ' read -ra SELECTED_CATEGORIES <<< "$CATEGORIES"

# Ассоциативный массив для связи чекбоксов и имен категорий
declare -A CATEGORY_NAMES=( ["0"]="Network" ["1"]="AudioVideo" ["2"]="Settings" ["3"]="System" ["4"]="Utility" )

# Формирование строки для категорий
CATEGORIES_STRING=""
for index in "${!SELECTED_CATEGORIES[@]}"; do
    if [ "${SELECTED_CATEGORIES[$index]}" == "TRUE" ]; then
        CATEGORIES_STRING+="${CATEGORY_NAMES[$index]};"
    fi
done

# Запрос каталога для сохранения
SAVE_PATH="$HOME/.local/share/applications"

# Генерация desktop файла
DESKTOP_FILE_CONTENT="[Desktop Entry] 
Name=${DESKTOP_NAME}
Comment=${COMMENT}   
Exec=${SCRIPT_PATH}
Icon=${ICON_PATH}
Terminal=${TERMINAL} 
Type=Application
Categories=${CATEGORIES_STRING}"

# Проверка, был ли выбран путь сохранения
if [ -n "$SAVE_PATH" ]; then
    DESKTOP_FILE_PATH="$SAVE_PATH/$DESKTOP_NAME.desktop"
    echo "$DESKTOP_FILE_CONTENT" > "$DESKTOP_FILE_PATH"
    yad --title "Готово" --info --text="Desktop файл успешно создан и сохранен по пути:\n$DESKTOP_FILE_PATH" --width=400 --height=100
else
    yad --title "Ошибка" --error --text="Выберите каталог для сохранения desktop файла." --width=400 --height=100
fi



« Последнее редактирование: 07 Декабрь 2023, 15:11:22 от totiks2012 »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5339
  • Репутация: +139/-1
На форуме видел скрипт на эту тему, на basic, у меня не заработал...
А что конкретно не заработало? Автору будет полезно узнать для возможной доработки. У меня в арче запускается и создается.

Профильная тема create-desktop-file.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
А что конкретно не заработало? Автору будет полезно узнать для возможной доработки. У меня в арче запускается и создается.
вот это, glibc и это критично ... , тест проводил на Debian 11 (minios)
Код
~/portapps/cdf_basic$ ./create-desktop-file
./create-desktop-file: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./create-desktop-file)
я на Debian-e а там glibc 2.31

Оффлайн AZJIO

  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +10/-0
Проверь этот файл, скомпилировано на PureBasic 6.03 и Mint-20.3 в отличии от старого 5.70 и Mint-19. Если проблема останется, то буду ставить новую систему 2023г.

Кстати, исходник 622 строк, а значит должен компилироваться на демо-версии (до 800 строк), то есть можешь попробовать скомпилировать на своей оси. Возможно придётся убрать строку "gtk_window_set_icon_" так как апи не поддерживается в демо-версии, а это всего лишь значок в заголовке окна.

(minios)
а может в этом проблема и мне не стоит заморачиваться?
Можно было бы предложить добавить недостающие файлы, но кто его знает сколько их понадобиться и не будет ли это потом мешать установке программ и обновлений.
« Последнее редактирование: 26 Ноябрь 2023, 05:14:21 от AZJIO »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
а может в этом проблема и мне не стоит заморачиваться?
У меня есть система на Debian 12 и скорее всего на нём  заведется, и если да то я более чем с вами согласен.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
Проверь этот файл
а вот этот пошёл и на Debian 11 , работает!
Но с легкими косяками ,в строках файл иконка наползли строки друг на дружку, а также на displai,но  это скорее всего из-за того что я слепой и у меня шрифты в пол экрана, скорее всего из-за моих настроек шрифта.
« Последнее редактирование: 26 Ноябрь 2023, 09:27:22 от totiks2012 »

Оффлайн AZJIO

  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +10/-0
в строках файл иконка наползли строки друг на дружку
перекачай комплект, попробуй запустить версию gtk2, если норм., можешь использовать установщик пакета. В общем я сделал при изменении размера окна по высоте все поля тоже раширяются и кнопки теперь не должны наползать друг на друга, просто расширить до нужного размера. У GTK3 такой баг или фича, что если шрифт не умещается то элемент увеличивается в размере до величины чтобы уместился, в итоге всё плывёт.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
$ cd $HOME/Downloads/cdf_basik_gtk2
$ chmod +x ./create-desktop-file-x32-Xubuntu-gtk2
$ ./create-desktop-file-x32-Xubuntu-gtk2
bash: ./create-desktop-file-x32-Xubuntu-gtk2: No such file or directory
да ладно я свой скрипт использую и мне не критично, и в ближайшее время меня ждет миграция на Debian 12, благодаря вашей программе стал понимать что вскоре буду сталкиваться с таким почаще, библиотеки не удержать, растут как на дрожжах. Тут скорее на моей стороне проблема, система устарела.

Оффлайн AZJIO

  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +10/-0
1. Попробовал ваш скрипт, диалоги все прошел, а файл не появился в "$HOME/.local/share/applications"
2. Есть диалог при ошибке: "Выберите каталог для сохранения desktop файла.", но выбор каталога не предоставляется.
3. Ещё бы проверку наличия "yad" сделать.
Nemo может создать шаблон, то есть создаём файл на рабочем столе копируя шаблон, а потом просто заполняем значения в файле.
« Последнее редактирование: 03 Декабрь 2023, 11:14:38 от AZJIO »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5339
  • Репутация: +139/-1
bash: ./create-desktop-file-x32-Xubuntu-gtk2: No such file or directory
А запускалось не в x86_64 системе? Проверил в DDR01-21.08, выполняется.

Оффлайн AZJIO

  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +10/-0
точно, как я забыл, сейчас же системы все сплошь x64. В общем пробуй или установку пакета или извлечь установочный архив и запустить исполняемый, там уже GTK3.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
 
Попробовал ваш скрипт, диалоги все прошел, а файл не появился в "$HOME/.local/share/applications"
вот скрипт который работает.
   десктоп файл сохраняется  сразу в $HOME/.local/share/applications
Код
#!/bin/bash
#set -x
mkdir -p $HOME/.local/share/applications
# Запрос имени desktop файла
DESKTOP_NAME=$(yad --title "Введите имя desktop файла" --text "Введите имя desktop файла\n-------------------------------------------"  --entry --width=400 --height=100)

# Запрос пути к исполняемому файлу
SCRIPT_PATH=$(yad --file --title "Выберите исполняемый файл" --text "Выберите исполняемый файл\n------------------------------------------------" --width=400 --height=100)

# Запрос комментария
COMMENT=$(yad --title "Введите комментарий" --text "Введите комментарий\n-----------------------------------" --entry --width=400 --height=100)

# Запрос пути к иконке
ICON_PATH=$(yad --file --title "Выберите иконку" --text "Выберите иконку\n----------------------------" --width=400 --height=100)

# Запрос опции открытия в терминале
TERMINAL_OPTION=$(yad --title "Выберите опцию открытия в терминале" --text "Выберите опцию открытия в терминале\n--------------------------------------------------------------" --list --radiolist --column "Выбор" --column "Опция" FALSE "false" TRUE "true" --width=450 --height=200)

# Обработка опции открытия в терминале
TERMINAL=$(echo "$TERMINAL_OPTION" | sed 's/TRUE//i; s/|//g')

# Запрос категорий
CATEGORIES=$(yad --title "Выберите категории" --text "Выберите категории\n---------------------------------" --form --field="Network:CHK" "FALSE" --field="AudioVideo:CHK" "FALSE" --field="Settings:CHK" "FALSE" --field="System:CHK" "FALSE" --field="Utility:CHK" "FALSE" --separator=" " --width=400 --height=100)

# Вывод отмеченных категорий
echo "Selected categories:"

# Преобразование в массив
IFS=' ' read -ra SELECTED_CATEGORIES <<< "$CATEGORIES"

# Ассоциативный массив для связи чекбоксов и имен категорий
declare -A CATEGORY_NAMES=( ["0"]="Network" ["1"]="AudioVideo" ["2"]="Settings" ["3"]="System" ["4"]="Utility" )

# Формирование строки для категорий
CATEGORIES_STRING=""
for index in "${!SELECTED_CATEGORIES[@]}"; do
    if [ "${SELECTED_CATEGORIES[$index]}" == "TRUE" ]; then
        CATEGORIES_STRING+="${CATEGORY_NAMES[$index]};"
    fi
done

# Запрос каталога для сохранения
SAVE_PATH="$HOME/.local/share/applications"

# Генерация desktop файла
DESKTOP_FILE_CONTENT="[Desktop Entry] 
Name=${DESKTOP_NAME}
Comment=${COMMENT}   
Exec=${SCRIPT_PATH}
Icon=${ICON_PATH}
Terminal=${TERMINAL} 
Type=Application
Categories=${CATEGORIES_STRING}"

# Проверка, был ли выбран путь сохранения
if [ -n "$SAVE_PATH" ]; then
    DESKTOP_FILE_PATH="$SAVE_PATH/$DESKTOP_NAME.desktop"
    echo "$DESKTOP_FILE_CONTENT" > "$DESKTOP_FILE_PATH"
    yad --title "Готово" --info --text="Desktop файл успешно создан и сохранен по пути:\n$DESKTOP_FILE_PATH" --width=400 --height=100
else
    yad --title "Ошибка" --error --text="Выберите каталог для сохранения desktop файла." --width=400 --height=100
fi


этот скрипт отличается от предыдущего лишь тем что я ввел строку
mkdir -p $HOME/.local/share/applications для создания $HOME/.local/share/applications если этого каталога нет, теперь десктоп файл должен сохранится в этот каталог. Кроме этого продублировал строки инструкции из заголовка, и прописал сепараторы ,для более удобного чтения строк с инструкциями. Скрипт что в начале темы был заменен финальным.
« Последнее редактирование: 07 Декабрь 2023, 15:17:30 от totiks2012 »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
предлагаю проверять наличие каталога, перед созданием :
Код
[ -d $HOME/.local/share/applications ] || mkdir -p $HOME/.local/share/applications 
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 874
  • Репутация: +23/-0
  • Автор темы
предлагаю проверять наличие каталога, перед созданием :
можно , но опция -p от mkdir это и делает если каталог есть то mkdir пропускает свою работу, если нет каталог создаётся, как бы излишне... вот совет AZJIO о проверке если нет установленного yad более тут просится на реализацию, совет в общем то правильный.