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

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

4
задан 17 June 2018 в 01:41

2 ответа

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

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

  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`
3
ответ дан 1 December 2019 в 10:15

Да, это возможно. У меня есть идея, но, может быть, есть и лучшие решения, вот моя идея, надеюсь, это поможет;)

, если вы немного знаете о 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

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

0
ответ дан 1 December 2019 в 10:15

Другие вопросы по тегам:

Похожие вопросы: