Primeiro, algumas informações básicas sobre diferentes tipos de programas:
Um programa GUI é normalmente usado para processar entrada do usuário. Para fazer isso, é necessário algum tipo de servidor X, que lide com interações com teclado e mouse. Quando você inicia um programa GUI, ele herdará muitas configurações da sua sessão X. Não funcionará a menos que o programa tenha acesso a essas configurações e à sua sessão X.
Existem muitos outros programas que não requerem X ou GUI. Normalmente, esses são executados a partir de uma linha de comando ou executados como um daemon. Programas executados a partir da linha de comando receberão entrada via STDIN e (normalmente) a saída de impressão de volta via STDOUT.
Outros programas não requerem entrada / saída via STDIN / STDOUT. Um exemplo disso é um servidor web - sua entrada será recebida através de uma sessão TCP, e a saída será enviada através de uma conexão TCP e para arquivos de log.
Então, respondendo às suas perguntas:
Why I can't start GUI programs detached on Linux this way?
Quando você executa o daemon, você está essencialmente desconectando o programa da sua própria GUI e da sua entrada / saída. É por isso que um programa que requer uma interface gráfica ou uma conexão com seu STDIN / STDOUT não funciona com o daemon. Somente o último tipo de programa é adequado para ser executado completamente como um daemon.
What's the use of daemon's -f option if it changes behaviour that much?
Mudar o comportamento dessa forma é exatamente para o que o -f
é - ele não separa completamente o processo daemonized e, portanto, ele pode ser usado para programas que exigem, e. conexão com sua sessão X atual.
Digitar man daemon
em um xterm lhe dará muitas informações sobre como funciona.