--- alx-src/trunk/alxconfig-ng/functions/config_sessions.sh 2005/03/10 01:11:38 236 +++ alx-src/trunk/alxconfig-ng/functions/config_sessions.sh 2005/08/18 02:51:16 291 @@ -1,18 +1,18 @@ -# $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.1 2005-03-10 01:10:47 niro Exp $ +# $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.10 2005-08-18 02:51:16 niro Exp $ # configures ica-sessions on the host via mysql db settings get_sessions_settings() { local x i all count - #all arrays: + # all arrays: # -> session1 session2 ... sessionN - #get settings from database + # get settings from database all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select session from cfg_sessions where serial='${ALX_SERIAL}'") + "select filename from cfg_sessions where serial='${ALX_SERIAL}'") - #split'em up and put in an array (only if $all not zero) + # split'em up and put in an array (only if $all not zero) declare -i i=0 if [ -n "${all}" ] then @@ -29,22 +29,165 @@ export ALX_SESSIONS } +get_autostart_settings() +{ + # get settings from database + ALX_AUTOSTART=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select session from cfg_autostart where serial='${ALX_SERIAL}'") + + export ALX_AUTOSTART +} + +generate_ica_session_files() +{ + local all_ids + local i + local x + local server + local ses_session + local ses_filename + local ses_username + local ses_domain + local ses_password + local ses_browseradrs + local ses_colors + + # get settings from database + all_ids=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select id from cfg_sessions where serial='${ALX_SERIAL}'") + + for i in ${all_ids} + do + # get settings + ses_session=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + ses_filename=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + ses_username=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + ses_domain=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + ses_password=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + ses_browseradrs=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'") + + # get the right colors + ses_colors=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select depth from cfg_graphic where serial='${ALX_SERIAL}'") + case ${ses_colors} in + 24) ses_colors="8";; + 16) ses_colors="4";; + 8) ses_colors="2";; + *) ses_colors="2";; + esac + + # write session files + echo '[WFClient]' > ${ALX_ICA_SESSIONS}/${ses_filename} + echo 'Version=2' >> ${ALX_ICA_SESSIONS}/${ses_filename} + OLD_IFS="$IFS" + IFS=";" + declare -i x=0 + for server in ${ses_browseradrs} + do + (( x++ )) + echo "TcpBrowserAddress${x}=${server}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + done + IFS="${OLD_IFS}" + unset x + unset OLD_IFS + + echo 'ScreenPercent=0' >> ${ALX_ICA_SESSIONS}/${ses_filename} + + echo '[ApplicationServers]' >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "${ses_session}=" >> ${ALX_ICA_SESSIONS}/${ses_filename} + + echo "[${ses_session}]" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "Address=${ses_session}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "InitialProgram=#${ses_session}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "DesiredColor=${ses_colors}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo 'TransportDriver=TCP/IP' >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo 'WinStationDriver=ICA 3.0' >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "ClearPassword=${ses_password}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "Username=${ses_username}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo "Domain=${ses_domain}" >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo 'UseFullScreen=Yes' >> ${ALX_ICA_SESSIONS}/${ses_filename} + echo 'NoWindowManager=True' >> ${ALX_ICA_SESSIONS}/${ses_filename} + done +} + +get_other_menuitems() +{ + local x i count name exec icon workdir + + # all arrays: + # -> session1 session2 ... sessionN + + # get settings from database + count=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select name from cfg_other_menuitems where serial='${ALX_SERIAL}'") + + # get all instances and put them into an array + if [ -n "${count}" ] + then + for x in ${count} + do + # to be sure + unset name + unset exec + unset workdir + unset icon + + name=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select name from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'") + + exec=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select exec from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'") + + workdir=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select workdir from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'") + + icon=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ + "select icon from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'") + + # debug only + #echo "DEBUG: ${x}: name:'${name}' exec:'${exec}' workdir:'${workdir}' ic$ + + # now echo config line for fluxbox-menu + # make it "configureable" :P + [ -n "${workdir}" ] && workdir="cd ${workdir};" + [ -n "${icon}" ] && icon="[${icon}]" + echo "[exec] (${name}) {${workdir}${exec}} ${icon}" + done + fi +} + config_sessions() { - #first of all get the vars + # generate ica session files + generate_ica_session_files + + # first of all get the vars get_sessions_settings + get_autostart_settings local count=${#ALX_SESSIONS[*]} local icon + local i # DEBUG - declare -i i=0 - echo count=${count} - echo "Number of new sessions: ${count}" - for ((i=0; i < count; i++)) - do - echo "${i} - ${ALX_SESSIONS[${i}]}" - done +# declare -i i=0 +# echo count=${count} +# echo "Number of new sessions: ${count}" +# for ((i=0; i < count; i++)) +# do +# echo "${i} - ${ALX_SESSIONS[${i}]}" +# done # now setup fluxbox for user station @@ -62,6 +205,13 @@ cat ${ALX_SKELETONS}/fluxbox/apps \ > ${ALX_UNPRIV_HOME}/.fluxbox/apps + # add autostart session + if [[ ${ALX_AUTOSTART} != "" ]] + then + echo "[startup] {wfica ${ALX_ICA_SESSIONS}/${ALX_AUTOSTART}}" \ + >> ${ALX_UNPRIV_HOME}/.fluxbox/apps + fi + # fluxbox hotkeys cat ${ALX_SKELETONS}/fluxbox/apps \ > ${ALX_UNPRIV_HOME}/.fluxbox/keys @@ -70,21 +220,35 @@ cat ${ALX_SKELETONS}/fluxbox/menu.header \ > ${ALX_UNPRIV_HOME}/.fluxbox/menu + # now fix it with proper messages :P + local ver="$(< /etc/mageversion)" + sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" \ + ${ALX_UNPRIV_HOME}/.fluxbox/menu + + # add a newline (maybe there is no crlf in the header) + echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + # fluxbox menu sessions for (( i=0; i < count; i++ )) do - echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${i}}" \ - >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + [ -n "${ALX_SESSIONS[${i}]}" ] && \ + echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \ + >> ${ALX_UNPRIV_HOME}/.fluxbox/menu done + # add other menuitems + get_other_menuitems >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + # fluxbox menu footer cat ${ALX_SKELETONS}/fluxbox/menu.footer \ >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + # add a newline (maybe there is no crlf in the footer) + echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu # now we generate the desktop icons cat ${ALX_SKELETONS}/idesk/ideskrc \ - >> ${ALX_UNPRIV_HOME}/.ideskrc + > ${ALX_UNPRIV_HOME}/.ideskrc # whipe out old stuff and install a fresh directory [ -d ${ALX_UNPRIV_HOME}/.idesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.idesktop @@ -104,7 +268,7 @@ echo "table Icon Caption: ${name} -Command: wfica ${ALX_ICA_SESSIONS}/${i} +Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica Icon: ${icon} end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk done