Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 317 - (show annotations) (download) (as text)
Thu Sep 1 18:27:44 2005 UTC (18 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 13602 byte(s)
- added option --default-icon to generate_icon()
- now creating also program desktop icons
- simplify creation of menuitem and desktop icons for program with help of generate_program_sh()
- fetching list of program now earlier to minimize the overhead of mysql calls

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