
Я знаю, что Ubuntu поддерживает автозапуск приложений каждый раз, когда пользователь входит в систему. Но я хотел бы открывать определенное приложение каждый раз, когда новый пользователь входит в систему в первый раз, и тогда приложение не будет автоматически запускаться при любом входе в систему. Возможно ли это?
решение1
Я бы предложил двухэтапный процесс:
Создайте
myapp.desktop
файл в/etc/skel/.config/
каталоге. Все, что находится ниже,/etc/skel
копируется в папки новых пользователей при их создании. Формат этого файла см. вКак добавить скрипт оболочки в лаунчер в качестве ярлыка. Не беспокойтесь о названии — файлы.desktop
по сути такие же, как ярлыки Windows, и их присутствие в каталоге пользователя~/.config/autostart/
позволяет запускать определенное приложение при входе в систему через графический интерфейс.Создайте скрипт-оболочку, которая будет запускать нужное вам приложение, а затем удалите конкретный лаунчер, например
#!/bin/bash gedit rm ~/.config/autostart/myapp.desktop
Таким образом, запись автозапуска будет запущена только при первом входе в систему, и при этом первом входе - сама себя удалит. Потенциально, вы также можете захотеть удалить сам скрипт, если это необходимо. Удаление также не обязательно, вы можете просто переименовать его через
mv ~/.config/autostart/myapp.desktop ~/.config/autostart/myapp.desktop.bak
Обратите внимание, что вы не указали, какое именно приложение или какие конкретные условия необходимы для его работы, поэтому это всего лишь пример, и вы можете свободно адаптировать его под свои нужды.
Кстати, скрипт может даже не понадобиться, если то, что вы хотите сделать, просто. Например, вы можете захотеть иметь следующую строку в вашем .desktop
файле:
Exec=bash -c 'firefox && rm ~/.config/autostart/myapp.desktop' myapp`
решение2
да, это возможно. У меня есть идея, но, возможно, есть и лучшие решения, вот моя идея, надеюсь, она поможет ;)
если вы немного знакомы с shell
языком программирования или python
... вы можете создать скрипт, который при каждом запуске получает ваше имя пользователя и create a text file/a row in database/ a row in a file
перед этим шагом проверяет, было ли это имя пользователя в файле базы данных или нет, если нет, то он запускает вашу программу, а если да, то нет. Код Python может быть таким (сохраните его как 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
но как теперь настроить его на запуск в начале? Это легко сделать с помощью systemd. Предположим, мы создадим этот скрипт на Python с Runit.py
нужным нам именем:
sudo touch /etc/systemd/system/RunMyScript.service
затем с
sudo gedit /etc/systemd/system/RunMyScript.service
введите в него следующее:
[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
теперь ваш сервис готов к запуску при входе в систему:
sudo systemctl enable RunMyScript.service
В этом сценарии ваша служба всегда запускается для каждого входа в систему, а ваш скрипт проверяет, запущена ли она уже для этого пользователя или нет.