Сессия DBus не может быть совместно использована для различных пользователей, это - то, как она была разработана.
Я не мог бы получить Ваше текущее решение, почему Вы пытаетесь сделать это с корнем?
Если так, используйте su - USERNAME -c /path/to/this/script.sh
запустить сценарий как это,
#!/bin/bash
. ~/.dbus/session-bus/*
purple-remote getstatus
Это будет работать на пользователя root.
P.S.: почему Вы не настроили бы крона как пользователь, который вошел в систему через гибридный язык??
Это означает, что это оболочка входа в систему.
Из man bash
:
Оболочка входа - это оболочка, у которой первым символом нулевого аргумента является -, или один начинается с опции --login.
(В терминологии bash
«нулевой» аргумент - это имя команды, которое в вашем случае было bash
.) bash
использует это как сигнал для выполнения действий входа в систему, таких как выполнение .bash_profile
и т. д.
Одним из способов автоматического добавления тире является запуск оболочки с помощью exec
. Из руководства Bash :
exec [-cl] [-a имя] [команда [аргументы]]
[...] Если задана опция
-l
, оболочка помещает тире в начало нулевого аргумента, переданного команде .
Сравните эти две попытки выполнить команду несуществующая
. Первый без -l
:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
И второй, с:
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
Другой ответ вполне подходит, но стоит отметить, что эта возможность более общая, чем bash.
С древних времён программа login
при выполнении пользовательской оболочки препарировала тире к argv[0]
, и оболочка распознавала это как признак того, что она должна вести себя как "оболочка для входа". Это документировано в man-страницах V7 здесь: login(1), sh(1).
Все программы, которые предоставляют сервис, подобный логину (аутентифицируют пользователя и запускают оболочку) должны следовать правилу "prepend dash". Например, sshd делает то, что вы можете увидеть в ssh/session.c в этом комментарии:
/*
* If we have no command, execute the shell. In this case, the shell
* name to be passed in argv[0] is preceded by '-' to indicate that
* this is a login shell.
*/
Все оболочки распознают ведущую тире. Эквивалентная -l
опция не существует в классическом панцире Борна или оригинальном csh, но большинство более новых панцирей (баш, тире, кш, яш, tcsh, zsh, rc, es, fish и любая полурецензионная версия csh) имеют ее.