首次登录时打开应用程序

首次登录时打开应用程序

我知道 Ubuntu 支持每次用户登录时自动启动应用程序。但我想做的是每次新用户首次登录时打开一个特定的应用程序,然后该应用程序不会在任何登录时自动启动。这可能吗?

答案1

我建议采用两个步骤:

  1. 在目录中创建一个myapp.desktop文件 /etc/skel/.config//etc/skel新建用户文件夹时,该目录中的所有内容都会被复制到新用户的文件夹中。有关该文件的格式,请查看如何将 Shell 脚本添加到启动器作为快捷方式。不要担心标题 - 这些.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`

答案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 很容易。假设我们用Runit.py我们需要的名称创建这个 python 脚本:

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

在这种情况下,您的服务始终在每次登录时运行,并且您的脚本检查该用户是否已运行。

相关内容