我知道 Ubuntu 支持每次用户登录时自动启动应用程序。但我想做的是每次新用户首次登录时打开一个特定的应用程序,然后该应用程序不会在任何登录时自动启动。这可能吗?
答案1
我建议采用两个步骤:
在目录中创建一个
myapp.desktop
文件/etc/skel/.config/
。/etc/skel
新建用户文件夹时,该目录中的所有内容都会被复制到新用户的文件夹中。有关该文件的格式,请查看如何将 Shell 脚本添加到启动器作为快捷方式。不要担心标题 - 这些.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`
答案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
在这种情况下,您的服务始终在每次登录时运行,并且您的脚本检查该用户是否已运行。