Ну, проблема не в tty, а в том, что внутри вашего X-сервера у вас установлен $ DISPLAY, поэтому Gtk + знает, где отображать ваше окно. На tty (то есть в скрипте, который не запускается изнутри X), он не установлен, поэтому Gtk + не знает, где отобразить окно.
Вы также не можете предполагать, что X работает на определенном дисплее или даже что X доступен, что является причиной того, что у вас никогда не должно быть отображения демона что-либо .
Хороший демон не ожидает ввода данных пользователем, ничего не отображает и перенаправляет весь свой вывод в файл журнала или системный журнал.