私はLinux Mintを使用しています。
ログインした標準ユーザーがアクセスできないように設計されていますが、ログインしても引き続き実行されるPythonスクリプトを作成しました。 mysqlデータベースにフィールドが設定されており、「ログアウト中です」というダイアログが表示されたら、実行してログアウトします。
Pythonスクリプトを標準ユーザーとして実行すると、すべてがうまく機能し、ログアウトされます。
管理者権限でPythonスクリプトを実行すると、次の結果が表示されます。
glib.GError: Unable to connect to server
ダイアログボックスを表示しようとしたとき
管理者ユーザーを使用してスクリプトを再実行するとsudo
機能します。
アイデアはcronで実行することですが、cronにadmin userでスクリプトを実行させることができないとsudo
機能しません。
助けが必要ですか?
編集する
以下はスクリプトの2つのGUI部分です。
このセクションはスクリプトが実行されるたびに呼び出され、ユーザーの残り時間とともに通知が表示されます。
u.get_time_left()
n = pynotify.Notification("Time Left", str(u.timeLeft / 60)+" Minutes remaining")
n.set_urgency(pynotify.URGENCY_CRITICAL)
n.set_timeout(10000) # 10 seconds
n.set_category("device")
helper = gtk.Button()
icon = helper.render_icon(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG)
#n.set_icon_from_pixbuf(icon)
try :
n.show()
このセクションは、特定の条件、つまり残り時間が5分未満の場合にのみ実行されます。
def getText():
#base this on a message dialog
dialog = gtk.MessageDialog(
None,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_QUESTION,
gtk.BUTTONS_OK,
None)
dialog.set_markup('Your time limit is nearing the <b>end</b>')
entryUser = gtk.Entry()
entryPass =gtk.Entry()
entryUser.connect("activate", responseToDialog, dialog, gtk.RESPONSE_OK)
hbox = gtk.HBox()
hbox.pack_start(gtk.Label("Username:"), False, 5, 5)
hbox.pack_start(entryUser)
hbox.pack_start(gtk.Label("Password:"), False, 5, 5)
hbox.pack_start(entryPass)
dialog.format_secondary_markup("Please enter a new voucher <i>Username</i> and <i>password</i> to carry on your current session")
dialog.vbox.pack_end(hbox, True, True, 0)
dialog.show_all()
dialog.run()
username = entryUser.get_text()
password = entryPass.get_text()
dialog.destroy()
voucher = {'username':username,'password':password}
return voucher
答え1
標準ユーザーのcrontabにcronjobを追加するとどうなりますか?
...
管理ユーザーのcrontabに入って動作するためにsudoとして実行する必要がある場合、解決策の1つは、管理ユーザーがパスワードなしでPythonスクリプトを実行できるようにsudoersファイルを変更することです。
admin hostname = NOPASSWD: /path/to/python/script.py
admin
次に、ユーザーのcrontabファイルから:
0 0 * * * sudo /path/to/python/script.py > /tmp/script.py.log 2>&1
真夜中にスクリプトを実行し、出力を記録します/tmp/script.py.log
(エラーが発生した場所/発生したかどうかを確認できるように)。
ここではadmin
、userを使用すると、ユーザー名がrootではなくユーザーであることを意味すると仮定しますadmin
。それ以外の場合、デフォルトではroot
ユーザーは認証なしでsudoコマンドを実行できます。
答え2
ルートのcrontabに追加できます。sudo crontab -e
指定されたスケジュールに従ってルートとして実行されます。man 5 crontab
参考資料のcrontabファイル形式を参照してください。
編集する
DISPLAY=:0
*/5 * * * * /path/to/your/script