Magellan Linux

Diff of /alx-src/branches/alxconf-060/functions/config_sessions.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

alx-src/trunk/alxconfig-ng/functions/config_sessions.sh revision 272 by niro, Thu Apr 28 22:45:05 2005 UTC alx-src/branches/alxconf-060/functions/config_sessions.sh revision 3390 by niro, Wed Mar 28 15:02:36 2012 UTC
# Line 1  Line 1 
1  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.7 2005-04-28 22:45:05 niro Exp $  # $Id$
2  # configures ica-sessions on the host via mysql db settings  # configures ica-sessions on the host via mysql db settings
3    
4  get_sessions_settings()  fix_whitespaces()
5  {  {
6   local x i all count   local var="$@"
7     echo "${var//\ /_}"
  #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  
   
  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  
8  }  }
9    
10  generate_ica_session_files()  # helper function to create citrix session files
11    generate_ica_session_file()
12  {  {
  local all_ids  
13   local i   local i
14   local x   local num
15   local server   local server
16   local ses_session   local ses_session
17   local ses_filename   local ses_filename
# Line 51  generate_ica_session_files() Line 20  generate_ica_session_files()
20   local ses_password   local ses_password
21   local ses_browseradrs   local ses_browseradrs
22   local ses_colors   local ses_colors
23     local CONFIG
24    
25   #get settings from database   # very basic getops
26   all_ids=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   for i in $*
27   "select id from cfg_sessions where serial='${ALX_SERIAL}'")   do
28     case $1 in
29   for i in ${all_ids}   --session) shift; ses_session="$1" ;;
30   do   --filename) shift; ses_filename="$1" ;;
31   # get settings   --username) shift; ses_username="$1" ;;
32   ses_session=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   --password) shift; ses_password="$1" ;;
33   "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   --domain) shift; ses_domain="$1" ;;
34     --server) shift; ses_browseradrs="$1" ;;
35   ses_filename=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   --colordepth) shift; ses_colors="$1" ;;
36   "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")           esac
37     shift
38   ses_username=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   done
39   "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
40     # abort if session, filename or server not given
41   ses_domain=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   [[ -z ${ses_session} ]] && return 1
42   "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   [[ -z ${ses_filename} ]] && return 1
43     [[ -z ${ses_browseradrs} ]] && return 1
44   ses_password=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
45   "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   # write session files
46     CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}"
47   ses_browseradrs=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   clearconfig
48   "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
49     addconfig '[WFClient]'
50   # get the right colors   addconfig 'Version=2'
  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  
51    
52   # write session files   # use ';' as ifs
53   echo '[WFClient]' > ${ALX_ICA_SESSIONS}/${ses_filename}   declare -i i=0
54   echo 'Version=2' >> ${ALX_ICA_SESSIONS}/${ses_filename}   for server in ${ses_browseradrs//;/ }
55   OLD_IFS="$IFS"   do
56   IFS=";"   (( i++ ))
57   declare -i x=0   num="${i}"
58   for server in ${ses_browseradrs}   # support newer ica-clients:
59   do   # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !!
60   (( x++ ))   [[ ${i} -eq 1 ]] && num=""
61   echo "TcpBrowserAddress${x}=${server}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   addconfig "TcpBrowserAddress${num}=${server}"
  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}  
