MagOSM для MagOS_2016.64

Решать конечно Михаилу, но мне кажется в корне не правильным то что консольный скрипт зависит от иксового пртложения.

Что то я ничего не изобрел. и в инете ничего не нашел.
Если нетрудно, опишите как делать еще один скрипт “обертку”.

PS
Однако за год использования xterm, для запуска консольной утилиты, ни одного бага.
Без инфы о прогрессе выполнения команд xzm2dir и dir2xzm лично у меня через ~15 сек уже начинается паника. Пытаюсь всевозможными способами узнать зависло или работает.
А это еще хуже, чем использование xterm, для запуска консольной утилиты
Если не хватило места на флэшке, то паковка или распаковка может довольно долго зависнуть. И если в это время освободить место, то паковка или распаковка продолжается.

Можно и xterm, но только не в сам dir2xzm, а запускать из пкм меню долфина xterm -e dir2xzm bla-bla…
Можно отслеживать размер модуля в цикле, я так.в уирд для копи2рам сделал. Там и подсмотреть можно. То есть пока модуль растет все норм.
У kdialog есть прогрессбар, можно попробовать его прикрутить.

C паковкой модуля все получилось.
Убрал xterm -e из скриптов
Скоректировал file:///usr/share/kservices5/ServiceMenus/magos-folder.desktop
Но получилось только с mkpfs.
Если запускать xzm2dir то нет вывода прогресса паковки
А с mkpfs прогресс работы есть. А это очень важная инфа. Т к если паковка подвисла то скорее всего нет места на флэшке. И если в это время освободить место, то паковка продолжается.
Добавил

[Desktop Action mkpfs]
Name=Compress into the pfs module
Name[ru]=Свернуть каталог в pfs модуль
Icon=application-x-xzm-compressed-tar
Exec=uxterm -e “mkpfs %f”

[Desktop Action dir2nomkpfs]
Name=Pack into the noxzm module
Name[ru]=Свернуть каталог в xzm без сжатия
Icon=application-x-xzm-compressed-tar
Exec=uxterm -e “mkpfs -b %f %f.noxz.xzm”

А xzm2dir убрал за ненадобностью
А есть ли в pfs команда распаковки модуля ?

Конечно есть - pfsextract.
С mkpfs правильнее передавать не имя папки наверное, а имена всего выделенного. Если не ошибаюсь это %F. Это должно работать для папкок, iso, img, xzm в любых сочетаниях. Попробуйте, может получится.

  1. /usr/share/kservices5/ServiceMenus/ magos-folder.desktop
    Получилось. Проверил Магея и Убунту

Desktop Action mkpfs]
Name=Compress into the xzm module
Name[ru]=Свернуть каталог в xzm модуль
Icon=application-x-xzm-compressed-tar
Exec=lxqt-sudo -s uxterm -e mkpfs -l -w %F

[Desktop Action dir2nomkpfs]
Name=Pack into the noxzm module
Name[ru]=Свернуть каталог в xzm без сжатия
Icon=application-x-xzm-compressed-tar
Exec=uxterm -e mkpfs -l -w -f %F -o %F.noxz.xzm

Вместо kdesudo применил lxqt-sudo -s
В Убунту нет kdesudo

  1. /usr/share/kservices5/ServiceMenus/magos-modules.desktop

[Desktop Action xzm2dir]
Name=xzm2dir
Name[ru]=Распаковать модуль
Icon=application-x-xzm-compressed-tar
Exec=lxqt-sudo -s mkdir $(echo %f | awk -F. ‘{print $1}’) && xzmXdir %f $(echo %f | awk -F. ‘{print $1}’)

[Desktop Action pfsextract]
Name=pfsextract
Name[ru]=Распаковать модуль (pfsextract)
Icon=application-x-xzm-compressed-tar
Exec=lxqt-sudo -s mkdir $(echo %f | awk -F. ‘{print $1}’) && lxqt-sudo -s uxterm -e pfsextract %f $(echo %f | awk -F. ‘{print $1}’)

Но скрипт xzmXdir это xzm2dir, но с запуском в uxterm
Так что в консоли использовать - xzm2dir
А для ServiceMenus в magos-modules.desktop исползовать - xzmXdir

Убунта "не понимает"

if [ “$(fs_type $item)” == “squashfs” ] ; then

Надо задавать

if [ “$(fs_type $item)” = “squashfs” ] ; then

Все “==” из скриптов убрал.
Но теперь pfsextract и mkpfs в Убунте работают
Остальные не знаю. Не проверял

Все скрипты из /usr/lib/magos/scripts перенес в /usr/local/bin
Т к место предназначено системой для скриптов и не знаю как в Убунте сделать пач
для ~/.bashrc
А в /usr/local/bin ничего не надо делать. Все работает

