Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6780 - (show annotations) (download) (as text)
Tue Jul 21 14:47:40 2015 UTC (8 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 20214 byte(s)
-enumerate all storefront caches on startup - maybe not needed just to be safe, storefront-resolver should handle this propably by itself with the appcache xml not found or older than one day logic
1 # $Id$
2 # configures ica-sessions on the host via mysql db settings
3
4 fix_whitespaces()
5 {
6 local var="$@"
7 echo "${var//\ /_}"
8 }
9
10 sanitize_store()
11 {
12 local var="$@"
13 echo "$(fix_whitespaces ${var})" | sed -e 's:\::_:g' -e 's:\/:_:g' | tr '[A-Z]' '[a-z]'
14 }
15
16 # helper function to create citrix session files
17 generate_ica_session_file()
18 {
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 # very basic getops
32 for i in $*
33 do
34 case $1 in
35 --session) shift; ses_session="$1" ;;
36 --filename) shift; ses_filename="$1" ;;
37 --username) shift; ses_username="$1" ;;
38 --password) shift; ses_password="$1" ;;
39 --domain) shift; ses_domain="$1" ;;
40 --server) shift; ses_browseradrs="$1" ;;
41 --colordepth) shift; ses_colors="$1" ;;
42 esac
43 shift
44 done
45
46 # 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 addconfig '[WFClient]'
56 addconfig 'Version=2'
57
58 # use ';' as ifs
59 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 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_storefront_sh()
96 {
97 local server
98 local ses_session
99 local ses_filename
100 local ses_username
101 local ses_domain
102 local ses_password
103 local ses_browseradrs
104 local method
105 local ses_method
106 local name
107
108 # very basic getops
109 for i in $*
110 do
111 case $1 in
112 --session) shift; ses_session="$1" ;;
113 --filename) shift; ses_filename="$1" ;;
114 --username) shift; ses_username="$1" ;;
115 --password) shift; ses_password="$1" ;;
116 --domain) shift; ses_domain="$1" ;;
117 --server) shift; ses_browseradrs="$1" ;;
118 --method) shift; method="$1" ;;
119 esac
120 shift
121 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 # generates a sh file to start programs
154 generate_program_sh()
155 {
156 local dest
157 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 # abort if name, dest or exec not given
178 [[ -z ${name} ]] && return 1
179 [[ -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 chmod 0755 "${dest}"
189 }
190
191 # helper functions for generate all desktop icons
192 generate_icon()
193 {
194 local name
195 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
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 # add shutdown, reboot icons
431 for i in shutdown reboot
432 do
433 # new line if x > xres
434 if [ ${x} -ge ${xres} ]
435 then
436 x=50
437 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
529
530 # create a fresh fluxbox directory
531 [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox
532 install -d ${ALX_UNPRIV_HOME}/.fluxbox
533
534 # now generate fluxbox config files
535
536 # fluxbox main config
537 if [ -f ${ALX_SKELETONS}/fluxbox/init ]
538 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
546 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
547 # 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 screensaver
560 if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
561 then
562 if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
563 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
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
591 if [ -f ${ALX_SKELETONS}/fluxbox/keys ]
592 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 # generate a fluxbox menu
600 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
601 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)
609 addconfig
610
611 # delete all progs
612 [ -d ${progsh_path} ] && rm -rf ${progsh_path}
613 install -d ${progsh_path}
614
615 # first generate session files
616 for i in ${all_ses_ids}
617 do
618 evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
619
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
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 # add other menuitems
689 for i in ${all_other_ids}
690 do
691 evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
692
693 # now echo config line for fluxbox-menu
694 # 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 # gen prog startup wrapper
705 generate_program_sh \
706 --name "${cfg_other_menuitems_name}" \
707 --exec "${cfg_other_menuitems_exec}" \
708 --param "${cfg_other_menuitems_param}" \
709 --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
710 "${workdir}"
711
712 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
713 addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
714 done
715
716 # 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
722 eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
723
724 # 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
750
751 # unset all variables
752 unset PLUGIN_MENUITEM_NAME
753 unset PLUGIN_MENUITEM_EXEC
754 unset PLUGIN_MENUITEM_PARAM
755 unset PLUGIN_MENUITEM_WORKDIR
756 unset PLUGIN_MENUITEM_ICON
757 done
758
759 # 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}
778 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
779 chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
780 chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
781 }