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

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