Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7977 - (show annotations) (download) (as text)
Thu Dec 10 09:09:40 2015 UTC (8 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 20334 byte(s)
-never show window decorations with the ica-client
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 # never show decorations with the ica client
555 addconfig '[app] (Wfica)'
556 addconfig ' [Deco] {NONE}'
557 addconfig '[end]'
558 # add icon utility
559 [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}'
560 # add numlock utility
561 [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}'
562
563 # add screensaver
564 if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
565 then
566 if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
567 then
568 screensaver_passwd_cmd="-nolock"
569 else
570 screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
571 fi
572
573 addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
574 fi
575
576 # add plugins autostart
577 for i in ${all_plugin_ids}
578 do
579 evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
580 if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
581 then
582 eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh autostart)
583
584 if [[ ${PLUGIN_AUTOSTART} = 1 ]]
585 then
586 addconfig "[startup] {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME}) &}"
587 fi
588 # unset all variables
589 unset PLUGIN_AUTOSTART
590 unset PLUGIN_MENUITEM_NAME
591 fi
592 done
593
594 # fluxbox hotkeys
595 if [ -f ${ALX_SKELETONS}/fluxbox/keys ]
596 then
597 fbkeys="${ALX_SKELETONS}/fluxbox/keys"
598 else
599 fbkeys="/usr/share/fluxbox/keys"
600 fi
601 cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys
602
603 # generate a fluxbox menu
604 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
605 clearconfig
606
607 # fluxbox menu header
608 cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
609 # now fix it with proper messages :P
610 local ver="$(< /etc/mageversion)"
611 sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
612 # add a newline (maybe there is no crlf in the header)
613 addconfig
614
615 # delete all progs
616 [ -d ${progsh_path} ] && rm -rf ${progsh_path}
617 install -d ${progsh_path}
618
619 # first generate session files
620 for i in ${all_ses_ids}
621 do
622 evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
623
624 # generate STOREFRONT/PNABROWSE compatible session
625 case "${cfg_sessions_browseradrs}" in
626 "http://"*|"https://"* )
627 # run storefront_enumerate on startup to get all available sessions
628 storefront_enumerate=1
629 storefront_store="$(sanitize_store ${cfg_sessions_browseradrs})"
630 store_found=0
631 for _store in ${all_storefront_stores}
632 do
633 if [[ ${storefront_store} = ${_store} ]]
634 then
635 store_found=1
636 fi
637 done
638 if [[ ${store_found} = 0 ]]
639 then
640 all_storefront_stores="${all_storefront_stores} ${storefront_store}"
641 generate_storefront_sh \
642 --method "enumerate" \
643 --filename "store-enumerate_${storefront_store}_.sh" \
644 --username "${cfg_sessions_username}" \
645 --password "${cfg_sessions_password}" \
646 --domain "${cfg_sessions_domain}" \
647 --server "${cfg_sessions_browseradrs}"
648 fi
649
650 # generate STOREFRONT/PNABROWSE compatible session
651 generate_storefront_sh \
652 --method "launch" \
653 --session "${cfg_sessions_session}" \
654 --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
655 --username "${cfg_sessions_username}" \
656 --password "${cfg_sessions_password}" \
657 --domain "${cfg_sessions_domain}" \
658 --server "${cfg_sessions_browseradrs}"
659 ;;
660 *)
661 # generate ICA compatible session
662 generate_ica_session_file \
663 --session "${cfg_sessions_session}" \
664 --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
665 --username "${cfg_sessions_username}" \
666 --password "${cfg_sessions_password}" \
667 --domain "${cfg_sessions_domain}" \
668 --server "${cfg_sessions_browseradrs}" \
669 --colordepth "${cfg_graphic_depth}"
670 # gen prog startup wrapper
671 generate_program_sh \
672 --name "$(fix_whitespaces ${cfg_sessions_filename})" \
673 --exec "wfica-launcher" \
674 --param "${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})" \
675 --dest "${progsh_path}/$(fix_whitespaces ${cfg_sessions_filename})" \
676 "${workdir}"
677 ;;
678 esac
679
680 # fluxbox menusession
681 addconfig "[exec] (${cfg_sessions_session}) {${progsh_path}/$(fix_whitespaces ${cfg_sessions_filename})}"
682 done
683 if [[ ${storefront_enumerate} = 1 ]]
684 then
685 for _store in ${all_storefront_stores}
686 do
687 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
688 addconfig "[startup] {${progsh_path}/store-enumerate_${_store}_.sh &}"
689 done
690 fi
691
692 # add other menuitems
693 for i in ${all_other_ids}
694 do
695 evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
696
697 # now echo config line for fluxbox-menu
698 # make it "configureable" :p
699 if [[ -n ${cfg_other_menuitems_workdir} ]]
700 then
701 workdir="--workdir ${cfg_other_menuitems_workdir}"
702 fi
703 if [[ -n ${cfg_other_menuitems_icon} ]]
704 then
705 cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
706 fi
707
708 # gen prog startup wrapper
709 generate_program_sh \
710 --name "${cfg_other_menuitems_name}" \
711 --exec "${cfg_other_menuitems_exec}" \
712 --param "${cfg_other_menuitems_param}" \
713 --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
714 "${workdir}"
715
716 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
717 addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
718 done
719
720 # add plugins
721 for i in ${all_plugin_ids}
722 do
723 evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
724 if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
725 then
726 eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
727
728 # abort if name or exec is empty
729 [[ -z ${PLUGIN_MENUITEM_NAME} ]] && continue
730 [[ -z ${PLUGIN_MENUITEM_EXEC} ]] && continue
731
732 # now echo config line for fluxbox-menu
733 # make it "configureable" :p
734 if [[ -n ${PLUGIN_MENUITEM_WORKDIR} ]]
735 then
736 workdir="--workdir ${PLUGIN_MENUITEM_WORKDIR}"
737 fi
738 if [[ -n ${PLUGIN_MENUITEM_ICON} ]]
739 then
740 PLUGIN_MENUITEM_ICON="<${PLUGIN_MENUITEM_ICON}>"
741 fi
742
743 # gen prog startup wrapper
744 generate_program_sh \
745 --name "${PLUGIN_MENUITEM_NAME}" \
746 --exec "${PLUGIN_MENUITEM_EXEC}" \
747 --param "${PLUGIN_MENUITEM_PARAM}" \
748 --dest "${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})" \
749 "${workdir}"
750
751 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
752 addconfig "[exec] (${PLUGIN_MENUITEM_NAME}) {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})} ${PLUGIN_MENUITEM_ICON}"
753 fi
754
755 # unset all variables
756 unset PLUGIN_MENUITEM_NAME
757 unset PLUGIN_MENUITEM_EXEC
758 unset PLUGIN_MENUITEM_PARAM
759 unset PLUGIN_MENUITEM_WORKDIR
760 unset PLUGIN_MENUITEM_ICON
761 done
762
763 # add autostart session
764 if [[ ! -z ${cfg_autostart_session} ]]
765 then
766 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
767 # sleep one second to wait until busybox is fully initialized and the screen is really centered
768 addconfig "[startup] {sleep 1 && ${progsh_path}/$(fix_whitespaces ${cfg_autostart_session}) &}"
769 fi
770
771 # fluxbox menu footer
772 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
773 cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${CONFIG}
774 # add a newline (maybe there is no crlf in the footer)
775 addconfig
776
777 # now it's a good time to generate *all* icons :)
778 generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}" "${all_plugin_ids}"
779
780 # fix permissions
781 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
782 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
783 chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
784 chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
785 }