Ubuntuはユーザーがログインするたびにアプリの自動起動をサポートしていることを知っています。しかし、新しいユーザーが初めてログインするたびに特定のアプリを開き、ログイン時にアプリが自動起動しないようにしたいです。これは可能ですか?
私が提案するのは2段階のプロセスです:
myapp.desktop
ディレクトリに/etc/skel/.config/
ファイルを作成します。 /etc/skel
の下にあるものはすべて、新しいユーザーの作成時にフォルダーにコピーされます。そのファイルの形式については、 ショートカットとしてランチャーにシェルスクリプトを追加する方法 を参照してください。タイトルを気にしないでください-.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`
はい、可能です。私は持っていると考えていますが、おそらくより良い解決策もあります、それが役立つことを願っています
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を使えば簡単です。このpythonスクリプトをRunit.py
という名前で作成するとします:
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
このシナリオでは、ログインごとにサービスが常に実行され、スクリプトはそのユーザーが既に実行されているかどうかを確認します。