web-dev-qa-db-fra.com

Ouvrir une application lors de la première connexion

Je sais que Ubuntu prend en charge le démarrage automatique des applications chaque fois qu'un utilisateur se connecte. Mais ce que je voudrais faire est d'ouvrir une application spécifique à chaque fois qu'un nouvel utilisateur se connecte pour la première fois. L'application ne se lancera pas automatiquement lors de la connexion. Est-ce possible?

4

Ce que je suggérerais est un processus en 2 étapes:

  1. Créez un fichier myapp.desktop dans le répertoire /etc/skel/.config/. Tout ce qui se trouve sous /etc/skel est copié dans les dossiers des nouveaux utilisateurs lors de leur création. Pour le format de ce fichier, examinez Comment ajouter un script Shell au programme de lancement en tant que raccourci . Ne vous inquiétez pas pour le titre - les fichiers .desktop sont essentiellement identiques aux raccourcis Windows et leur présence dans le répertoire ~/.config/autostart/ de l'utilisateur est ce qui permet à une application particulière de s'exécuter après la connexion à l'interface graphique.

  2. Créez le script d'emballage qui exécutera l'application souhaitée, mais supprimez également le lanceur spécifique, par exemple

    #!/bin/bash
    gedit
    rm ~/.config/autostart/myapp.desktop
    

    De cette façon, l'entrée de démarrage automatique ne sera exécutée qu'à la première connexion et, lors de cette première connexion, supprimez-la. Potentiellement, vous pouvez également vouloir supprimer le script lui-même si nécessaire. La suppression n’est pas non plus nécessaire, vous pouvez simplement le renommer via mv ~/.config/autostart/myapp.desktop ~/.config/autostart/myapp.desktop.bak

Veuillez noter que vous n'avez pas spécifié quelle application en particulier ni quelles conditions spécifiques vous avez besoin pour que cette application fonctionne. Il ne s'agit donc que d'un exemple approximatif. N'hésitez pas à l'adapter à vos besoins.

En passant, un script peut même ne pas être nécessaire si ce que vous voulez faire est simple. Par exemple, vous souhaiterez peut-être que la ligne soit la suivante dans votre fichier .desktop:

Exec=bash -c 'firefox && rm ~/.config/autostart/myapp.desktop' myapp`
2

oui c'est possible. J'ai une idée, mais peut-être y a-t-il de meilleures solutions aussi, voici mon idée espérons que cela aidera;)

si vous connaissez un peu le langage de programmation Shell ou python ou ... vous pouvez créer un script qui, chaque fois que vous exécutez ce script, récupère votre nom d'utilisateur et create a text file/a row in database/ a row in a file et avant cette étape, il a déjà vérifié si ce nom d'utilisateur était dans le fichier de base de données ou non, sinon, il exécute votre programme et si oui, il ne le fait pas. le code python peut être comme ceci (enregistrez-le sous 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

mais maintenant, comment pouvons-nous régler cela pour qu'il fonctionne au début? c'est facile avec systemd. supposons que nous fassions ce script python avec le nom Runit.py nous devons:

Sudo touch /etc/systemd/system/RunMyScript.service

puis avec

Sudo gedit /etc/systemd/system/RunMyScript.service

tapez-les dedans:

[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

maintenant votre service est prêt à démarrer à la connexion:

Sudo systemctl enable RunMyScript.service

dans ce scénario, votre service est toujours exécuté pour chaque connexion et votre script vérifie s'il a déjà été exécuté pour cet utilisateur ou non.

0
Saeid