web-dev-qa-db-ja.com

最初のログインでアプリを開く

Ubuntuはユーザーがログインするたびにアプリの自動起動をサポートしていることを知っています。しかし、新しいユーザーが初めてログインするたびに特定のアプリを開き、ログイン時にアプリが自動起動しないようにしたいです。これは可能ですか?

私が提案するのは2段階のプロセスです:

  1. myapp.desktopディレクトリに/etc/skel/.config/ファイルを作成します。 /etc/skelの下にあるものはすべて、新しいユーザーの作成時にフォルダーにコピーされます。そのファイルの形式については、 ショートカットとしてランチャーにシェルスクリプトを追加する方法 を参照してください。タイトルを気にしないでください-.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を使えば簡単です。この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

このシナリオでは、ログインごとにサービスが常に実行され、スクリプトはそのユーザーが既に実行されているかどうかを確認します。

0
Saeid