62   done   done
63    
64     addconfig 'ScreenPercent=0'
65     addconfig '[ApplicationServers]'
66     addconfig "${ses_session}="
67     addconfig "[${ses_session}]"
68     addconfig "Address=${ses_session}"
69     addconfig "InitialProgram=#${ses_session}"
70    
71     # convert to ica session file values
72     case ${ses_colors} in
73     24|32) ses_colors="8";;
74     16) ses_colors="4";;
75     8) ses_colors="2";;
76     *) ses_colors="4";; # default to 16bit
77     esac
78     addconfig "DesiredColor=${ses_colors}"
79     addconfig 'TransportDriver=TCP/IP'
80     addconfig 'WinStationDriver=ICA 3.0'
81     addconfig "ClearPassword=${ses_password}"
82     addconfig "Username=${ses_username}"
83     addconfig "Domain=${ses_domain}"
84     addconfig 'UseFullScreen=Yes'
85     addconfig 'NoWindowManager=True'
86  }  }
87    
88  config_sessions()  # generates a sh file to start programs
89    generate_program_sh()
90  {  {
91   # generate ica session files   local dest
92   generate_ica_session_files   local name
93     local exec
94     local param
95     local workdir
96     local CONFIG
97    
98   #first of all get the vars   # very basic getops
99   get_sessions_settings   for i in $*
100   get_autostart_settings   do
101     case $1 in
102     --name|-n) shift; name="$1" ;;
103     --exec|-x) shift; exec="$1" ;;
104     --param|-p) shift; param="$1" ;;
105     --dest|-d) shift; dest="$1" ;;
106     --workdir|-w) shift; workdir="$1" ;;
107             esac
108     shift
109     done
110    
111   local count=${#ALX_SESSIONS[*]}   # abort if name, dest or exec not given
112     [[ -z ${name} ]] && return 1
113     [[ -z ${exec} ]] && return 1
114     [[ -z ${dest} ]] && return 1
115    
116     CONFIG="${dest}"
117     addconfig "#!/bin/sh"
118     [ -n "${workdir}" ] && addconfig "cd ${workdir}"
119     addconfig "exec ${exec} ${param}"
120    
121     chmod 0755 "${dest}"
122    }
123    
124    # helper functions for generate all desktop icons
125    generate_icon()
126    {
127     local name
128   local icon   local icon
129     local command
130     local dest
131     local yres
132     local xres
133     local iwidth
134     local iheight
135     local deficon
136     local CONFIG
137     local utility
138    
139     # very basic getops
140     for i in $*
141     do
142     case $1 in
143     --name|-n) shift; name="$1" ;;
144     --command|-c) shift; command="$1" ;;
145     --icon|-i) shift; icon="$1" ;;
146     --dest|-d) shift; dest="$1" ;;
147     --xres|-x) shift; xres="$1" ;;
148     --yres|-y) shift; yres="$1" ;;
149     --icon-width|-w) shift; iwidth="$1" ;;
150     --icon-height|-h) shift; iheight="$1" ;;
151     --default-icon) shift; deficon="$1" ;;
152             esac
153     shift
154     done
155    
156     # some sanity checks:
157    
158     # abort if name or command not given
159     [[ -z ${name} ]] && return 1
160     [[ -z ${command} ]] && return 1
161    
162     [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk"
163    
164     # use some defaults for icon, dest, {x,y}res
165     [[ -z ${xres} ]] && xres=50
166     [[ -z ${yres} ]] && xres=50
167     if [[ -z ${icon} ]] || [ ! -f ${icon} ]
168     then
169     # if no default icon is given use default.png
170     [[ -z ${deficon} ]] && deficon="default.png"
171     icon="${ALX_SESSIONS_ICONS}/${deficon}"
172     fi
173    
174     CONFIG="${dest}"
175     clearconfig
176    
177     addconfig 'table Icon'
178     addconfig "  Caption: ${name}"
179     addconfig "  Command: ${command}"
180     addconfig "  Icon: ${icon}"
181     addconfig "  X: ${xres}"
182     addconfig "  Y: ${yres}"
183    
184     # add these only if not zero
185     if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]]
186     then
187     addconfig "  Width: ${iwidth}"
188     addconfig "  Height: ${iheight}"
189     fi
190    
191     addconfig 'end'
192    }
193    
194    generate_all_desktop_icons()
195    {
196     local session_list="$1"
197     local other_menuitem_list="$2"
198     local plugin_list="$3"
199     local res
200     local xres
201     local yres
202     local x
203     local y
204   local i   local i
205     local name
206     local progsh_path
207     local utility
208     local dest
209     local rc
210    
211     dest="${ALX_UNPRIV_HOME}/.idesktop"
212     rc="${ALX_UNPRIV_HOME}/.ideskrc"
213    
214     # progsh path
215     progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
216    
217     # get the resolution
218     res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
219    
220     # split res to x & y
221     xres="${res%x*}"
222     yres="${res#*x}"
223    
224     # top left edge of the icon is given in config file
225     # remove a little bit to simulate the bottom-right edge
226     xres="$(( ${xres} - 120 ))"
227     yres="$(( ${yres} - 80 ))"
228    
229     # clean desktop icon location
230     [ -d ${dest} ] && rm -rf ${dest}
231     [ -f ${rc} ] && rm -f ${rc}
232     install -d ${dest}
233    
234     # default settings
235     declare -i x=50
236     declare -i y=50
237    
238     # ica icons
239     for i in ${session_list}
240     do
241     # abort if empty
242     [[ -z ${i} ]] && continue
243    
244     # get database information
245     evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
246    
247     # new line if x > xres
248     if [ ${x} -ge ${xres} ]
249     then
250     x=50
251     y=$((${y} + 80))
252     fi
253    
254     # new row if y > yres
255     if [ ${y} -ge ${yres} ]
256     then
257     x=$((${x} + 120))
258     y=50
259    
260     # re-check x
261     [ ${x} -ge ${xres} ] && x=50
262     fi
263    
264   # DEBUG   generate_icon \
265  # declare -i i=0   --name "${cfg_sessions_session}" \
266  # echo count=${count}   --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})" \
267  # echo "Number of new sessions: ${count}"   --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_sessions_session}).png" \
268  # for ((i=0; i < count; i++))   --dest "${dest}/$(fix_whitespaces ${cfg_sessions_session}).lnk" \
269  # do   --xres "${x}" \
270  # echo "${i} - ${ALX_SESSIONS[${i}]}"   --yres "${y}"
271  # done  
272     y=$((${y} + 80))
273     done
274    
275     for i in ${other_menuitem_list}
276     do
277     # abort if empty
278     [[ -z ${i} ]] && continue
279    
280     # get database information
281     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
282    
283     # new line if x > xres
284     if [ ${x} -ge ${xres} ]
285     then
286     x=50
287     y=$((${y} + 80))
288     fi
289    
290     # new row if y > yres
291     if [ ${y} -ge ${yres} ]
292     then
293     x=$((${x} + 120))
294     y=50
295    
296     # re-check x
297     [ ${x} -ge ${xres} ] && x=50
298     fi
299    
300     generate_icon \
301     --name "${cfg_other_menuitems_name}" \
302     --command "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
303     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_other_menuitems_name}).png" \
304     --dest "${dest}/$(fix_whitespaces ${cfg_other_menuitems_name}).lnk" \
305     --xres "${x}" \
306     --yres "${y}" \
307     --default-icon "default_item.png"
308    
309     y=$((${y} + 80))
310     done
311    
312     for i in ${plugin_list}
313     do
314     # abort if empty
315     [[ -z ${i} ]] && continue
316    
317     evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
318     if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
319     then
320     eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
321    
322     # abort if name or exec is empty
323     [[ -z ${PLUGIN_MENUITEM_NAME} ]] && continue
324     [[ -z ${PLUGIN_MENUITEM_EXEC} ]] && continue
325    
326     # new line if x > xres
327     if [ ${x} -ge ${xres} ]
328     then
329     x=50
330     y=$((${y} + 80))
331     fi
332    
333     # new row if y > yres
334     if [ ${y} -ge ${yres} ]
335     then
336     x=$((${x} + 120))
337     y=50
338    
339     # re-check x
340     [ ${x} -ge ${xres} ] && x=50
341     fi
342    
343     generate_icon \
344     --name "${PLUGIN_MENUITEM_NAME}" \
345     --command "${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})" \
346     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME}).png" \
347     --dest "${dest}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME}).lnk" \
348     --xres "${x}" \
349     --yres "${y}" \
350     --default-icon "default_item.png"
351    
352     y=$((${y} + 80))
353     fi
354    
355     # unset all variables
356     unset PLUGIN_MENUITEM_NAME
357     unset PLUGIN_MENUITEM_EXEC
358     unset PLUGIN_MENUITEM_PARAM
359     unset PLUGIN_MENUITEM_WORKDIR
360     unset PLUGIN_MENUITEM_ICON
361     done
362    
363     # add shutdown, reboot icons
364     for i in shutdown reboot
365     do
366     # new line if x > xres
367     if [ ${x} -ge ${xres} ]
368     then
369     x=50
370     y=$((${y} + 80))
371     fi
372    
373     # new row if y > yres
374     if [ ${y} -ge ${yres} ]
375     then
376     x=$((${x} + 120))
377     y=50
378    
379     # re-check x
380     [ ${x} -ge ${xres} ] && x=50
381     fi
382    
383     case ${i} in
384     shutdown) name="Herunterfahren" ;;
385     reboot) name="Neustarten" ;;
386     esac
387    
388     generate_icon \
389     --name "${name}" \
390     --command "/usr/lib/alxconfig-ng/bin/user_${i}.sh" \
391     --icon "${ALX_SESSIONS_ICONS}/${i}.png" \
392     --dest "${dest}/${i}.lnk" \
393     --xres "${x}" \
394     --yres "${y}" \
395     --icon-width "40" \
396     --icon-height "40"
397    
398     y=$((${y} + 80))
399     done
400    
401     # last but not least gen a icon with some sys informations
402     local sysinfo
403     local hostname
404     local osversion
405    
406     osversion="$(< /etc/mageversion)"
407     hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'")
408     sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
409    
410     # now get the right position:
411     # restore orig values of xres
412     xres="$(( ${xres} + 120 ))"
413     # default y pos (full yres -22 = cur yres + 58 !)
414     yres="$(( ${yres} + 58 ))"
415     # middle of the screen
416     # (no txt - length required, xtdesk manage that itself)
417     xres="$(( ${xres} / 2))"
418    
419     generate_icon \
420     --name "${sysinfo}" \
421     --command "exit 0" \
422     --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
423     --dest "${dest}/sysinfo.lnk" \
424     --xres "${xres}" \
425     --yres "${yres}" \
426     --icon-width "1" \
427     --icon-height "1"
428    }
429    
430    config_sessions()
431    {
432     local i
433     local all_ses_ids
434     local all_other_ids
435     local CONFIG
436     local screensaver_passwd_cmd
437     local fbinit
438     local fbkeys
439    
440     # get all session ids from database
441     all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
442     # get all other_menuitem ids from database
443     all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'")
444     # get all plugin ids from database
445     all_plugin_ids=$(mysqldo "select id from cfg_plugins where serial='${ALX_SERIAL}'")
446    
447     # get screensaver settings
448     evaluate_table cfg_screensaver
449     # get autostart settings
450     evaluate_table cfg_autostart
451     # get current color depth
452     evaluate_table cfg_graphic
453    
454   # now setup fluxbox for user station   # now setup fluxbox for user station
455    
# Line 152  config_sessions() Line 460  config_sessions()
460   # now generate fluxbox config files   # now generate fluxbox config files
461    
462   # fluxbox main config   # fluxbox main config
463   cat ${ALX_SKELETONS}/fluxbox/init \   if [ -f ${ALX_SKELETONS}/fluxbox/init ]
464   > ${ALX_UNPRIV_HOME}/.fluxbox/init   then
465     fbinit="${ALX_SKELETONS}/fluxbox/init"
466     else
467     fbinit="/usr/share/fluxbox/init"
468     fi
469     cat ${fbinit} > ${ALX_UNPRIV_HOME}/.fluxbox/init
470    
471   # fluxbox autostart   # fluxbox autostart
472   cat ${ALX_SKELETONS}/fluxbox/apps \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
473   > ${ALX_UNPRIV_HOME}/.fluxbox/apps   # do not show decorations on messages generated with xmessage
474     if [ -x /usr/bin/xmessage ]
475     then
476     addconfig '[app] (xmessage)'
477     addconfig ' [Deco] {NONE}'
478     addconfig '[end]'
479     fi
480     # add icon utility
481     [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}'
482     # add numlock utility
483     [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}'
484    
485     # add screensaver
486     if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
487     then
488     if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
489     then
490     screensaver_passwd_cmd="-nolock"
491     else
492     screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
493     fi
494    
495     addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
496     fi
497    
498   # add autostart session   # add autostart session
499   if [[ ${ALX_AUTOSTART} != "" ]]   if [[ ! -z ${cfg_autostart_session} ]]
500   then   then
501   echo "[startup] {wfica ${ALX_ICA_SESSIONS}/${ALX_AUTOSTART}}" \   # sleep one second to wait until busybox is fully initialized and the screen is really centered
502   >> ${ALX_UNPRIV_HOME}/.fluxbox/apps   addconfig "[startup] {sleep 1 && nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}"
503   fi   fi
504    
505   # fluxbox hotkeys   # fluxbox hotkeys
506   cat ${ALX_SKELETONS}/fluxbox/apps \   if [ -f ${ALX_SKELETONS}/fluxbox/keys ]
507   > ${ALX_UNPRIV_HOME}/.fluxbox/keys   then
508     fbkeys="${ALX_SKELETONS}/fluxbox/keys"
509     else
510     fbkeys="/usr/share/fluxbox/keys"
511     fi
512     cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys
513    
514   # fluxbox menu header   # generate a fluxbox menu
515   cat ${ALX_SKELETONS}/fluxbox/menu.header \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
516   > ${ALX_UNPRIV_HOME}/.fluxbox/menu   clearconfig
517    
518     # fluxbox menu header
519     cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
520     # now fix it with proper messages :P
521     local ver="$(< /etc/mageversion)"
522     sed -i "s:@CHANGEME@:alx-${ver}  #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
523   # add a newline (maybe there is no crlf in the header)   # add a newline (maybe there is no crlf in the header)
524   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   addconfig
525    
526   # fluxbox menu sessions   # first generate session files
527   for (( i=0; i < count; i++ ))   for i in ${all_ses_ids}
528   do   do
529   echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \   evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
530   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   generate_ica_session_file \
531     --session "${cfg_sessions_session}" \
532     --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
533     --username "${cfg_sessions_username}" \
534     --password "${cfg_sessions_password}" \
535     --domain "${cfg_sessions_domain}" \
536     --server "${cfg_sessions_browseradrs}" \
537     --colordepth "${cfg_graphic_depth}"
538    
539     # fluxbox menusession
540     addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}"
541   done   done
542    
543   # fluxbox menu footer   # delete all progs
544   cat ${ALX_SKELETONS}/fluxbox/menu.footer \   progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
545   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   [ -d ${progsh_path} ] && rm -rf ${progsh_path}
546     install -d ${progsh_path}
547    
548   # add a newline (maybe there is no crlf in the footer)   # add other menuitems
549   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   for i in ${all_other_ids}
550     do
551     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
552    
553     # now echo config line for fluxbox-menu
554     # make it "configureable" :p
555     if [[ -n ${cfg_other_menuitems_workdir} ]]
556     then
557     workdir="--workdir ${cfg_other_menuitems_workdir}"
558     fi
559     if [[ -n ${cfg_other_menuitems_icon} ]]
560     then
561     cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
562     fi
563    
564   # now we generate the desktop icons   # gen prog startup wrapper
565   cat ${ALX_SKELETONS}/idesk/ideskrc \   generate_program_sh \
566   > ${ALX_UNPRIV_HOME}/.ideskrc   --name "${cfg_other_menuitems_name}" \
567     --exec "${cfg_other_menuitems_exec}" \
568   # whipe out old stuff and install a fresh directory   --param "${cfg_other_menuitems_param}" \
569   [ -d ${ALX_UNPRIV_HOME}/.idesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.idesktop   --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
570   install -d ${ALX_UNPRIV_HOME}/.idesktop   "${workdir}"
571    
572   local name   addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
573   for (( i=0; i < count; i++ ))   done
  do  
  name="$(basename ${ALX_SESSIONS[${i}]} .ica)"  
574    
575   if [ -f ${ALX_SESSIONS_ICONS}/${name}.png ]   # add plugins
576     for i in ${all_plugin_ids}
577     do
578     evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
579     if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
580   then   then
581   icon="${ALX_SESSIONS_ICONS}/${name}.png"   eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
582   else  
583   icon="${ALX_SESSIONS_ICONS}/default.png"   # abort if name or exec is empty
584     [[ -z ${PLUGIN_MENUITEM_NAME} ]] && continue
585     [[ -z ${PLUGIN_MENUITEM_EXEC} ]] && continue
586    
587     # now echo config line for fluxbox-menu
588     # make it "configureable" :p
589     if [[ -n ${PLUGIN_MENUITEM_WORKDIR} ]]
590     then
591     workdir="--workdir ${PLUGIN_MENUITEM_WORKDIR}"
592     fi
593     if [[ -n ${PLUGIN_MENUITEM_ICON} ]]
594     then
595     PLUGIN_MENUITEM_ICON="<${PLUGIN_MENUITEM_ICON}>"
596     fi
597    
598     # gen prog startup wrapper
599     generate_program_sh \
600     --name "${PLUGIN_MENUITEM_NAME}" \
601     --exec "${PLUGIN_MENUITEM_EXEC}" \
602     --param "${PLUGIN_MENUITEM_PARM}" \
603     --dest "${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})" \
604     "${workdir}"
605    
606     addconfig "[exec] (${PLUGIN_MENUITEM_NAME}) {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})} ${PLUGIN_MENUITEM_ICON}"
607   fi   fi
608    
609   echo "table Icon   # unset all variables
610  Caption: ${name}   unset PLUGIN_MENUITEM_NAME
611  Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica   unset PLUGIN_MENUITEM_EXEC
612  Icon: ${icon}   unset PLUGIN_MENUITEM_PARAM
613  end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk   unset PLUGIN_MENUITEM_WORKDIR
614     unset PLUGIN_MENUITEM_ICON
615   done   done
616    
617   # set correct permissions   # fluxbox menu footer
618     cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
619     # add a newline (maybe there is no crlf in the footer)
620     addconfig
621    
622     # now it's a good time to generate *all* icons :)
623     generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}" "${all_plugin_ids}"
624    
625     # fix permissions
626   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
627   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
628   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
629   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
  chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc  
   
   
  # unset vars  
  unset ALX_SESSIONS  
630  }  }

Legend:
Removed from v.272  
changed lines
  Added in v.3390