web-dev-qa-db-ja.com

KDEプラズマ5でスクリプトから画面のロックを解除する方法は?

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画面をプログラムでロック解除する方法は?

7

実際には私の答えではありませんが、他の人にも役立つかもしれません。
それは https://forum.kde.org/viewtopic.php?f=289&t=130691#p3500 から取得され、kde 5.7を搭載した最新のarchlinuxで動作します

loginctl lock-session
loginctl unlock-session
11
Syco

画面ロッカーが壊れていて、ロック解除ができなくなっています。仮想端末(例: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
0
Fitzcarraldo

最近の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を使用し、パスワードを入力せずにこれを実行するスクリプトを実行できるようにする を使用できます。

0
Evi1M4chine