Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3504 - (hide annotations) (download) (as text)
Thu Apr 19 13:27:58 2012 UTC (12 years ago) by niro
File MIME type: application/x-sh
File size: 16461 byte(s)
-export PLUGIN_MENUITEM_NAME in autostart function which is used as name for the generated sh script
1 niro 2001 # $Id$
2 niro 236 # configures ica-sessions on the host via mysql db settings
3    
4 niro 2161 fix_whitespaces()
5     {
6     local var="$@"
7     echo "${var//\ /_}"
8     }
9    
10 niro 2149 # helper function to create citrix session files
11     generate_ica_session_file()
12 niro 236 {
13 niro 246 local i
14 niro 2149 local num
15 niro 246 local server
16     local ses_session
17     local ses_filename
18     local ses_username
19     local ses_domain
20     local ses_password
21     local ses_browseradrs
22 niro 2435 local ses_colors
23 niro 2035 local CONFIG
24 niro 246
25 niro 2149 # very basic getops
26     for i in $*
27 niro 246 do
28 niro 2149 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 niro 2161 --server) shift; ses_browseradrs="$1" ;;
35 niro 2435 --colordepth) shift; ses_colors="$1" ;;
36 niro 2149 esac
37     shift
38     done
39 niro 246
40 niro 2149 # abort if session, filename or server not given
41 niro 2161 [[ -z ${ses_session} ]] && return 1
42     [[ -z ${ses_filename} ]] && return 1
43     [[ -z ${ses_browseradrs} ]] && return 1
44 niro 272
45 niro 2149 # write session files
46     CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}"
47     clearconfig
48 niro 2035
49 niro 2149 addconfig '[WFClient]'
50     addconfig 'Version=2'
51 niro 1654
52 niro 2149 # use ';' as ifs
53     declare -i i=0
54     for server in ${ses_browseradrs//;/ }
55     do
56     (( i++ ))
57     num="${i}"
58     # support newer ica-clients:
59     # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !!
60     [[ ${i} -eq 1 ]] && num=""
61     addconfig "TcpBrowserAddress${num}=${server}"
62 niro 246 done
63 niro 2149
64     addconfig 'ScreenPercent=0'
65     addconfig '[ApplicationServers]'
66     addconfig "${ses_session}="
67     addconfig "[${ses_session}]"
68     addconfig "Address=${ses_session}"
69     addconfig "InitialProgram=#${ses_session}"
70 niro 2435
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 niro 2149 addconfig 'TransportDriver=TCP/IP'
80     addconfig 'WinStationDriver=ICA 3.0'
81 niro 2611 addconfig "ClearPassword=${ses_password}"
82 niro 2149 addconfig "Username=${ses_username}"
83     addconfig "Domain=${ses_domain}"
84     addconfig 'UseFullScreen=Yes'
85     addconfig 'NoWindowManager=True'
86 niro 246 }
87    
88 niro 317 # generates a sh file to start programs
89     generate_program_sh()
90     {
91     local dest
92     local name
93     local exec
94 niro 2161 local param
95 niro 317 local workdir
96 niro 2035 local CONFIG
97 niro 317
98     # very basic getops
99     for i in $*
100     do
101     case $1 in
102     --name|-n) shift; name="$1" ;;
103     --exec|-x) shift; exec="$1" ;;
104 niro 2161 --param|-p) shift; param="$1" ;;
105 niro 317 --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 niro 2149 [[ -z ${name} ]] && return 1
113     [[ -z ${exec} ]] && return 1
114     [[ -z ${dest} ]] && return 1
115 niro 317
116 niro 2149 CONFIG="${dest}"
117 niro 2035 addconfig "#!/bin/sh"
118     [ -n "${workdir}" ] && addconfig "cd ${workdir}"
119 niro 2161 addconfig "exec ${exec} ${param}"
120 niro 317
121 niro 2149 chmod 0755 "${dest}"
122 niro 317 }
123    
124 niro 304 # helper functions for generate all desktop icons
125     generate_icon()
126     {
127     local name
128     local icon
129     local command
130     local dest
131     local yres
132     local xres
133     local iwidth
134     local iheight
135 niro 317 local deficon
136 niro 2035 local CONFIG
137 niro 2401 local utility
138 niro 304
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 niro 317 --default-icon) shift; deficon="$1" ;;
152 niro 304 esac
153     shift
154     done
155    
156 niro 2149 # some sanity checks:
157 niro 2401
158 niro 304 # abort if name or command not given
159 niro 2035 [[ -z ${name} ]] && return 1
160     [[ -z ${command} ]] && return 1
161 niro 304
162 niro 2454 [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk"
163 niro 2401
164 niro 304 # use some defaults for icon, dest, {x,y}res
165 niro 2495 [[ -z ${xres} ]] && xres=50
166     [[ -z ${yres} ]] && xres=50
167 niro 2035 if [[ -z ${icon} ]] || [ ! -f ${icon} ]
168 niro 304 then
169 niro 317 # if no default icon is given use default.png
170 niro 2035 [[ -z ${deficon} ]] && deficon="default.png"
171 niro 317 icon="${ALX_SESSIONS_ICONS}/${deficon}"
172 niro 304 fi
173    
174 niro 2161 CONFIG="${dest}"
175 niro 2035 clearconfig
176 niro 304
177 niro 2035 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 niro 304 # add these only if not zero
185 niro 2035 if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]]
186 niro 304 then
187 niro 2454 addconfig " Width: ${iwidth}"
188     addconfig " Height: ${iheight}"
189 niro 304 fi
190    
191 niro 2035 addconfig 'end'
192 niro 304 }
193    
194     generate_all_desktop_icons()
195     {
196 niro 2149 local session_list="$1"
197     local other_menuitem_list="$2"
198 niro 2747 local plugin_list="$3"
199 niro 304 local res
200     local xres
201     local yres
202     local x
203     local y
204 niro 2161 local i
205 niro 2149 local name
206 niro 317 local progsh_path
207 niro 2401 local utility
208     local dest
209     local rc
210 niro 304
211 niro 2454 dest="${ALX_UNPRIV_HOME}/.idesktop"
212     rc="${ALX_UNPRIV_HOME}/.ideskrc"
213 niro 2401
214 niro 2149 # progsh path
215 niro 2161 progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
216 niro 2149
217 niro 304 # get the resolution
218 niro 342 res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
219 niro 304
220     # split res to x & y
221 niro 2149 xres="${res%x*}"
222 niro 2166 yres="${res#*x}"
223 niro 304
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 niro 2401 [ -d ${dest} ] && rm -rf ${dest}
231     [ -f ${rc} ] && rm -f ${rc}
232     install -d ${dest}
233 niro 304
234     # default settings
235 niro 2495 declare -i x=50
236     declare -i y=50
237 niro 304
238 niro 2149 # ica icons
239 niro 2161 for i in ${session_list}
240 niro 304 do
241     # abort if empty
242 niro 2161 [[ -z ${i} ]] && continue
243 niro 304
244 niro 2161 # get database information
245     evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
246    
247 niro 304 # new line if x > xres
248 niro 2035 if [ ${x} -ge ${xres} ]
249     then
250 niro 2495 x=50
251 niro 304 y=$((${y} + 80))
252     fi
253    
254     # new row if y > yres
255 niro 2035 if [ ${y} -ge ${yres} ]
256     then
257 niro 304 x=$((${x} + 120))
258 niro 2495 y=50
259 niro 304
260     # re-check x
261 niro 2495 [ ${x} -ge ${xres} ] && x=50
262 niro 304 fi
263    
264     generate_icon \
265 niro 2166 --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 niro 2401 --dest "${dest}/$(fix_whitespaces ${cfg_sessions_session}).lnk" \
269 niro 304 --xres "${x}" \
270     --yres "${y}"
271    
272     y=$((${y} + 80))
273     done
274    
275 niro 2161 for i in ${other_menuitem_list}
276 niro 317 do
277     # abort if empty
278 niro 2161 [[ -z ${i} ]] && continue
279 niro 317
280 niro 2161 # get database information
281     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
282    
283 niro 317 # new line if x > xres
284 niro 2035 if [ ${x} -ge ${xres} ]
285     then
286 niro 2495 x=50
287 niro 317 y=$((${y} + 80))
288     fi
289    
290     # new row if y > yres
291 niro 2035 if [ ${y} -ge ${yres} ]
292     then
293 niro 317 x=$((${x} + 120))
294 niro 2495 y=50
295 niro 317
296     # re-check x
297 niro 2495 [ ${x} -ge ${xres} ] && x=50
298 niro 317 fi
299    
300     generate_icon \
301 niro 2161 --name "${cfg_other_menuitems_name}" \
302 niro 2381 --command "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
303 niro 2161 --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_other_menuitems_name}).png" \
304 niro 2401 --dest "${dest}/$(fix_whitespaces ${cfg_other_menuitems_name}).lnk" \
305 niro 317 --xres "${x}" \
306     --yres "${y}" \
307     --default-icon "default_item.png"
308    
309     y=$((${y} + 80))
310     done
311 niro 2747
312     for i in ${plugin_list}
313     do
314     # abort if empty
315     [[ -z ${i} ]] && continue
316 niro 3490
317 niro 2747 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 niro 317
322 niro 2747 # 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 niro 2469 # 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 niro 2495 x=50
370 niro 2469 y=$((${y} + 80))
371     fi
372    
373     # new row if y > yres
374     if [ ${y} -ge ${yres} ]
375     then
376     x=$((${x} + 120))
377 niro 2495 y=50
378 niro 2469
379     # re-check x
380 niro 2495 [ ${x} -ge ${xres} ] && x=50
381 niro 2469 fi
382    
383     case ${i} in
384 niro 2479 shutdown) name="Herunterfahren" ;;
385     reboot) name="Neustarten" ;;
386 niro 2469 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 niro 2565 --yres "${y}" \
395     --icon-width "40" \
396     --icon-height "40"
397 niro 2469
398     y=$((${y} + 80))
399     done
400    
401 niro 304 # 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 niro 342 hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'")
408 niro 304 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 niro 2401 --dest "${dest}/sysinfo.lnk" \
424 niro 304 --xres "${xres}" \
425     --yres "${yres}" \
426     --icon-width "1" \
427     --icon-height "1"
428     }
429    
430 niro 236 config_sessions()
431     {
432 niro 272 local i
433 niro 2149 local all_ses_ids
434     local all_other_ids
435 niro 2035 local CONFIG
436 niro 2149 local screensaver_passwd_cmd
437 niro 2469 local fbinit
438     local fbkeys
439 niro 3503 local progsh_path
440 niro 236
441 niro 3503 progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
442    
443 niro 2149 # get all session ids from database
444     all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
445 niro 2747 # get all other_menuitem ids from database
446 niro 2149 all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'")
447 niro 2747 # get all plugin ids from database
448     all_plugin_ids=$(mysqldo "select id from cfg_plugins where serial='${ALX_SERIAL}'")
449 niro 2149
450     # get screensaver settings
451     evaluate_table cfg_screensaver
452     # get autostart settings
453     evaluate_table cfg_autostart
454 niro 2435 # get current color depth
455     evaluate_table cfg_graphic
456 niro 2149
457 niro 236 # now setup fluxbox for user station
458    
459     # create a fresh fluxbox directory
460     [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox
461     install -d ${ALX_UNPRIV_HOME}/.fluxbox
462    
463     # now generate fluxbox config files
464    
465     # fluxbox main config
466 niro 2469 if [ -f ${ALX_SKELETONS}/fluxbox/init ]
467     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 niro 236
474     # fluxbox autostart
475 niro 2411 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
476 niro 2454 # 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 niro 2411 # add icon utility
484 niro 2454 [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}'
485 niro 2411 # add numlock utility
486 niro 2454 [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}'
487 niro 236
488 niro 338 # add screensaver
489 niro 2149 if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
490 niro 338 then
491 niro 2149 if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
492 niro 338 then
493 niro 2149 screensaver_passwd_cmd="-nolock"
494 niro 338 else
495 niro 2149 screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
496 niro 338 fi
497    
498 niro 2149 addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
499 niro 338 fi
500    
501 niro 3503 # 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 niro 3504 # unset all variables
514     unset PLUGIN_AUTOSTART
515     unset PLUGIN_MENUITEM_NAME
516 niro 3503 fi
517     done
518    
519 niro 246 # add autostart session
520 niro 2149 if [[ ! -z ${cfg_autostart_session} ]]
521 niro 246 then
522 niro 2371 # sleep one second to wait until busybox is fully initialized and the screen is really centered
523     addconfig "[startup] {sleep 1 && nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}"
524 niro 246 fi
525    
526 niro 236 # fluxbox hotkeys
527 niro 2469 if [ -f ${ALX_SKELETONS}/fluxbox/keys ]
528     then
529     fbkeys="${ALX_SKELETONS}/fluxbox/keys"
530     else
531     fbkeys="/usr/share/fluxbox/keys"
532     fi
533     cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys
534 niro 236
535 niro 2035 # generate a fluxbox menu
536 niro 2161 CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
537 niro 2035 clearconfig
538    
539 niro 236 # fluxbox menu header
540 niro 2035 cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
541 niro 291 # now fix it with proper messages :P
542     local ver="$(< /etc/mageversion)"
543 niro 2035 sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
544 niro 239 # add a newline (maybe there is no crlf in the header)
545 niro 2035 addconfig
546 niro 239
547 niro 2149 # first generate session files
548     for i in ${all_ses_ids}
549 niro 236 do
550 niro 2149 evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
551     generate_ica_session_file \
552     --session "${cfg_sessions_session}" \
553 niro 2161 --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
554 niro 2149 --username "${cfg_sessions_username}" \
555     --password "${cfg_sessions_password}" \
556     --domain "${cfg_sessions_domain}" \
557 niro 2435 --server "${cfg_sessions_browseradrs}" \
558     --colordepth "${cfg_graphic_depth}"
559 niro 2149
560     # fluxbox menusession
561 niro 2161 addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}"
562 niro 2149 done
563    
564     # delete all progs
565     [ -d ${progsh_path} ] && rm -rf ${progsh_path}
566     install -d ${progsh_path}
567    
568     # add other menuitems
569     for i in ${all_other_ids}
570     do
571     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
572    
573     # now echo config line for fluxbox-menu
574     # make it "configureable" :p
575     if [[ -n ${cfg_other_menuitems_workdir} ]]
576 niro 2035 then
577 niro 2149 workdir="--workdir ${cfg_other_menuitems_workdir}"
578 niro 2035 fi
579 niro 2149 if [[ -n ${cfg_other_menuitems_icon} ]]
580     then
581     cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
582     fi
583    
584     # gen prog startup wrapper
585     generate_program_sh \
586     --name "${cfg_other_menuitems_name}" \
587     --exec "${cfg_other_menuitems_exec}" \
588 niro 2161 --param "${cfg_other_menuitems_param}" \
589     --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
590     "${workdir}"
591 niro 2149
592 niro 2161 addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
593 niro 236 done
594    
595 niro 2747 # add plugins
596     for i in ${all_plugin_ids}
597     do
598     evaluate_table cfg_plugins "where serial='${ALX_SERIAL}' and id='${i}'"
599     if [[ -x ${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh ]]
600     then
601     eval $(${ALX_PLUGINS}/${cfg_plugins_plugin}/plugin.sh menuitem)
602    
603     # abort if name or exec is empty
604     [[ -z ${PLUGIN_MENUITEM_NAME} ]] && continue
605     [[ -z ${PLUGIN_MENUITEM_EXEC} ]] && continue
606    
607     # now echo config line for fluxbox-menu
608     # make it "configureable" :p
609     if [[ -n ${PLUGIN_MENUITEM_WORKDIR} ]]
610     then
611     workdir="--workdir ${PLUGIN_MENUITEM_WORKDIR}"
612     fi
613     if [[ -n ${PLUGIN_MENUITEM_ICON} ]]
614     then
615     PLUGIN_MENUITEM_ICON="<${PLUGIN_MENUITEM_ICON}>"
616     fi
617    
618     # gen prog startup wrapper
619     generate_program_sh \
620     --name "${PLUGIN_MENUITEM_NAME}" \
621     --exec "${PLUGIN_MENUITEM_EXEC}" \
622 niro 3455 --param "${PLUGIN_MENUITEM_PARAM}" \
623 niro 2747 --dest "${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})" \
624     "${workdir}"
625    
626     addconfig "[exec] (${PLUGIN_MENUITEM_NAME}) {${progsh_path}/$(fix_whitespaces ${PLUGIN_MENUITEM_NAME})} ${PLUGIN_MENUITEM_ICON}"
627     fi
628    
629     # unset all variables
630     unset PLUGIN_MENUITEM_NAME
631     unset PLUGIN_MENUITEM_EXEC
632     unset PLUGIN_MENUITEM_PARAM
633     unset PLUGIN_MENUITEM_WORKDIR
634     unset PLUGIN_MENUITEM_ICON
635     done
636    
637 niro 236 # fluxbox menu footer
638 niro 2035 cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
639 niro 239 # add a newline (maybe there is no crlf in the footer)
640 niro 2035 addconfig
641 niro 236
642 niro 304 # now it's a good time to generate *all* icons :)
643 niro 2747 generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}" "${all_plugin_ids}"
644 niro 236
645 niro 2149 # fix permissions
646 niro 236 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
647     chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
648     chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
649 niro 2454 chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
650 niro 236 }