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 246 by niro, Wed Apr 13 16:09:53 2005 UTC alx-src/branches/alxconf-060/functions/config_sessions.sh revision 3503 by niro, Thu Apr 19 12:17:20 2012 UTC
# Line 1  Line 1 
1  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.5 2005-04-13 16:09:53 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}'")  
  #"select session 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_SESSIONS  
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
  local k  
15   local server   local server
16   local ses_session   local ses_session
17   local ses_filename   local ses_filename
# Line 52  generate_ica_session_files() Line 19  generate_ica_session_files()
19   local ses_domain   local ses_domain
20   local ses_password   local ses_password
21   local ses_browseradrs   local ses_browseradrs
22     local ses_colors
23     local CONFIG
24    
25     # very basic getops
26     for i in $*
27     do
28     case $1 in
29     --session) shift; ses_session="$1" ;;
30     --filename) shift; ses_filename="$1" ;;
31     --username) shift; ses_username="$1" ;;
32     --password) shift; ses_password="$1" ;;
33     --domain) shift; ses_domain="$1" ;;
34     --server) shift; ses_browseradrs="$1" ;;
35     --colordepth) shift; ses_colors="$1" ;;
36             esac
37     shift
38     done
39    
40     # abort if session, filename or server not given
41     [[ -z ${ses_session} ]] && return 1
42     [[ -z ${ses_filename} ]] && return 1
43     [[ -z ${ses_browseradrs} ]] && return 1
44    
45     # write session files
46     CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}"
47     clearconfig
48    
49     addconfig '[WFClient]'
50     addconfig 'Version=2'
51    
52   #get settings from database   # use ';' as ifs
53   all_ids=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   declare -i i=0
54   "select id from cfg_sessions where serial='${ALX_SERIAL}'")   for server in ${ses_browseradrs//;/ }
55     do
56   declare -i x=0   (( i++ ))
57   for i in ${all_ids}   num="${i}"
58   do   # support newer ica-clients:
59   # get settings   # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !!
60   ses_session[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   [[ ${i} -eq 1 ]] && num=""
61   "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   addconfig "TcpBrowserAddress${num}=${server}"
   
  ses_filename[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
  "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
   
  ses_username[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
  "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
   
  ses_domain[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
  "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
   
  ses_password[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
  "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
   
  ses_browseradrs[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \  
  "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")  
   
  # write session files  
  echo '[WFClient]' > ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo 'Version=2' >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  OLD_IFS="$IFS"  
  IFS=";"  
  declare -i k=0  
  for server in ${ses_browseradrs[${x}]}  
  do  
  (( k++ ))  
  echo "TcpBrowserAddress${k}=${server}" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  done  
  IFS="${OLD_IFS}"  
  unset k  
  unset OLD_IFS  
   
  echo 'ScreenPercent=0' >> ${ALX_ICA_SESSIONS}/${ses_filename}  
   
  echo '[ApplicationServers]' >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo "${ses_session[${x}]}=" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
   
  echo "[${ses_session[${x}]}]" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo "Address=${ses_session[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo "InitialProgram=#${ses_session[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo 'DesiredColor=3' >> ${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[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo "Username=${ses_username[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}  
  echo "Domain=${ses_domain[${x}]}" >> ${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   (( x++ ))   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     # 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   local count=${#ALX_SESSIONS[*]}  # 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
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     generate_icon \
265     --name "${cfg_sessions_session}" \
266     --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})" \
267     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_sessions_session}).png" \
268     --dest "${dest}/$(fix_whitespaces ${cfg_sessions_session}).lnk" \
269     --xres "${x}" \
270     --yres "${y}"
271    
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   # DEBUG   y=$((${y} + 80))
310  # declare -i i=0   done
311  # echo count=${count}  
312  # echo "Number of new sessions: ${count}"   for i in ${plugin_list}
313  # for ((i=0; i < count; i++))   do
314  # do   # abort if empty
315  # echo "${i} - ${ALX_SESSIONS[${i}]}"   [[ -z ${i} ]] && continue
316  # done  
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     local progsh_path
440    
441     progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
442    
443     # get all session ids from database
444     all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
445     # get all other_menuitem ids from database
446     all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'")
447     # get all plugin ids from database
448     all_plugin_ids=$(mysqldo "select id from cfg_plugins where serial='${ALX_SERIAL}'")
449    
450     # get screensaver settings
451     evaluate_table cfg_screensaver
452     # get autostart settings
453     evaluate_table cfg_autostart
454     # get current color depth
455     evaluate_table cfg_graphic
456    
457   # now setup fluxbox for user station   # now setup fluxbox for user station
458    
# Line 145  config_sessions() Line 463  config_sessions()
463   # now generate fluxbox config files   # now generate fluxbox config files
464    
465   # fluxbox main config   # fluxbox main config
466   cat ${ALX_SKELETONS}/fluxbox/init \   if [ -f ${ALX_SKELETONS}/fluxbox/init ]
467   > ${ALX_UNPRIV_HOME}/.fluxbox/init   then
468     fbinit="${ALX_SKELETONS}/fluxbox/init"
469     else
470     fbinit="/usr/share/fluxbox/init"
471     fi
472     cat ${fbinit} > ${ALX_UNPRIV_HOME}/.fluxbox/init
473    
474   # fluxbox autostart   # fluxbox autostart
475   cat ${ALX_SKELETONS}/fluxbox/apps \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
476   > ${ALX_UNPRIV_HOME}/.fluxbox/apps   # do not show decorations on messages generated with xmessage
477     if [ -x /usr/bin/xmessage ]
478     then
479     addconfig '[app] (xmessage)'
480     addconfig ' [Deco] {NONE}'
481     addconfig '[end]'
482     fi
483     # add icon utility
484     [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}'
485     # add numlock utility
486     [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}'
487    
488     # add screensaver
489     if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
490     then
491     if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
492     then
493     screensaver_passwd_cmd="-nolock"
494     else
495     screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
496     fi
497    
498     addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
499     fi
500    
501     # add plugins autostart
502     for i in ${all_plugin_ids}
503     do
504     evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
505     if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
506     then
507     eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh autostart)
508    
509     if [[ ${PLUGIN_AUTOSTART} = 1 ]]
510     then
511     addconfig "[startup] {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME}) &}"
512     fi
513     fi
514     done
515    
516   # add autostart session   # add autostart session
517   if [[ ${ALX_AUTOSTART} != "" ]]   if [[ ! -z ${cfg_autostart_session} ]]
518   then   then
519   echo "[startup] {wfica ${ALX_ICA_SESSIONS}/${ALX_AUTOSTART}}" \   # sleep one second to wait until busybox is fully initialized and the screen is really centered
520   >> ${ALX_UNPRIV_HOME}/.fluxbox/apps   addconfig "[startup] {sleep 1 && nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}"
521   fi   fi
522    
523   # fluxbox hotkeys   # fluxbox hotkeys
524   cat ${ALX_SKELETONS}/fluxbox/apps \   if [ -f ${ALX_SKELETONS}/fluxbox/keys ]
525   > ${ALX_UNPRIV_HOME}/.fluxbox/keys   then
526     fbkeys="${ALX_SKELETONS}/fluxbox/keys"
527     else
528     fbkeys="/usr/share/fluxbox/keys"
529     fi
530     cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys
531    
532   # fluxbox menu header   # generate a fluxbox menu
533   cat ${ALX_SKELETONS}/fluxbox/menu.header \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
534   > ${ALX_UNPRIV_HOME}/.fluxbox/menu   clearconfig
535    
536     # fluxbox menu header
537     cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
538     # now fix it with proper messages :P
539     local ver="$(< /etc/mageversion)"
540     sed -i "s:@CHANGEME@:alx-${ver}  #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
541   # add a newline (maybe there is no crlf in the header)   # add a newline (maybe there is no crlf in the header)
542   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   addconfig
543    
544   # fluxbox menu sessions   # first generate session files
545   for (( i=0; i < count; i++ ))   for i in ${all_ses_ids}
546   do   do
547   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}'"
548   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   generate_ica_session_file \
549     --session "${cfg_sessions_session}" \
550     --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
551     --username "${cfg_sessions_username}" \
552     --password "${cfg_sessions_password}" \
553     --domain "${cfg_sessions_domain}" \
554     --server "${cfg_sessions_browseradrs}" \
555     --colordepth "${cfg_graphic_depth}"
556    
557     # fluxbox menusession
558     addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}"
559   done   done
560    
561   # fluxbox menu footer   # delete all progs
562   cat ${ALX_SKELETONS}/fluxbox/menu.footer \   [ -d ${progsh_path} ] && rm -rf ${progsh_path}
563   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   install -d ${progsh_path}
564    
565   # add a newline (maybe there is no crlf in the footer)   # add other menuitems
566   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   for i in ${all_other_ids}
567     do
568     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
569    
570   # now we generate the desktop icons   # now echo config line for fluxbox-menu
571   cat ${ALX_SKELETONS}/idesk/ideskrc \   # make it "configureable" :p
572   > ${ALX_UNPRIV_HOME}/.ideskrc   if [[ -n ${cfg_other_menuitems_workdir} ]]
573     then
574   # whipe out old stuff and install a fresh directory   workdir="--workdir ${cfg_other_menuitems_workdir}"
575   [ -d ${ALX_UNPRIV_HOME}/.idesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.idesktop   fi
576   install -d ${ALX_UNPRIV_HOME}/.idesktop   if [[ -n ${cfg_other_menuitems_icon} ]]
577     then
578     cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
579     fi
580    
581   local name   # gen prog startup wrapper
582   for (( i=0; i < count; i++ ))   generate_program_sh \
583   do   --name "${cfg_other_menuitems_name}" \
584   name="$(basename ${ALX_SESSIONS[${i}]} .ica)"   --exec "${cfg_other_menuitems_exec}" \
585     --param "${cfg_other_menuitems_param}" \
586     --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
587     "${workdir}"
588    
589   if [ -f ${ALX_SESSIONS_ICONS}/${name}.png ]   addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
590     done
591    
592     # add plugins
593     for i in ${all_plugin_ids}
594     do
595     evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
596     if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
597   then   then
598   icon="${ALX_SESSIONS_ICONS}/${name}.png"   eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
599   else  
600   icon="${ALX_SESSIONS_ICONS}/default.png"   # abort if name or exec is empty
601     [[ -z ${PLUGIN_MENUITEM_NAME} ]] && continue
602     [[ -z ${PLUGIN_MENUITEM_EXEC} ]] && continue
603    
604     # now echo config line for fluxbox-menu
605     # make it "configureable" :p
606     if [[ -n ${PLUGIN_MENUITEM_WORKDIR} ]]
607     then
608     workdir="--workdir ${PLUGIN_MENUITEM_WORKDIR}"
609     fi
610     if [[ -n ${PLUGIN_MENUITEM_ICON} ]]
611     then
612     PLUGIN_MENUITEM_ICON="<${PLUGIN_MENUITEM_ICON}>"
613     fi
614    
615     # gen prog startup wrapper
616     generate_program_sh \
617     --name "${PLUGIN_MENUITEM_NAME}" \
618     --exec "${PLUGIN_MENUITEM_EXEC}" \
619     --param "${PLUGIN_MENUITEM_PARAM}" \
620     --dest "${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})" \
621     "${workdir}"
622    
623     addconfig "[exec] (${PLUGIN_MENUITEM_NAME}) {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})} ${PLUGIN_MENUITEM_ICON}"
624   fi   fi
625    
626   echo "table Icon   # unset all variables
627  Caption: ${name}   unset PLUGIN_MENUITEM_NAME
628  Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica   unset PLUGIN_MENUITEM_EXEC
629  Icon: ${icon}   unset PLUGIN_MENUITEM_PARAM
630  end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk   unset PLUGIN_MENUITEM_WORKDIR
631     unset PLUGIN_MENUITEM_ICON
632   done   done
633    
634   # set correct permissions   # fluxbox menu footer
635     cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
636     # add a newline (maybe there is no crlf in the footer)
637     addconfig
638    
639     # now it's a good time to generate *all* icons :)
640     generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}" "${all_plugin_ids}"
641    
642     # fix permissions
643   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
644   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
645   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
646   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
  chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc  
   
   
  # unset vars  
  unset ALX_SESSIONS  
647  }  }

Legend:
Removed from v.246  
changed lines
  Added in v.3503