Magellan Linux

Contents of /alx-src/trunk/tinyalxconfig-ng/functions/config_sessions.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 484 - (show annotations) (download) (as text)
Sat Jun 7 17:10:04 2008 UTC (15 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 14638 byte(s)
-change OS name to 'tinyALX'

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