Почему вывод gdbus не работает при вызове из ~ / .profile?

Если я открываю терминал и запускаю приведенный ниже скрипт, он работает нормально. Значения из вызова gdbus записываются в файл lockScreenTest.txt. Значения равны true, когда экран заблокирован, и значения равны false, если экран разблокирован.

#!/bin/bash
while true; do 
    echo "$(gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked)" >> lockScreenTest.txt
    sleep 2
    echo "called" >> lockScreenTest.txt
done

Но если я добавлю эту строку ./lockScreenCheck.sh& в ~/.profile и перезапущу компьютер, вывод gdbus не будет записан в lockScreenTest.txt. Вместо этого записывается только следующий вывод:

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called  

Почему вывод gdbus недоступен при запуске сценария из ~/.profile?
Я исследую это потому что я написал программу на Java, которая должна проверить, не заблокирован ли экран, и я делаю это примерно с помощью следующих команд:

String command = "gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked";
p = Runtime.getRuntime().exec(command);
p.waitFor(); 

Как и скрипт bash, программа на Java также работает нормально, если я запустить его из терминала с java -jar program.jar, но если я вызову его из ~/.profile, программа на Java запускается, но вывод команды gdbus неуловим.

0
задан 10 September 2019 в 18:42

1 ответ

Это, вероятно, перестало работать, потому что gdbus не может установить соединение с рабочей шиной сессии.

Помнят, что ~/.profile получен оболочками входа в систему; может иметь место, что менеджер по оформлению вызывает настольную сессию пользователя в оболочке входа в систему, но Вы не должны рассчитывать на него и даже если это сделает, то сессия будет ребенком оболочки, а не наоборот - переменные среды такой как DBUS_SESSION_BUS_ADDRESS не будут установлены в родительской оболочке.

Для приложений, которые должны соединиться с шиной настольной сессии, Вы - более обеспеченное использование функции "Startup Applications" GUI - видят, например , Как я запускаю приложения автоматически на входе в систему?

1
ответ дан 23 October 2019 в 02:31

Другие вопросы по тегам:

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