Открыть приложение при первом входе в систему

Открыть приложение при первом входе в систему

Я знаю, что Ubuntu поддерживает автозапуск приложений каждый раз, когда пользователь входит в систему. Но я хотел бы открывать определенное приложение каждый раз, когда новый пользователь входит в систему в первый раз, и тогда приложение не будет автоматически запускаться при любом входе в систему. Возможно ли это?

решение1

Я бы предложил двухэтапный процесс:

  1. Создайте myapp.desktopфайл в /etc/skel/.config/каталоге. Все, что находится ниже, /etc/skelкопируется в папки новых пользователей при их создании. Формат этого файла см. вКак добавить скрипт оболочки в лаунчер в качестве ярлыка. Не беспокойтесь о названии — файлы .desktopпо сути такие же, как ярлыки Windows, и их присутствие в каталоге пользователя ~/.config/autostart/позволяет запускать определенное приложение при входе в систему через графический интерфейс.

  2. Создайте скрипт-оболочку, которая будет запускать нужное вам приложение, а затем удалите конкретный лаунчер, например

    #!/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

В этом сценарии ваша служба всегда запускается для каждого входа в систему, а ваш скрипт проверяет, запущена ли она уже для этого пользователя или нет.

Связанный контент