Пока все как-то костыльно по описанию :frowning_face:
Sudo может стать проблемой. У нас принято su и будут путаться который пароль вводить. Но это пол беды, юзер у нас не факт что в судоерс и вообще работать не будет, а в убунте рут без пароля и не будет работать с su. Надо думать, не пришлось бы изобретать detect-OS и делать варианты.
По путям. Попробуйте запускать скрипты с полным путем, а в начало скриптов добавить экспорт $PATH с добавленным путем до скрипта взятым из $0.

По = и == странно, должно и так и так работать. Проверьте шебанг в скриптах что бы был bash, а не sh возможно в убунте sh не линк на баш. Из-за этого и bashrc не работает возможно.

В Магее kdesu не запускает dolphin под root от обычного юзера
В Убунте вообще вроде под root не работают. Нашел способ как входить под root/
Это в плазме вроде усилена безопасность и идет такая политика от разрабов
И например

lxqt-sudo -s dolphin

Запускает dolphin под root от обычного юзера в Убунте
Где опция -s

-s|–su Использовать su(1) для повышения привилегий.

Но при распаковке модуля команда задается двумя командами в magos-modules.desktop и пришлось на каждую команду писать свой lxqt-sudo

Exec=lxqt-sudo -s mkdir $(echo %f | awk -F. ‘{print $1}’) && lxqt-sudo -s uxterm -e pfsextract %f $(echo %f | awk -F. ‘{print $1}’)

Иначе не запускалось

bashrc работает но как то странно.
Из терминала в Убунте допустим команда вызывается из ServiceMenus нет
Например pfs я делаю ссылкой на /usr/bin
Видимо еще что то где то задается. Немного другой bash в Убунте чем в Магее и Росе
Это теорию читать мне надо
Из за Убунту и писал в ServiceMenus полные пути для команд
Но перенес скрипты из /usr/lib/magos/scripts перенес в /usr/local/bin и сейчас все работает в Убунту без полных путей

С == действительно странно
Но bash даже в Магее и Росе немного отличаются по синтаксису
Был случай. Не помню точно но скрипт в Магее работает а в Росе нет.
Оказалось синтаксис команды разный. Исправил синтаксис и заработало и в Росе
PFS вято из МагОС и там в скриптах

#!/bin/sh

Но в Магее работает и сейчас из /usr/local/bin все работает но == изменены на =

Все скрипты из /usr/lib/magos/scripts перенес в /usr/local/bin
Два варианта

  1. В скриптах PFS 1 строка #!/bin/bash
    Заработало но в пакуемом модуле не проходят тени

  2. В скриптах PFS 1 строка #!/bin/sh и во всех скриптах == заменены на =
    Все работает. Тени на месте

С тенями это никак не связано. Где-то в другом месте вылезло. Sh чаще всего ссылка на баш, но может быть dash и бизибокс например. Не думал, что == это башизм, посмотрим как правильно починить. Тут или баш в шебанг или =.

А почему не подходит == заменить на = ?

Заработало
В скриптах PFS 1 строка должна быть #!/bin/bash для Убунту
Но !
Все скрипты из /usr/lib/magos/scripts перенес в /usr/local/bin
Собственно крыша не горит. Пока мне так и можно оставить
Как в bashrc ввести не предназначенную для скриптов папку я не знаю

Скрипты в пфсутилс друг-друга вроде не используют, только общую либу pfs. Поиск этой либы там встроен, она должна быть либо в папке рядом с самим скриптом либо в PATH. То есть если вызывать скрипт с полным путем все должно работать из любой папки не только из PATH. Если не работает надо смотреть и чинить. Другое дело скриты магос, там все должно быть в PATH. Надо думать.
По замене == на = я не против, главное чтоб в другом варианте sh не отвалилось, в чем я не уверен. Всегда думал, что == это правильно, а = чисто для совместимости.

нет, это место для ПО которое пользователь ставит через make install и только на одну конкретную машину. В нашем случае не годится.

Сейчас у меня все работает. А то вообще тягостно было. Нетбук даже зависал
Но так

В скриптах PFS 1 строка должна быть #!/bin/bash для Убунту

В Магее работает с #!/bin/sh

Хорошо бы вариант кот не зависит от дистра и от версии bash
Посмотрел как делают в Магее
Допустим как запускают draknetcenter из /usr/bin

#!/usr/bin/sh

if [[ “$UID” != “0” ]] ; then
/usr/bin/pkexec /usr/libexec/draknetcenter “$@”
exit $?
fi
exec /usr/libexec/draknetcenter “$@”

Может как то так попробовать ?
Но это на каждую команду свой запуск придется делать.
В самом начале я делал ссылки команд из /usr/lib/magos/scripts на /usr/bin
То же все работало

Думать как раз вообще не о чем !
Все оказалось просто.
Путь в Убунту задается в /etc/environment
И никаких ~/.bashrc
По крайней мере паковка и распаковка модуля работает из /usr/lib/magos/scripts

Надо в преинит дописать, мне кажется, должно везде работать.