
我知道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
在這種情況下,您的服務始終為每次登入執行,並且您的腳本檢查該使用者是否已執行。