--- alx-src/trunk/alxconfig-ng/functions/config_sessions.sh 2005/09/27 22:50:36 338 +++ alx-src/branches/alxconf-060/functions/config_sessions.sh 2011/06/27 15:07:00 2469 @@ -1,67 +1,17 @@ -# $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.16 2005-09-27 22:50:36 niro Exp $ +# $Id$ # configures ica-sessions on the host via mysql db settings -get_sessions_settings() +fix_whitespaces() { - local x i all count - - # all arrays: - # -> session1 session2 ... sessionN - - # get settings from database - all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select filename from cfg_sessions where serial='${ALX_SERIAL}'") - - # split'em up and put in an array (only if $all not zero) - declare -i i=0 - if [ -n "${all}" ] - then - for x in ${all} - do - ALX_SESSIONS[${i}]=${x} - ((i++)) - done - count=${i} - else - count=0 - fi - - # get settings from database - ALX_PROGRAMS=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select name from cfg_other_menuitems where serial='${ALX_SERIAL}'") - - export ALX_SESSIONS - export ALX_PROGRAMS + local var="$@" + echo "${var//\ /_}" } -get_autostart_settings() +# helper function to create citrix session files +generate_ica_session_file() { - # 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 -} - -get_screensaver_settings() -{ - ALX_SCRN_SAVER=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select screensaver from cfg_screensaver where serial='${ALX_SERIAL}'") - ALX_SCRN_TIMEOUT=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select timeout from cfg_screensaver where serial='${ALX_SERIAL}'") - ALX_SCRN_PASSWD=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select password from cfg_screensaver where serial='${ALX_SERIAL}'") - - export ALX_SCRN_SAVER - export ALX_SCRN_TIMEOUT - export ALX_SCRN_PASSWD -} - -generate_ica_session_files() -{ - local all_ids local i - local x + local num local server local ses_session local ses_filename @@ -70,74 +20,69 @@ local ses_password local ses_browseradrs local ses_colors + local CONFIG - # 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} + # very basic getops + for i in $* 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 + case $1 in + --session) shift; ses_session="$1" ;; + --filename) shift; ses_filename="$1" ;; + --username) shift; ses_username="$1" ;; + --password) shift; ses_password="$1" ;; + --domain) shift; ses_domain="$1" ;; + --server) shift; ses_browseradrs="$1" ;; + --colordepth) shift; ses_colors="$1" ;; + esac + shift + done + + # abort if session, filename or server not given + [[ -z ${ses_session} ]] && return 1 + [[ -z ${ses_filename} ]] && return 1 + [[ -z ${ses_browseradrs} ]] && return 1 + + # write session files + CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}" + clearconfig - # 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} + addconfig '[WFClient]' + addconfig 'Version=2' + + # use ';' as ifs + declare -i i=0 + for server in ${ses_browseradrs//;/ } + do + (( i++ )) + num="${i}" + # support newer ica-clients: + # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !! + [[ ${i} -eq 1 ]] && num="" + addconfig "TcpBrowserAddress${num}=${server}" done + + addconfig 'ScreenPercent=0' + addconfig '[ApplicationServers]' + addconfig "${ses_session}=" + addconfig "[${ses_session}]" + addconfig "Address=${ses_session}" + addconfig "InitialProgram=#${ses_session}" + + # convert to ica session file values + case ${ses_colors} in + 24|32) ses_colors="8";; + 16) ses_colors="4";; + 8) ses_colors="2";; + *) ses_colors="4";; # default to 16bit + esac + addconfig "DesiredColor=${ses_colors}" + addconfig 'TransportDriver=TCP/IP' + addconfig 'WinStationDriver=ICA 3.0' + addconfig "ClearPassword=${ses__password}" + addconfig "Username=${ses_username}" + addconfig "Domain=${ses_domain}" + addconfig 'UseFullScreen=Yes' + addconfig 'NoWindowManager=True' } # generates a sh file to start programs @@ -146,7 +91,9 @@ local dest local name local exec + local param local workdir + local CONFIG # very basic getops for i in $* @@ -154,6 +101,7 @@ case $1 in --name|-n) shift; name="$1" ;; --exec|-x) shift; exec="$1" ;; + --param|-p) shift; param="$1" ;; --dest|-d) shift; dest="$1" ;; --workdir|-w) shift; workdir="$1" ;; esac @@ -161,72 +109,16 @@ done # abort if name, dest or exec not given - [ -z "${name}" ] && return 1 - [ -z "${exec}" ] && return 1 - [ -z "${dest}" ] && return 1 - - echo "#!/bin/sh" > ${dest} - [ -n "${workdir}" ] && echo "cd ${workdir}" >> ${dest} - echo "exec ${exec}" >> ${dest} - - chmod 0755 ${dest} -} - -get_other_menuitems() -{ - local x i progsh_path name exec icon workdir + [[ -z ${name} ]] && return 1 + [[ -z ${exec} ]] && return 1 + [[ -z ${dest} ]] && return 1 + + CONFIG="${dest}" + addconfig "#!/bin/sh" + [ -n "${workdir}" ] && addconfig "cd ${workdir}" + addconfig "exec ${exec} ${param}" - # all arrays: - # -> session1 session2 ... sessionN - - # get settings from database -> now stored in ALX_PROGRAMS - - # abort if empty - [ -z "${ALX_PROGRAMS}" ] && return 0 - - progsh_path=${ALX_UNPRIV_HOME}/.alxprogs - [ -d ${progsh_path} ] && rm -rf ${progsh_path} - install -d ${progsh_path} - - # gen menu items - for x in ${ALX_PROGRAMS} - 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 "${workdir}" ] && workdir="--workdir ${workdir}" - [ -n "${icon}" ] && icon="<${icon}>" - - # gen prog startup wrapper - generate_program_sh \ - --name "${name}" \ - --exec "${exec}" \ - --dest "${progsh_path}/${name}" \ - "${workdir}" - - echo "[exec] (${name}) {${progsh_path}/${name}} ${icon}" - done + chmod 0755 "${dest}" } # helper functions for generate all desktop icons @@ -241,6 +133,8 @@ local iwidth local iheight local deficon + local CONFIG + local utility # very basic getops for i in $* @@ -259,151 +153,154 @@ shift done - # some sanity checks : - + # some sanity checks: + # abort if name or command not given - [ -z "${name}" ] && return 1 - [ -z "${command}" ] && return 1 + [[ -z ${name} ]] && return 1 + [[ -z ${command} ]] && return 1 + + [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk" # use some defaults for icon, dest, {x,y}res - [ -z "${xres}" ] && xres=20 - [ -z "${yres}" ] && xres=20 - [ -z "${dest}" ] && dest="${ALX_UNPRIV_HOME}/.xtdesktop/${name}.lnk" - if [ -z "${icon}" ] || [ ! -f "${icon}" ] + [[ -z ${xres} ]] && xres=30 + [[ -z ${yres} ]] && xres=30 + if [[ -z ${icon} ]] || [ ! -f ${icon} ] then # if no default icon is given use default.png - [ -z "${deficon}" ] && deficon="default.png" + [[ -z ${deficon} ]] && deficon="default.png" icon="${ALX_SESSIONS_ICONS}/${deficon}" fi - echo "table Icon" > ${dest} - echo " Type: Program" >> ${dest} - echo " Caption: ${name}" >> ${dest} - echo " Command: ${command}" >> ${dest} - echo " Icon: ${icon}" >> ${dest} - echo " X: ${xres}" >> ${dest} - echo " Y: ${yres}" >> ${dest} + CONFIG="${dest}" + clearconfig + + addconfig 'table Icon' + addconfig " Caption: ${name}" + addconfig " Command: ${command}" + addconfig " Icon: ${icon}" + addconfig " X: ${xres}" + addconfig " Y: ${yres}" # add these only if not zero - if [ -n "${iwidth}" ] && [ -n "${iheight}" ] + if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]] then - echo " IconWidth: ${iwidth}" >> ${dest} - echo " IconHeight: ${iheight}" >> ${dest} + addconfig " Width: ${iwidth}" + addconfig " Height: ${iheight}" fi - echo "end" >> ${dest} + addconfig 'end' } generate_all_desktop_icons() { + local session_list="$1" + local other_menuitem_list="$2" local res local xres local yres - local icon_list local x local y - local item - local basename_item + local i + local name local progsh_path + local utility + local dest + local rc + + dest="${ALX_UNPRIV_HOME}/.idesktop" + rc="${ALX_UNPRIV_HOME}/.ideskrc" + + # progsh path + progsh_path="${ALX_UNPRIV_HOME}/.alxprogs" # get the resolution - res=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select resolution from cfg_graphic where serial='${ALX_SERIAL}'") + res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'") # split res to x & y - xres="$(echo ${res} | cut -dx -f1)" - yres="$(echo ${res} | cut -dx -f2)" + xres="${res%x*}" + yres="${res#*x}" # top left edge of the icon is given in config file # remove a little bit to simulate the bottom-right edge xres="$(( ${xres} - 120 ))" yres="$(( ${yres} - 80 ))" - # basic config - cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc - # clean desktop icon location - [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop - install -d ${ALX_UNPRIV_HOME}/.xtdesktop - + [ -d ${dest} ] && rm -rf ${dest} + [ -f ${rc} ] && rm -f ${rc} + install -d ${dest} # default settings - declare -i x=20 - declare -i y=20 + declare -i x=30 + declare -i y=30 - # first all ica sessions - local count=${#ALX_SESSIONS[*]} - for (( i=0; i < count; i++ )) - do - # filenames ! - icon_list="${icon_list} ${ALX_SESSIONS[${i}]}" - done - - for item in ${icon_list} + # ica icons + for i in ${session_list} do # abort if empty - [ -z "${item}" ] && continue + [[ -z ${i} ]] && continue + + # get database information + evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'" # new line if x > xres - if [ ${x} -ge ${xres} ];then - x=20 + if [ ${x} -ge ${xres} ] + then + x=30 y=$((${y} + 80)) fi # new row if y > yres - if [ ${y} -ge ${yres} ];then + if [ ${y} -ge ${yres} ] + then x=$((${x} + 120)) - y=20 + y=30 # re-check x - [ ${x} -ge ${xres} ] && x=20 + [ ${x} -ge ${xres} ] && x=30 fi - # ica icons - # get basename (.ica must be suffix) - basename_item="$(basename ${item} .ica)" generate_icon \ - --name "${basename_item}" \ - --command "wfica ${ALX_ICA_SESSIONS}/${item}" \ - --icon "${ALX_SESSIONS_ICONS}/${basename_item}.png" \ - --dest "${ALX_UNPRIV_HOME}/.xtdesktop/${basename_item}.lnk" \ + --name "${cfg_sessions_session}" \ + --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})" \ + --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_sessions_session}).png" \ + --dest "${dest}/$(fix_whitespaces ${cfg_sessions_session}).lnk" \ --xres "${x}" \ --yres "${y}" y=$((${y} + 80)) done - - # generate program icons - icon_list="${ALX_PROGRAMS}" - - progsh_path=${ALX_UNPRIV_HOME}/.alxprogs - - for item in ${icon_list} + for i in ${other_menuitem_list} do # abort if empty - [ -z "${item}" ] && continue + [[ -z ${i} ]] && continue + + # get database information + evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'" # new line if x > xres - if [ ${x} -ge ${xres} ];then - x=20 + if [ ${x} -ge ${xres} ] + then + x=30 y=$((${y} + 80)) fi # new row if y > yres - if [ ${y} -ge ${yres} ];then + if [ ${y} -ge ${yres} ] + then x=$((${x} + 120)) - y=20 + y=30 # re-check x - [ ${x} -ge ${xres} ] && x=20 + [ ${x} -ge ${xres} ] && x=30 fi generate_icon \ - --name "${item}" \ - --command "${progsh_path}/${item}" \ - --icon "${ALX_SESSIONS_ICONS}/${item}.png" \ - --dest "${ALX_UNPRIV_HOME}/.xtdesktop/${item}.lnk" \ + --name "${cfg_other_menuitems_name}" \ + --command "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \ + --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_other_menuitems_name}).png" \ + --dest "${dest}/$(fix_whitespaces ${cfg_other_menuitems_name}).lnk" \ --xres "${x}" \ --yres "${y}" \ --default-icon "default_item.png" @@ -411,7 +308,44 @@ y=$((${y} + 80)) done + # add shutdown, reboot icons + for i in shutdown reboot + do + # abort if empty + [[ -z ${i} ]] && continue + + # new line if x > xres + if [ ${x} -ge ${xres} ] + then + x=30 + y=$((${y} + 80)) + fi + + # new row if y > yres + if [ ${y} -ge ${yres} ] + then + x=$((${x} + 120)) + y=30 + + # re-check x + [ ${x} -ge ${xres} ] && x=30 + fi + case ${i} in + shutdown) name="Herunterfahren" + reboot) name="Neustarten" + esac + + generate_icon \ + --name "${name}" \ + --command "/usr/lib/alxconfig-ng/bin/user_${i}.sh" \ + --icon "${ALX_SESSIONS_ICONS}/${i}.png" \ + --dest "${dest}/${i}.lnk" \ + --xres "${x}" \ + --yres "${y}" + + y=$((${y} + 80)) + done # last but not least gen a icon with some sys informations local sysinfo @@ -419,8 +353,7 @@ local osversion osversion="$(< /etc/mageversion)" - hostname=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ - "select hostname from cfg_network where serial='${ALX_SERIAL}'") + hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'") sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)" # now get the right position: @@ -436,7 +369,7 @@ --name "${sysinfo}" \ --command "exit 0" \ --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \ - --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \ + --dest "${dest}/sysinfo.lnk" \ --xres "${xres}" \ --yres "${yres}" \ --icon-width "1" \ @@ -445,26 +378,25 @@ config_sessions() { - # generate ica session files - generate_ica_session_files - - # first of all get the vars - get_sessions_settings - get_autostart_settings - get_screensaver_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 + local all_ses_ids + local all_other_ids + local CONFIG + local screensaver_passwd_cmd + local fbinit + local fbkeys + + # get all session ids from database + all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'") + # get all other_menutiem ids from database + all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'") + + # get screensaver settings + evaluate_table cfg_screensaver + # get autostart settings + evaluate_table cfg_autostart + # get current color depth + evaluate_table cfg_graphic # now setup fluxbox for user station @@ -475,85 +407,130 @@ # now generate fluxbox config files # fluxbox main config - cat ${ALX_SKELETONS}/fluxbox/init \ - > ${ALX_UNPRIV_HOME}/.fluxbox/init + if [ -f ${ALX_SKELETONS}/fluxbox/init ] + then + fbinit="${ALX_SKELETONS}/fluxbox/init" + else + fbinit="/usr/share/fluxbox/init" + fi + cat ${fbinit} > ${ALX_UNPRIV_HOME}/.fluxbox/init # fluxbox autostart - cat ${ALX_SKELETONS}/fluxbox/apps \ - > ${ALX_UNPRIV_HOME}/.fluxbox/apps + CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps" + # do not show decorations on messages generated with xmessage + if [ -x /usr/bin/xmessage ] + then + addconfig '[app] (xmessage)' + addconfig ' [Deco] {NONE}' + addconfig '[end]' + fi + # add icon utility + [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}' + # add numlock utility + [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}' # add screensaver - if [[ -n ${ALX_SCRN_SAVER} ]] && [[ -n ${ALX_SCRN_TIMEOUT} ]] + if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]] then - local ALX_PASSWD_CMD - - if [[ -z ${ALX_SCRN_PASSWD} ]] || [[ ${ALX_SCRN_PASSWD} = NULL ]] + if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]] then - ALX_PASSWD_CMD="-nolock" + screensaver_passwd_cmd="-nolock" else - ALX_PASSWD_CMD="-cpasswd $(openssl passwd ${ALX_SCRN_PASSWD})" + screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})" fi - echo "[startup] {nohup xautolock -time ${ALX_SCRN_TIMEOUT} -locker 'xlock -mode ${ALX_SCRN_SAVER} ${ALX_PASSWD_CMD}' > /dev/null &}" \ - >> ${ALX_UNPRIV_HOME}/.fluxbox/apps + addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}" fi # add autostart session - if [[ ${ALX_AUTOSTART} != "" ]] + if [[ ! -z ${cfg_autostart_session} ]] then - echo "[startup] {wfica ${ALX_ICA_SESSIONS}/${ALX_AUTOSTART}}" \ - >> ${ALX_UNPRIV_HOME}/.fluxbox/apps + # sleep one second to wait until busybox is fully initialized and the screen is really centered + addconfig "[startup] {sleep 1 && nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}" fi # fluxbox hotkeys - cat ${ALX_SKELETONS}/fluxbox/keys \ - > ${ALX_UNPRIV_HOME}/.fluxbox/keys + if [ -f ${ALX_SKELETONS}/fluxbox/keys ] + then + fbkeys="${ALX_SKELETONS}/fluxbox/keys" + else + fbkeys="/usr/share/fluxbox/keys" + fi + cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys - # fluxbox menu header - cat ${ALX_SKELETONS}/fluxbox/menu.header \ - > ${ALX_UNPRIV_HOME}/.fluxbox/menu + # generate a fluxbox menu + CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu" + clearconfig + # fluxbox menu header + 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 - + 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 + addconfig - # fluxbox menu sessions - for (( i=0; i < count; i++ )) + # first generate session files + for i in ${all_ses_ids} do - [ -n "${ALX_SESSIONS[${i}]}" ] && \ - echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \ - >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'" + generate_ica_session_file \ + --session "${cfg_sessions_session}" \ + --filename "$(fix_whitespaces ${cfg_sessions_filename})" \ + --username "${cfg_sessions_username}" \ + --password "${cfg_sessions_password}" \ + --domain "${cfg_sessions_domain}" \ + --server "${cfg_sessions_browseradrs}" \ + --colordepth "${cfg_graphic_depth}" + + # fluxbox menusession + addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}" done + # delete all progs + progsh_path="${ALX_UNPRIV_HOME}/.alxprogs" + [ -d ${progsh_path} ] && rm -rf ${progsh_path} + install -d ${progsh_path} + # add other menuitems - get_other_menuitems >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + for i in ${all_other_ids} + do + evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'" - # fluxbox menu footer - cat ${ALX_SKELETONS}/fluxbox/menu.footer \ - >> ${ALX_UNPRIV_HOME}/.fluxbox/menu + # now echo config line for fluxbox-menu + # make it "configureable" :p + if [[ -n ${cfg_other_menuitems_workdir} ]] + then + workdir="--workdir ${cfg_other_menuitems_workdir}" + fi + if [[ -n ${cfg_other_menuitems_icon} ]] + then + cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>" + fi + + # gen prog startup wrapper + generate_program_sh \ + --name "${cfg_other_menuitems_name}" \ + --exec "${cfg_other_menuitems_exec}" \ + --param "${cfg_other_menuitems_param}" \ + --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \ + "${workdir}" + + addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}" + done + # 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 + addconfig # now it's a good time to generate *all* icons :) - generate_all_desktop_icons + generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}" - # set correct permissions + # fix permissions chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME} chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox - chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop - chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc - - # unset vars - unset ALX_SESSIONS - unset ALX_PROGRAMS - unset ALX_SCRN_SAVER - unset ALX_SCRN_TIMEOUT - unset ALX_SCRN_PASSWD + chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop + chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc } -