Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2035 - (show annotations) (download) (as text)
Wed May 11 09:11:02 2011 UTC (12 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 13066 byte(s)
-make use of the new addconfig() && clearconfig() functions
1 # $Id$
2 # configures ica-sessions on the host via mysql db settings
3
4 get_sessions_settings()
5 {
6 local x i all count
7
8 # all arrays:
9 # -> session1 session2 ... sessionN
10
11 # get settings from database
12 all=$(mysqldo "select filename from cfg_sessions where serial='${ALX_SERIAL}'")
13
14 # split'em up and put in an array (only if $all not zero)
15 declare -i i=0
16 if [ -n "${all}" ]
17 then
18 for x in ${all}
19 do
20 ALX_SESSIONS[${i}]=${x}
21 ((i++))
22 done
23 count=${i}
24 else
25 count=0
26 fi
27
28 # get settings from database
29 ALX_PROGRAMS=$(mysqldo "select name from cfg_other_menuitems where serial='${ALX_SERIAL}'")
30
31 export ALX_SESSIONS
32 export ALX_PROGRAMS
33 }
34
35 get_autostart_settings()
36 {
37 # get settings from database
38 ALX_AUTOSTART=$(mysqldo "select session from cfg_autostart where serial='${ALX_SERIAL}'")
39
40 export ALX_AUTOSTART
41 }
42
43 get_screensaver_settings()
44 {
45 ALX_SCRN_SAVER=$(mysqldo "select screensaver from cfg_screensaver where serial='${ALX_SERIAL}'")
46 ALX_SCRN_TIMEOUT=$(mysqldo "select timeout from cfg_screensaver where serial='${ALX_SERIAL}'")
47 ALX_SCRN_PASSWD=$(mysqldo "select password from cfg_screensaver where serial='${ALX_SERIAL}'")
48
49 export ALX_SCRN_SAVER
50 export ALX_SCRN_TIMEOUT
51 export ALX_SCRN_PASSWD
52 }
53
54 generate_ica_session_files()
55 {
56 local all_ids
57 local i
58 local x
59 local browser_address_num
60 local server
61 local ses_session
62 local ses_filename
63 local ses_username
64 local ses_domain
65 local ses_password
66 local ses_browseradrs
67 local ses_colors
68 local CONFIG
69
70 # get settings from database
71 all_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
72
73 for i in ${all_ids}
74 do
75 # get settings
76 ses_session=$(mysqldo "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
77 ses_filename=$(mysqldo "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
78 ses_username=$(mysqldo "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
79 ses_domain=$(mysqldo "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
80 ses_password=$(mysqldo "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
81 ses_browseradrs=$(mysqldo "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
82
83 # get the right colors
84 ses_colors=$(mysqldo "select depth from cfg_graphic where serial='${ALX_SERIAL}'")
85 # convert to ica session file values
86 case ${ses_colors} in
87 24) ses_colors="8";;
88 16) ses_colors="4";;
89 8) ses_colors="2";;
90 *) ses_colors="2";;
91 esac
92
93 # write session files
94 CONFIG=${ALX_ICA_SESSIONS}/${ses_filename}
95 clearconfig
96
97 addconfig '[WFClient]'
98 addconfig 'Version=2'
99 OLD_IFS="$IFS"
100 IFS=";"
101 declare -i x=0
102 for server in ${ses_browseradrs}
103 do
104 (( x++ ))
105 browser_address_num="${x}"
106 # support newer ica-clients:
107 # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !!
108 [[ ${x} -eq 1 ]] && browser_address_num=""
109 addconfig "TcpBrowserAddress${browser_address_num}=${server}"
110 done
111 IFS="${OLD_IFS}"
112 unset x
113 unset OLD_IFS
114
115 addconfig 'ScreenPercent=0'
116 addconfig '[ApplicationServers]'
117 addconfig "${ses_session}="
118 addconfig "[${ses_session}]"
119 addconfig "Address=${ses_session}"
120 addconfig "InitialProgram=#${ses_session}"
121 addconfig "DesiredColor=${ses_colors}"
122 addconfig 'TransportDriver=TCP/IP'
123 addconfig 'WinStationDriver=ICA 3.0'
124 addconfig "ClearPassword=${ses_password}"
125 addconfig "Username=${ses_username}"
126 addconfig "Domain=${ses_domain}"
127 addconfig 'UseFullScreen=Yes'
128 addconfig 'NoWindowManager=True'
129 done
130 }
131
132 # generates a sh file to start programs
133 generate_program_sh()
134 {
135 local dest
136 local name
137 local exec
138 local workdir
139 local CONFIG
140
141 # very basic getops
142 for i in $*
143 do
144 case $1 in
145 --name|-n) shift; name="$1" ;;
146 --exec|-x) shift; exec="$1" ;;
147 --dest|-d) shift; dest="$1" ;;
148 --workdir|-w) shift; workdir="$1" ;;
149 esac
150 shift
151 done
152
153 # abort if name, dest or exec not given
154 [ -z "${name}" ] && return 1
155 [ -z "${exec}" ] && return 1
156 [ -z "${dest}" ] && return 1
157
158 CONFIG=${dest}
159 addconfig "#!/bin/sh"
160 [ -n "${workdir}" ] && addconfig "cd ${workdir}"
161 addconfig "exec ${exec}"
162
163 chmod 0755 ${dest}
164 }
165
166 get_other_menuitems()
167 {
168 local x i progsh_path name exec icon workdir
169
170 # all arrays:
171 # -> session1 session2 ... sessionN
172
173 # get settings from database -> now stored in ALX_PROGRAMS
174
175 # abort if empty
176 [ -z "${ALX_PROGRAMS}" ] && return 0
177
178 progsh_path=${ALX_UNPRIV_HOME}/.alxprogs
179 [ -d ${progsh_path} ] && rm -rf ${progsh_path}
180 install -d ${progsh_path}
181
182 # gen menu items
183 for x in ${ALX_PROGRAMS}
184 do
185 # to be sure
186 unset name
187 unset exec
188 unset workdir
189 unset icon
190
191 name=$(mysqldo "select name from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
192 exec=$(mysqldo "select exec from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
193 workdir=$(mysqldo "select workdir from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
194 icon=$(mysqldo "select icon from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
195
196 # now echo config line for fluxbox-menu
197 # make it "configureable" :P
198 [ -n "${workdir}" ] && workdir="--workdir ${workdir}"
199 [ -n "${icon}" ] && icon="<${icon}>"
200
201 # gen prog startup wrapper
202 generate_program_sh \
203 --name "${name}" \
204 --exec "${exec}" \
205 --dest "${progsh_path}/${name}" \
206 "${workdir}"
207
208 echo "[exec] (${name}) {${progsh_path}/${name}} ${icon}"
209 done
210 }
211
212 # helper functions for generate all desktop icons
213 generate_icon()
214 {
215 local name
216 local icon
217 local command
218 local dest
219 local yres
220 local xres
221 local iwidth
222 local iheight
223 local deficon
224 local CONFIG
225
226 # very basic getops
227 for i in $*
228 do
229 case $1 in
230 --name|-n) shift; name="$1" ;;
231 --command|-c) shift; command="$1" ;;
232 --icon|-i) shift; icon="$1" ;;
233 --dest|-d) shift; dest="$1" ;;
234 --xres|-x) shift; xres="$1" ;;
235 --yres|-y) shift; yres="$1" ;;
236 --icon-width|-w) shift; iwidth="$1" ;;
237 --icon-height|-h) shift; iheight="$1" ;;
238 --default-icon) shift; deficon="$1" ;;
239 esac
240 shift
241 done
242
243 # some sanity checks :
244
245 # abort if name or command not given
246 [[ -z ${name} ]] && return 1
247 [[ -z ${command} ]] && return 1
248
249 # use some defaults for icon, dest, {x,y}res
250 [[ -z ${xres} ]] && xres=30
251 [[ -z ${yres} ]] && xres=30
252 [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.xtdesktop/${name}.lnk"
253 if [[ -z ${icon} ]] || [ ! -f ${icon} ]
254 then
255 # if no default icon is given use default.png
256 [[ -z ${deficon} ]] && deficon="default.png"
257 icon="${ALX_SESSIONS_ICONS}/${deficon}"
258 fi
259
260 CONFIG=${dest}
261 clearconfig
262
263 addconfig 'table Icon'
264 addconfig ' Type: Program'
265 addconfig " Caption: ${name}"
266 addconfig " Command: ${command}"
267 addconfig " Icon: ${icon}"
268 addconfig " X: ${xres}"
269 addconfig " Y: ${yres}"
270
271 # add these only if not zero
272 if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]]
273 then
274 addconfig " IconWidth: ${iwidth}"
275 addconfig " IconHeight: ${iheight}"
276 fi
277
278 addconfig 'end'
279 }
280
281 generate_all_desktop_icons()
282 {
283 local res
284 local xres
285 local yres
286 local icon_list
287 local x
288 local y
289 local item
290 local basename_item
291 local progsh_path
292
293 # get the resolution
294 res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
295
296 # split res to x & y
297 xres="$(echo ${res} | cut -dx -f1)"
298 yres="$(echo ${res} | cut -dx -f2)"
299
300 # top left edge of the icon is given in config file
301 # remove a little bit to simulate the bottom-right edge
302 xres="$(( ${xres} - 120 ))"
303 yres="$(( ${yres} - 80 ))"
304
305 # basic config
306 cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc
307
308 # clean desktop icon location
309 [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop
310 install -d ${ALX_UNPRIV_HOME}/.xtdesktop
311
312
313 # default settings
314 declare -i x=30
315 declare -i y=30
316
317 # first all ica sessions
318 local count=${#ALX_SESSIONS[*]}
319 for (( i=0; i < count; i++ ))
320 do
321 # filenames !
322 icon_list="${icon_list} ${ALX_SESSIONS[${i}]}"
323 done
324
325 for item in ${icon_list}
326 do
327 # abort if empty
328 [[ -z ${item} ]] && continue
329
330 # new line if x > xres
331 if [ ${x} -ge ${xres} ]
332 then
333 x=30
334 y=$((${y} + 80))
335 fi
336
337 # new row if y > yres
338 if [ ${y} -ge ${yres} ]
339 then
340 x=$((${x} + 120))
341 y=30
342
343 # re-check x
344 [ ${x} -ge ${xres} ] && x=30
345 fi
346
347 # ica icons
348 # get basename (.ica must be suffix)
349 basename_item="$(basename ${item} .ica)"
350 generate_icon \
351 --name "${basename_item}" \
352 --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/${item}" \
353 --icon "${ALX_SESSIONS_ICONS}/${basename_item}.png" \
354 --dest "${ALX_UNPRIV_HOME}/.xtdesktop/${basename_item}.lnk" \
355 --xres "${x}" \
356 --yres "${y}"
357
358 y=$((${y} + 80))
359 done
360
361
362 # generate program icons
363 icon_list="${ALX_PROGRAMS}"
364
365 progsh_path=${ALX_UNPRIV_HOME}/.alxprogs
366
367 for item in ${icon_list}
368 do
369 # abort if empty
370 [[ -z ${item} ]] && continue
371
372 # new line if x > xres
373 if [ ${x} -ge ${xres} ]
374 then
375 x=30
376 y=$((${y} + 80))
377 fi
378
379 # new row if y > yres
380 if [ ${y} -ge ${yres} ]
381 then
382 x=$((${x} + 120))
383 y=30
384
385 # re-check x
386 [ ${x} -ge ${xres} ] && x=30
387 fi
388
389 generate_icon \
390 --name "${item}" \
391 --command "${progsh_path}/${item}" \
392 --icon "${ALX_SESSIONS_ICONS}/${item}.png" \
393 --dest "${ALX_UNPRIV_HOME}/.xtdesktop/${item}.lnk" \
394 --xres "${x}" \
395 --yres "${y}" \
396 --default-icon "default_item.png"
397
398 y=$((${y} + 80))
399 done
400
401
402
403 # last but not least gen a icon with some sys informations
404 local sysinfo
405 local hostname
406 local osversion
407
408 osversion="$(< /etc/mageversion)"
409 hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'")
410 sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
411
412 # now get the right position:
413 # restore orig values of xres
414 xres="$(( ${xres} + 120 ))"
415 # default y pos (full yres -22 = cur yres + 58 !)
416 yres="$(( ${yres} + 58 ))"
417 # middle of the screen
418 # (no txt - length required, xtdesk manage that itself)
419 xres="$(( ${xres} / 2))"
420
421 generate_icon \
422 --name "${sysinfo}" \
423 --command "exit 0" \
424 --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
425 --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \
426 --xres "${xres}" \
427 --yres "${yres}" \
428 --icon-width "1" \
429 --icon-height "1"
430 }
431
432 config_sessions()
433 {
434 # generate ica session files
435 generate_ica_session_files
436
437 # first of all get the vars
438 get_sessions_settings
439 get_autostart_settings
440 get_screensaver_settings
441
442 local count=${#ALX_SESSIONS[*]}
443 local icon
444 local i
445 local CONFIG
446
447 # now setup fluxbox for user station
448
449 # create a fresh fluxbox directory
450 [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox
451 install -d ${ALX_UNPRIV_HOME}/.fluxbox
452
453 # now generate fluxbox config files
454
455 # fluxbox main config
456 cat ${ALX_SKELETONS}/fluxbox/init \
457 > ${ALX_UNPRIV_HOME}/.fluxbox/init
458
459 # fluxbox autostart
460 cat ${ALX_SKELETONS}/fluxbox/apps \
461 > ${ALX_UNPRIV_HOME}/.fluxbox/apps
462
463 CONFIG=${ALX_UNPRIV_HOME}/.fluxbox/apps
464 # add screensaver
465 if [[ ! -z ${ALX_SCRN_SAVER} ]] && [[ ! -z ${ALX_SCRN_TIMEOUT} ]]
466 then
467 local ALX_PASSWD_CMD
468
469 if [[ -z ${ALX_SCRN_PASSWD} ]] || [[ ${ALX_SCRN_PASSWD} = NULL ]]
470 then
471 ALX_PASSWD_CMD="-nolock"
472 else
473 ALX_PASSWD_CMD="-cpasswd $(cryptpw -m des ${ALX_SCRN_PASSWD})"
474 fi
475
476 addconfig "[startup] {nohup xautolock -time ${ALX_SCRN_TIMEOUT} -locker 'xlock -mode ${ALX_SCRN_SAVER} ${ALX_PASSWD_CMD}' > /dev/null &}"
477 fi
478
479 # add autostart session
480 if [[ ! -z ${ALX_AUTOSTART} ]]
481 then
482 addconfig "[startup] {nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/${ALX_AUTOSTART} &}"
483 fi
484
485 # fluxbox hotkeys
486 cat ${ALX_SKELETONS}/fluxbox/keys > ${ALX_UNPRIV_HOME}/.fluxbox/keys
487
488 # generate a fluxbox menu
489 CONFIG=${ALX_UNPRIV_HOME}/.fluxbox/menu
490 clearconfig
491
492 # fluxbox menu header
493 cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
494
495 # now fix it with proper messages :P
496 local ver="$(< /etc/mageversion)"
497 sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
498
499 # add a newline (maybe there is no crlf in the header)
500 addconfig
501
502 # fluxbox menu sessions
503 for (( i=0; i < count; i++ ))
504 do
505 if [[ ! -z ${ALX_SESSIONS[${i}]} ]]
506 then
507 addconfig "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}"
508 fi
509 done
510
511 # add other menuitems
512 addconfig $(get_other_menuitems)
513
514 # fluxbox menu footer
515 cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
516
517 # add a newline (maybe there is no crlf in the footer)
518 addconfig
519
520 # now it's a good time to generate *all* icons :)
521 generate_all_desktop_icons
522
523 # set correct permissions
524 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
525 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
526 chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
527 chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop
528 chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc
529
530 # unset vars
531 unset ALX_SESSIONS
532 unset ALX_PROGRAMS
533 unset ALX_SCRN_SAVER
534 unset ALX_SCRN_TIMEOUT
535 unset ALX_SCRN_PASSWD
536 }