Lançar um aplicativo na inicialização

0

Tarefa:

Inicie o xfce4-clipman na inicialização

Tentei:

Eu criei um script sh no lugar certo com as permissões corretas:

martin@martin:/etc/init.d$ ls -l start_clipman.sh 
-rwxrwxr-x 1 root root 26 мар 12 09:05 start_clipman.sh

Conteúdo do arquivo sh:

martin@martin:/etc/init.d$ cat start_clipman.sh 
#!/bin/bash
xfce4-clipman
martin@martin:/etc/init.d$ 

Eu corri

martin@martin:/etc/init.d$ sudo update-rc.d start_clipman.sh 
defaultsinsserv: warning: script 'K01mount_disk.sh' missing LSB tags and overrides
insserv: warning: script 'K01start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'mount_disk.sh' missing LSB tags and overrides

Problema potencial:

Quando faço isso:

martin@martin:~$ xfce4-clipman

O aplicativo está rodando, mas o xfce-clipman está ocupando o terminal, está sendo executado, está funcionando, mas se eu quiser usar o terminal para digitar outra coisa, eu tenho que cancelá-lo.

martin@martin:~$ xfce4-clipman
^C
martin@martin:~$ 

O que eu faço

    
por Harton 12.03.2018 / 08:21

1 resposta

1

xfce4-clipman requer acesso ao seu monitor Xorg (o sistema gráfico X11) - não apenas porque é realmente um aplicativo gráfico, mas também porque é um gerenciador de área de transferência e o X11 também o abrange.

O problema (principal): O seu display do Xorg ainda não está disponível na inicialização. Ele é iniciado no login , muito tempo depois que a inicialização do sistema foi concluída. Portanto, é impossível iniciar o xfce4-clipman "na inicialização" - o que você realmente quer é iniciar o aplicativo no login também.

(o Linux é desenvolvido para suportar múltiplos usuários, que podem logar e logar a qualquer momento - cada usuário obtém uma nova cópia do Xorg rodando, e a própria tela de login também recebe uma. Então os serviços não podem contar com Xorg estando disponível . )

Iniciar aplicativos no login

A maioria dos ambientes de desktop, incluindo o Xfce, pode iniciar tarefas de "login" via *.desktop files (que é de fato como vários componentes do Xfce são lançados).

Eles estão localizados em /etc/xdg/autostart/ para serviços globais e ~/.config/autostart/ para serviços pessoais. Depois de criar um, ele é "ativado" por padrão, embora ainda possa ser desativado por meio de xfce4-session-settings .

Na verdade, até o xfce4-clipman instala seu próprio arquivo de autoinicialização em / etc / xdg / autostart - ele é denominado xfce4-clipman-plugin-autostart.desktop . Deve funcionar automaticamente contanto que você esteja usando o Xfce4 (devido à OnlyShowIn=XFCE line).

Mas se o seu sistema estiver faltando esse arquivo, ou se você quiser usar o xfce4-clipman em um ambiente de desktop não-Xfce, então você pode criar um novo. Os arquivos .desktop da inicialização automática geralmente são assim:

[Desktop Entry]
Type=Application
Name=Clipboard manager
Exec=xfce4-clipman
Terminal=false

Iniciando manualmente programas não-CLI

Muitos ambientes de desktop têm uma caixa de diálogo "Executar" em Alt F2 , que permite executar programas sem ocupar um terminal.

Vários métodos de fazer o mesmo de um terminal são:

  • (setsid xfce4-clipman 2>/dev/null &)
  • (xfce4-clipman &)
  • nohup xfce4-clipman &
  • xfce4-clipman & disown
  • e assim por diante.

Outros problemas com o seu script init.d

Em situações em que os serviços do sistema são apropriados, você deve se lembrar que os arquivos em /etc/init.d não são apenas scripts simples, eles também são executados no desligamento e devem aceitar subcomandos como "stop" ou "restart". Quando o sistema chama /etc/init.d/your_service stop , o initscript precisa realmente parar o serviço - não iniciá-lo novamente!

Você marcou a pergunta com systemd , então por que não salvar -se um monte de problemas e escrever um arquivo systemd *.service nativo em vez disso? Embora os scripts init.d "adequados" possam preencher várias telas, os serviços do systemd geralmente têm menos de uma dúzia de linhas.

Ainda mais importante: há muitas dezenas de serviços sendo iniciados em vários pontos no tempo. Em fases posteriores, algumas instalações estão disponíveis que as etapas anteriores não têm. (Por exemplo, networking.)

Se o seu script não declarar explicitamente seus requisitos de ordenação ("deve ser executado antes de Y, mas depois de Z"), o sistema operacional o executará em um estágio imprevisível, em paralelo com todo o resto. Se você for muito sortudo, ele será executado no momento certo - mas na maioria das vezes ele será executado muito cedo para qualquer coisa funcionar.

Nos arquivos unitários do systemd nativo, o pedido é especificado usando os parâmetros Before= e After= . (É uma boa idéia especificar dependências usando Requires= ou Wants= também.) Enquanto isso, os scripts init.d (com SysVinit e systemd) usam um bloco de comentário especial marcado com ### BEGIN INIT INFO , com parâmetros como Required-Start: e Should-Start: .

    
por 12.03.2018 / 10:08