Я знаю, что Ubuntu поддерживает автоматический запуск приложений каждый раз, когда пользователь входит в систему. Но то, что я хотел бы сделать, должно открыть определенное приложение каждый раз, когда новый пользователь входит в систему впервые, и затем приложение не автоматически запустит ни на каком входе в систему. Действительно ли это возможно?
Я бы предложил двухэтапный процесс:
Создайте файл myapp.desktop
в каталоге /etc/skel/.config/
. Все под /etc/skel
копируется в папки новых пользователей при их создании. Формат этого файла приведен в Как добавить сценарий оболочки в панель запуска в виде ярлыка . Не беспокойтесь о заголовке - файлы .desktop
по сути такие же, как ярлыки Windows, и их присутствие в пользовательском каталоге ~/.config/autostart/
- это то, что позволяет конкретному приложению запускаться при входе в GUI.
Создайте скрипт-обертку, которая запустит нужное вам приложение, но затем также удалите конкретный модуль запуска, например,
#!/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`
Да, это возможно. У меня есть идея, но, может быть, есть и лучшие решения, вот моя идея, надеюсь, это поможет;)
, если вы немного знаете о 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
напечатать в нем: ваш сервис готов к запуску при входе в систему:
sudo systemctl enable RunMyScript.service
в этом сценарии ваш сервис всегда запускается для каждого входа в систему, и ваш скрипт проверяет, был ли для этого пользователя уже запущен или нет.