web-dev-qa-db-ja.com

ユーザーログオン時にコマンドを実行する

Linuxデスクトップシステムで、ユーザーがログインしたときにコマンドを実行したい。

他の投稿を読んだ後、~/.bashrcにコマンドを挿入しようとしましたが、失敗しました。さらに、システムはユーザーログインにグラフィックインターフェイスを使用するため、コマンドをシェルの開始に関連させるべきではありません。

また、/etc/profile.dに含まれるスクリプトの1つにコマンドを追加しようとしましたが、結果はありませんでした。

これを行う別の方法はありますか?ログイン後にシステムが読み取るファイルはありますか?

23
BowPark

グラフィカルディスプレイマネージャーがクラシックスタートアップファイルを読み取る保証はありません。これは、ディストリビューション間およびディスプレイマネージャ間で異なります。ただし、次のいずれかが機能するはずです。

  1. デスクトップ環境のネイティブメソッドを使用して、スタートアップアプリケーションを設定します。詳細は、使用しているDEによって異なりますが、コマンドを実行するスクリプトを作成して、スタートアップアプリケーションのリストに追加できます。たとえば、私のシステム(シナモン)では、「システム設定」=>「スタートアップアプリケーション」からこれを行うことができます。

  2. 少なくともGDM、LDM、LightDM、およびLXDMログインマネージャーで~/.xprofileこれはソース を使用します。

  3. 上記のいずれもうまくいかない場合は、コマンドを~/.profileに追加してみてください。これはログインシェルのメイン初期化ファイルであり、ログイン時に一部のグラフィカルシェルでも読み取られます。

  4. @derobertがコメントで指摘したように、 無料のデスクトップ標準 を使用することもできます。

    自動起動ディレクトリは$ XDG_CONFIG_DIRS/autostartであり、「デスクトップベースディレクトリ仕様」の「この仕様の参照」セクションに従って定義されています。

    同じファイル名が複数の自動起動ディレクトリの下にある場合は、最も重要なディレクトリの下のファイルのみを使用する必要があります。

    例:$ XDG_CONFIG_HOMEが設定されていない場合、ユーザーのホームディレクトリの自動起動ディレクトリは〜/ .config/autostart /です。

    例:$ XDG_CONFIG_DIRSが設定されていない場合、システム全体の自動起動ディレクトリは/ etc/xdg/autostart /です。

    例:$ XDG_CONFIG_HOMEおよび$ XDG_CONFIG_DIRSが設定されておらず、2つのファイル/etc/xdg/autostart/foo.desktopおよび〜/ .config/autostart/foo.desktopが存在する場合、ファイル〜/ .config/autostart/fooのみが存在します。 〜/ .config/autostart /が/ etc/xdg/autostart /よりも重要であるため、デスクトップが使用されます

~/.bashrcはここでは完全に無関係であり、インタラクティブな非ログインシェルによってのみ読み取られるため、グラフィカルシェルかどうかに関係なく、ログインシェルでは無視されます。

21
terdon

もう1つのオプションはpamを使用することです。これにより、ログイン時のアクションを正確に定義できます。

一般的なアクションについては、pam_exec( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html )を利用できます。ただし、より具体的なアクションを安全な方法で実行する必要がある場合は、一般的に使用されるpam_mount(ログオン時のマウントの場合 http:// manpages.ubuntu.com/manpages/hardy/man8/pam_mount.8.html )またはpam_echo(ユーザーへの任意のメッセージの場合- http://manpages.ubuntu.com/manpages/hardy/man8/ pam_echo.8.html )。

一般に、pamはログインをカスタマイズするための非常に優れたシステムであるため、他の人が示唆したように、潜在的に安全でないスクリプトに依存するのではなく、もう少し詳しく調べたい場合があります。

かなり典型的な/etc/pam.d/system-authを指定すると、ログイン後にpam_execを次のように使用できます。

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so

どこ /usr/local/bin/my_progは、ユーザーのログインが成功した後に実行される任意のプログラムです。

6
oakad

このトピックによると: ログイン後にコマンドを自動的に実行しますか?

.bashrcのソリューション(必要なものではありません)とスタートアップアプリケーションのソリューションがあります。ダニエルS.

gnome-session-propertiesは、スタートアップアプリケーションの構成に使用できます。

また、システムの起動時にアプリケーションを実行したい場合は、次のようなルールをcrontabに追加できます(crontab -eでcrontabを編集)。

@reboot /run/this/program/at/boot >/dev/null 2>&1
2
Laurent C.