このスクリプトがあります。 ~/Desktopに入れました。デスクトップのフォルダー表示ウィジェットでスクリプトを表示します。スクリプトをクリックすると、ユーザーのリストが表示され、認証ダイアログ(パスワード)が表示され、同じ仮想デスクトップに表示したい「konsole」が表示されます。
残念ながら、任意の仮想デスクトップに表示されます。 VDの「プロトコル」のうち、Xがどれくらいになり、KDEがどれくらいになるのかわからないため、問題がどこにあるのかわかりません。この動作の原因は何ですか?アクティブなVDに表示されるようにこの動作を変更するにはどうすればよいですか?
私はフリーノードIRCチャンネル#linuxでこの質問を試しました。主に私はbashでRubyを呼び出したからです。問題は、「saned」、「mysqld」、「fethmail」などの「mom」、「pop」、「sis」、「mouse」などの「実際の」ユーザーにのみアクセスしたいということです。したがって、ユーザーIDをテストする必要があります。 Bashはそれほど難しくありませんが、私が好きなものよりも混乱しています。そのような場合、私はRubyを使います。なぜなら、Rubyは部分的にPerlの複雑な部分をクリーンアップするために存在し、Perlsは部分的にさまざまなスクリプトシェルの複雑な部分をクリーンアップするために存在するからです。
問題は、Rubyが正しいことを知っていて、AFAICSでは、 "/usr/lib/kde4/libexec/kdesu -u $KA_USER konsole"行以外のスクリプトには実際の問題がないことです。だからスクリプトを別々に保管してください。
#!/usr/bin/env sh
# kstart --desktop [#] [command]
# Assign to dlg the specified user.
dlg=$(ruby <<EOF
command = "zenity --list --column=User root"
File.new("/etc/passwd").readlines.each{|l|
fields=l.split(":")
if ( fields[2].to_i > 1000 and fields[2].to_i<60000) then
command = command+" #{fields[0]}"
end
}
puts command
EOF
)
# Execute zenity dialog, assign choice to KA_USER
KA_USER=$($dlg)
if [ -n "$KA_USER" ]
then
t=$(mktemp --suffix=log /tmp/sukon-XXXX)
/usr/lib/kde4/libexec/kdesu -u $KA_USER konsole
fi