首次登入時開啟應用程式

首次登入時開啟應用程式

我知道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

在這種情況下,您的服務始終為每次登入執行,並且您的腳本檢查該使用者是否已執行。

相關內容