Eu tenho este script. Eu coloquei em ~ / Desktop. Eu vejo o script na minha área de trabalho em um "Folder View" widget. Quando eu clico no script, eu obtenho uma lista de usuários, então eu recebo uma caixa de diálogo de autorização (para uma senha), então eu recebo um "konsole" que eu gostaria de aparecer na mesma área de trabalho virtual.
Infelizmente, ele aparece em uma área de trabalho virtual aleatória. Como não sei quanto do "protocolo" de VDs é X e quanto é do KDE, não sei onde está o problema. O que causa esse comportamento? Como posso corrigir esse comportamento, para que ele apareça no VD ativo?
Eu tentei fazer essa pergunta no #linux do canal de IRC do freenode, onde uma pessoa chamou o Psi_Jack para me fazer um monte de pesar sobre o script, porque eu chamei o Ruby do bash. Aqui estão os fatos, eu queria acessar apenas usuários "reais", por exemplo, "mãe", "pop", "sis", "mouse" e não "saned", "mysqld", "fethmail" etc. Então eu tive que testar ids de usuário. Embora não seja muito difícil no bash é mais confuso, então eu gosto. Nesses casos, eu uso rubi, porque - bem parte da razão de ser de Ruby é limpar parte da bagunça do perl, e parte do perls raison d'etre é limpar a bagunça das várias camadas de script.
O fato é que eu sei que o ruby está correto, e o AFAICS não tem nenhum problema real com o script, exceto na linha "/ usr / lib / kde4 / libexec / kdesu-u $ KA_USER konsole". Então, por favor, deixe o script.
#!/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