Когда вы запускаете вашу программу из окна терминала, она ассоциируется с вашим текущим сеансом входа в систему.Это дает контекст, необходимый для представления всплывающих окон в вашем GUI.
Но помните, что Linux является многопользовательской системой, поддерживающей даже несколько одновременных сеансов GUI.Каждый графический интерфейс принадлежит одному сеансу;нет никакого смысла в единственном истинном графическом интерфейсе для машины.Если вы запускаете свою программу как системную службу, то она не связана с каким-либо конкретным сеансом входа в систему, поэтому она не знает о вашем графическом интерфейсе для представления чего-либо там.
Учитывая, что служба работает с привилегией root, она можетдля него возможно обнаружить сеансы входа в систему и всплыть в них сообщения, но вы не получаете это бесплатно.
Я предполагаю, что смысл запуска вашей программы как службы состоит в том, чтобы сделать ее пригодной для использования людьми, которыене может отстаивать привилегии root.В этом случае я предлагаю рефакторинг на две программы: сервис, работающий от имени пользователя root, и клиент, работающий без привилегий.Ожидается, что пользователи будут запускать клиента, как и они, в сеансе, где они хотят получать всплывающие окна.Клиент регистрируется на сервере.Сервер получает сообщения из сети и рассылает их зарегистрированным клиентам для их отображения.