
Eu sei que o Ubuntu suporta inicialização automática de aplicativos sempre que um usuário faz login. Mas o que eu gostaria de fazer é abrir um aplicativo específico toda vez que um novo usuário fizer login pela primeira vez e então o aplicativo não será iniciado automaticamente em nenhum login. Isso é possível?
Responder1
O que eu sugeriria é um processo de duas etapas:
Crie um
myapp.desktop
arquivo no/etc/skel/.config/
diretório. Tudo abaixo/etc/skel
é copiado para as pastas dos novos usuários quando eles são criados. Para o formato desse arquivo, consulteComo adicionar um script de shell ao inicializador como atalho. Não se preocupe com o título - os.desktop
arquivos são essencialmente iguais aos atalhos do Windows, e sua presença no~/.config/autostart/
diretório do usuário é o que permite que um aplicativo específico seja executado no login da GUI.Faça o script wrapper que executará o aplicativo desejado, mas também remova o inicializador específico, digamos, por exemplo
#!/bin/bash gedit rm ~/.config/autostart/myapp.desktop
Dessa forma, a entrada de inicialização automática será executada apenas no primeiro login e, nesse primeiro login, será removida. Potencialmente, você também pode querer remover o script em si, se necessário. Excluir também não é necessário, você pode simplesmente renomeá-lo via
mv ~/.config/autostart/myapp.desktop ~/.config/autostart/myapp.desktop.bak
Observe que você não especificou qual aplicativo específico ou quais condições específicas são necessárias para que esse aplicativo funcione, portanto, este é apenas um exemplo aproximado e sinta-se à vontade para adaptá-lo às suas necessidades.
Por outro lado, um script pode nem ser necessário se o que você quer fazer for simples. Por exemplo, você pode querer ter a seguinte linha em seu .desktop
arquivo:
Exec=bash -c 'firefox && rm ~/.config/autostart/myapp.desktop' myapp`
Responder2
Sim é possivel. Eu tenho uma ideia, mas talvez existam soluções melhores também, aqui está a minha ideia, espero que ajude;)
se você conhece um pouco de shell
linguagem de programação ou python
ou ... você pode fazer um script que sempre que você executar esse script, ele pegue seu nome de usuário e create a text file/a row in database/ a row in a file
antes desta etapa já verifique se esse nome de usuário estava no arquivo de banco de dados ou não, caso contrário, ele executa seu programa e, se sim, não. o código python pode ser assim (salve-o como Runit.py):
import sys
import getpass
import os
def createFile():
f = open("usersFirstLogin.txt", "a+")
f.write(user)
f.close()
os.system("echo Hi") # Run YOUR PROGRAM HERE
return 0
user = getpass.getuser()
fr = open("usersFirstLogin.txt", "a+")
count=0
for x in fr:
if(x == user):
count+=1
continue # DO NOTHING HERE
else:
createFile()
count+=1
if (count == 0):
createFile()
fr.close
mas agora, como podemos configurar isso para ser executado no início? é fácil com o systemd. suponha que façamos este script python com o nome Runit.py
que precisamos:
sudo touch /etc/systemd/system/RunMyScript.service
então com
sudo gedit /etc/systemd/system/RunMyScript.service
digite isto nele:
[Unit]
Description=RunIt
[Service]
WorkingDirectory=/Path/to/the/Runit.py folder
ExecStart=/Path/to/the/Runit.py folder/Runit.py
[Install]
WantedBy=multi-user.target
agora seu serviço está pronto para ser iniciado no login:
sudo systemctl enable RunMyScript.service
neste cenário seu serviço sempre roda para cada login e seu script verifica se para aquele usuário já foi executado ou não.