我有这个脚本。我把它放在〜/桌面中。我在桌面上的“文件夹视图”小部件中查看脚本。当我单击脚本时,我会得到用户列表,然后得到一个授权对话框(用于密码),然后得到一个“konsole”,我希望它出现在同一个虚拟桌面中。
不幸的是它出现在随机的虚拟桌面中。因为我不知道VD的“协议”有多少是X的,有多少是KDE的,所以我不知道问题出在哪里。是什么导致了这种行为?如何修复此行为,使其出现在活动 VD 中?
我尝试在 freenode IRC 频道 #linux 上问这个问题,其中一个被昵称为 Psi_Jack 的人对这个脚本给了我很多悲伤,主要是因为我从 bash 调用了 ruby。事实是,我只想访问“真实”用户,例如“mom”、“pop”、“sis”、“mouse”,而不是“saned”、“mysqld”、“fethmail”等。所以我必须测试用户 ID。虽然 bash 不是很难,但它比我喜欢的更混乱。在这些情况下,我使用 ruby,因为 —— ruby 存在的部分原因是清理 Perl 的一些混乱,而 perls 存在的部分原因是清理各种脚本 shell 的混乱。
问题是我知道 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