Получить логин в сценарии postinst, так как файл .deb устанавливается Ubuntu Software Center

630
Mustafa Orkun Acar

Я разработал приложение для Debian и создал установочный пакет .deb, используя эквив-сборку. В контрольном файле, который я использовал для создания пакета, есть строка, запускающая скрипт postinst, setup.sh. В этом файле я попытался получить имя пользователя, используя несколько методов, в том числе:

USER=$(logname) USER=$(who am i | awk '') 

Эти способы работают правильно, когда я пытаюсь использовать их как root в окне терминала. К сожалению, все они потерпели неудачу во время установки, и имя пользователя при входе в систему восстанавливается как «root». Это приводит к тому, что все пути в сценарии неверны, и сценарий завершается с ошибкой, в результате чего Software Center показывает сообщение об ошибке и останавливает установку.

Тем не менее, используя dpkg для установки пакета, как показано ниже, мое приложение было успешно установлено.

dpkg -i package-name 

Итак, почему это происходит? Как правильно получить логин?

2

1 ответ на вопрос

0
grawity

То, что вы пытаетесь сделать, не может работать правильно.

.debпакеты не являются частными для каждого пользователя - все они установлены в масштабе всей системы, поэтому вывод 'logname' показывает «root» - поэтому они должны работать одинаково для всех пользователей и не могут иметь чей- либо домашний каталог в системе. широкие конфигурационные файлы.

Помните, что Linux - это многопользовательская операционная система - может быть создано несколько учетных записей пользователей, и даже войти в систему одновременно. Поэтому, если ваш пакет сделает это, он будет работать только для тех, кто его устанавливает, но станет невозможным для всех остальных на этом компьютере!

Разница между dpkgSoftware Center и здесь заключается в том, что первый выполняет все действия и запускает сценарии напрямую, поэтому сценарии postinst по-прежнему выполняются в течение сеанса входа пользователя в систему. Однако Центр программного обеспечения делегирует фактическую установку фоновой службе, которая запускается «вне» любых сеансов входа в систему и никак не взаимодействует с пользователями.

Причина, по которой я пытаюсь добиться этого, заключается в том, что мое приложение - это приложение для родительского контроля, которое должно быть установлено только для одного пользователя. Mustafa Orkun Acar 9 лет назад 1

Похожие вопросы