Pam_usbを使用していて、USBスティックを取り外したり挿入したりしたときにコンピューターをロック/ロック解除したい。ロックには_qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock
_を使用し、完全に機能します。ロック解除のために、私が見つけた一連のコマンドを試しました(それらのほとんどは集約されています here )。しかし、それらは機能しません。具体的には、KDE 4構文を持つものを除外すると、それらは2つのカテゴリに分類されます。Xorgを完全にハングさせるqdbus (relevant path here, several variations exists) /MainApplication quit
を使用するものと、screenlockerプロセスに対してkillall
を使用するものですが、プロセスは再起動しますその直後!
だから、私の質問は:標準のロッカーでプログラムされたKDE5画面をプログラムでロック解除する方法は?
実際には私の答えではありませんが、他の人にも役立つかもしれません。
それは https://forum.kde.org/viewtopic.php?f=289&t=130691#p3500 から取得され、kde 5.7を搭載した最新のarchlinuxで動作します
loginctl lock-session
loginctl unlock-session
画面ロッカーが壊れていて、ロック解除ができなくなっています。仮想端末(例:Ctrl + Alt + F2)へのスイッチのロックを解除するには、ログインして次のコマンドを実行します:loginctl unlock-sessionsその後、実行中のセッション(Ctrl + Alt + F7)
上記のメッセージは、プラズマ5、OpenRC、ConsoleKitを備えたGentoo Stableを実行している私のラップトップで時々表示されます。 TTY1から起動した次のスクリプトは、TTY7のX11セッションを正常にロック解除します。
fitzcarraldo@clevow230ss ~ $ cat unlockKDEsession.sh
#!/bin/bash
# Screen locker broken in KDE with ConsoleKit
# See https://forums.gentoo.org/viewtopic-t-1046566.html
# and https://forums.gentoo.org/viewtopic-t-1054134.html
# Find which session is locked
session=Session$(ck-list-sessions | grep -B10 "x11-display = ':0" | grep -o -P '(?<=Session).*(?=:)')
# Create Bash script to unlock session
echo "#!/bin/bash" > /unlock.sh
echo "su -c 'dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/$session org.freedesktop.ConsoleKit.Session.Unlock'" >> /unlock.sh
chmod +x /unlock.sh
# Run Bash script in another TTY
openvt -s -w /unlock.sh
最近のKDEプラズマでは、コマンドは明らかに次のとおりです。
qdbus --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/$session Unlock
セッション名は、
qdbus --literal --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager \
org.freedesktop.ConsoleKit.Manager.GetSessions | sed 's/^.*\(Session[0-9]*\).*$/\1/'
複数のセッションが存在する可能性があるので注意してください。いくつかありますGetSession*
さまざまなユースケース向けの関数です。
問題は、これらすべての関数はもちろんルートが必要です!
loginctl
がこれをどのように回避するかはわかりませんが、それが可能であることを示唆しています。そうでない場合は、多分 Sudo
を使用し、パスワードを入力せずにこれを実行するスクリプトを実行できるようにする を使用できます。