xserverセッションを必要とする起動スクリプトを実行する

xserverセッションを必要とする起動スクリプトを実行する

Gtk私は、-module (recent-manager 機能のために からインポート)を使用する python3 スクリプトを持っており、現在の xserver セッション ( Ubuntu ではサービス)gi.repositoryへのリンクを必要とします。lightdm

コンソール (xserver セッション内) 経由で手動で実行することはできますが、自動実行にしたいです。

init.d スクリプトは動作しません (DISPLAY 変数を 0.0 に設定)。 を使用すると、xvfb-runinit.d スクリプトは私のスクリプトを実行しますが、予想どおり仮想 xserver 環境で実行されます (私のものではありません)。init.d スクリプトを現在の xserver セッションに接続する同等のものはありませんか?

これまで、.xinitrcファイル ( 内~/、実行可能) を試したほか、 を.xprofile, .xsession, .xsessionrc介して最初のファイルにすべてリンクするファイルを作成しましたln -s。テストのために追加しようとしましたが、再起動しても、PC 全体を再起動して再度ログインしても、gnome-terminal &ターミナルは表示されませんでした。lightdm

私も試してみましたXセッション再開時に設定スクリプトを実行するしかし、エラーが発生しますCan't open /usr/share/acpi-support/power-funcs

の提案upstartに従って、lightdmで起動スクリプトを実行するxserver 表示変数 (またはハンドル?) も提供されず、lightdm起動後に実行されるだけですよね?

どこかに入れておこうかなxorg.conf?(xrandr のカスタマイズを永続的にするにはどうすればよいですか?) 私を殴る..

(私のスクリプトは最近のファイルのクイックリストを作成し、Windows と同様に Unity ランチャーの右クリック メニューに追加します。https://github.com/thirschbuechler/ubuntu-recentquicklists

答え1

多くの場合と同様に、ここでの主な問題はタイミングです。

  1. スクリプトはユーザーレベルで実行する必要がありますログイン後ランチャー項目を編集するため、ユーザー レベルで編集されます。
  2. それでも、スクリプトが何をすべきかを考えると (説明を読んで)、スクリプトはデスクトップが完全に読み込まれるまで少し待つ必要があります。Unity ランチャーは、ログイン後に最初に「準備完了」になるものではありません。スクリプトの実行が早すぎると、スクリプトが壊れたり、ターゲットを逃したりします。

要するに

ログイン後約 10 ~ 15 秒後にスクリプトを実行する必要があります。これは、次のいずれかを追加することで実行できます。

/bin/bash -c "sleep 15 && python /path/to/script.py"

(スクリプトが実行可能でない場合)、または

/bin/bash -c "sleep 15 && /path/to/script.py"

(スクリプトが実行可能ファイル) をユーザーのスタートアップ アプリケーションに追加します (ダッシュ > スタートアップ アプリケーション > 追加)。

実行するすべてのユーザー

スクリプトを実行する必要がある場合すべてのユーザー(ログイン後)全ユーザーのスタートアップアプリケーションに一括で追加できます。

これを行うには、以下のコードを空のファイルにコピーし、次の行から始めて、Name=その行にスクリプトへの正しいパスを設定します。

Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"

次に、ファイルを(または で終わる任意の名前)/etc/xdg/autostartとして保存します。launch_script.desktop.desktop

[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application

関連情報