Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

alx-src/trunk/alxconfig-ng/functions/config_sessions.sh revision 239 by niro, Tue Apr 12 20:46:52 2005 UTC alx-src/branches/alxconf-060/functions/config_sessions.sh revision 2454 by niro, Mon Jun 27 12:47:25 2011 UTC
# Line 1  Line 1 
1  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.3 2005-04-12 20:45:55 niro Exp $  # $Id$
2  # configures ica-sessions on the host via mysql db settings  # configures ica-sessions on the host via mysql db settings
3    
4  get_sessions_settings()  fix_whitespaces()
5  {  {
6   local x i all count   local var="$@"
7     echo "${var//\ /_}"
8    }
9    
10    # helper function to create citrix session files
11    generate_ica_session_file()
12    {
13     local i
14     local num
15     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     local ses_colors
23     local CONFIG
24    
25     # very basic getops
26     for i in $*
27     do
28     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     --server) shift; ses_browseradrs="$1" ;;
35     --colordepth) shift; ses_colors="$1" ;;
36             esac
37     shift
38     done
39    
40   #all arrays:   # abort if session, filename or server not given
41   # ->  session1 session2 ... sessionN   [[ -z ${ses_session} ]] && return 1
42     [[ -z ${ses_filename} ]] && return 1
43     [[ -z ${ses_browseradrs} ]] && return 1
44    
45     # write session files
46     CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}"
47     clearconfig
48    
49   #get settings from database   addconfig '[WFClient]'
50   all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   addconfig 'Version=2'
  "select session from cfg_sessions where serial='${ALX_SERIAL}'")  
51    
52   #split'em up and put in an array (only if $all not zero)   # use ';' as ifs
53   declare -i i=0   declare -i i=0
54   if [ -n "${all}" ]   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     done
63    
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    
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     addconfig 'TransportDriver=TCP/IP'
80     addconfig 'WinStationDriver=ICA 3.0'
81     addconfig "ClearPassword=${ses__password}"
82     addconfig "Username=${ses_username}"
83     addconfig "Domain=${ses_domain}"
84     addconfig 'UseFullScreen=Yes'
85     addconfig 'NoWindowManager=True'
86    }
87    
88    # generates a sh file to start programs
89    generate_program_sh()
90    {
91     local dest
92     local name
93     local exec
94     local param
95     local workdir
96     local CONFIG
97    
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     --param|-p) shift; param="$1" ;;
105     --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     [[ -z ${name} ]] && return 1
113     [[ -z ${exec} ]] && return 1
114     [[ -z ${dest} ]] && return 1
115    
116     CONFIG="${dest}"
117     addconfig "#!/bin/sh"
118     [ -n "${workdir}" ] && addconfig "cd ${workdir}"
119     addconfig "exec ${exec} ${param}"
120    
121     chmod 0755 "${dest}"
122    }
123    
124    # 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     local deficon
136     local CONFIG
137     local utility
138    
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     --default-icon) shift; deficon="$1" ;;
152             esac
153     shift
154     done
155    
156     # some sanity checks:
157    
158     # abort if name or command not given
159     [[ -z ${name} ]] && return 1
160     [[ -z ${command} ]] && return 1
161    
162     [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk"
163    
164     # use some defaults for icon, dest, {x,y}res
165     [[ -z ${xres} ]] && xres=30
166     [[ -z ${yres} ]] && xres=30
167     if [[ -z ${icon} ]] || [ ! -f ${icon} ]
168     then
169     # if no default icon is given use default.png
170     [[ -z ${deficon} ]] && deficon="default.png"
171     icon="${ALX_SESSIONS_ICONS}/${deficon}"
172     fi
173    
174     CONFIG="${dest}"
175     clearconfig
176    
177     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     # add these only if not zero
185     if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]]
186   then   then
187   for x in ${all}   addconfig "  Width: ${iwidth}"
188   do   addconfig "  Height: ${iheight}"
  ALX_SESSIONS[${i}]=${x}  
  ((i++))  
  done  
  count=${i}  
  else  
  count=0  
189   fi   fi
190    
191   export ALX_SESSIONS   addconfig 'end'
192  }  }
193    
194  config_sessions()  generate_all_desktop_icons()
195  {  {
196   #first of all get the vars   local session_list="$1"
197   get_sessions_settings   local other_menuitem_list="$2"
198     local res
199     local xres
200     local yres
201     local x
202     local y
203     local i
204     local name
205     local progsh_path
206     local utility
207     local dest
208     local rc
209    
210     dest="${ALX_UNPRIV_HOME}/.idesktop"
211     rc="${ALX_UNPRIV_HOME}/.ideskrc"
212    
213     # progsh path
214     progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
215    
216     # get the resolution
217     res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
218    
219     # split res to x & y
220     xres="${res%x*}"
221     yres="${res#*x}"
222    
223     # top left edge of the icon is given in config file
224     # remove a little bit to simulate the bottom-right edge
225     xres="$(( ${xres} - 120 ))"
226     yres="$(( ${yres} - 80 ))"
227    
228     # clean desktop icon location
229     [ -d ${dest} ] && rm -rf ${dest}
230     [ -f ${rc} ] && rm -f ${rc}
231     install -d ${dest}
232    
233     # default settings
234     declare -i x=30
235     declare -i y=30
236    
237   local count=${#ALX_SESSIONS[*]}   # ica icons
238   local icon   for i in ${session_list}
239     do
240     # abort if empty
241     [[ -z ${i} ]] && continue
242    
243   # DEBUG   # get database information
244   declare -i i=0   evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
245   echo count=${count}  
246   echo "Number of new sessions: ${count}"   # new line if x > xres
247   for ((i=0; i < count; i++))   if [ ${x} -ge ${xres} ]
248     then
249     x=30
250     y=$((${y} + 80))
251     fi
252    
253     # new row if y > yres
254     if [ ${y} -ge ${yres} ]
255     then
256     x=$((${x} + 120))
257     y=30
258    
259     # re-check x
260     [ ${x} -ge ${xres} ] && x=30
261     fi
262    
263     generate_icon \
264     --name "${cfg_sessions_session}" \
265     --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})" \
266     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_sessions_session}).png" \
267     --dest "${dest}/$(fix_whitespaces ${cfg_sessions_session}).lnk" \
268     --xres "${x}" \
269     --yres "${y}"
270    
271     y=$((${y} + 80))
272     done
273    
274     for i in ${other_menuitem_list}
275   do   do
276   echo "${i} - ${ALX_SESSIONS[${i}]}"   # abort if empty
277     [[ -z ${i} ]] && continue
278    
279     # get database information
280     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
281    
282     # new line if x > xres
283     if [ ${x} -ge ${xres} ]
284     then
285     x=30
286     y=$((${y} + 80))
287     fi
288    
289     # new row if y > yres
290     if [ ${y} -ge ${yres} ]
291     then
292     x=$((${x} + 120))
293     y=30
294    
295     # re-check x
296     [ ${x} -ge ${xres} ] && x=30
297     fi
298    
299     generate_icon \
300     --name "${cfg_other_menuitems_name}" \
301     --command "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
302     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_other_menuitems_name}).png" \
303     --dest "${dest}/$(fix_whitespaces ${cfg_other_menuitems_name}).lnk" \
304     --xres "${x}" \
305     --yres "${y}" \
306     --default-icon "default_item.png"
307    
308     y=$((${y} + 80))
309   done   done
310    
311     # last but not least gen a icon with some sys informations
312     local sysinfo
313     local hostname
314     local osversion
315    
316     osversion="$(< /etc/mageversion)"
317     hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'")
318     sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
319    
320     # now get the right position:
321     # restore orig values of xres
322     xres="$(( ${xres} + 120 ))"
323     # default y pos (full yres -22 = cur yres + 58 !)
324     yres="$(( ${yres} + 58 ))"
325     # middle of the screen
326     # (no txt - length required, xtdesk manage that itself)
327     xres="$(( ${xres} / 2))"
328    
329     generate_icon \
330     --name "${sysinfo}" \
331     --command "exit 0" \
332     --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
333     --dest "${dest}/sysinfo.lnk" \
334     --xres "${xres}" \
335     --yres "${yres}" \
336     --icon-width "1" \
337     --icon-height "1"
338    }
339    
340    config_sessions()
341    {
342     local i
343     local all_ses_ids
344     local all_other_ids
345     local CONFIG
346     local screensaver_passwd_cmd
347    
348     # get all session ids from database
349     all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
350     # get all other_menutiem ids from database
351     all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'")
352    
353     # get screensaver settings
354     evaluate_table cfg_screensaver
355     # get autostart settings
356     evaluate_table cfg_autostart
357     # get current color depth
358     evaluate_table cfg_graphic
359    
360   # now setup fluxbox for user station   # now setup fluxbox for user station
361    
362   # create a fresh fluxbox directory   # create a fresh fluxbox directory
# Line 55  config_sessions() Line 366  config_sessions()
366   # now generate fluxbox config files   # now generate fluxbox config files
367    
368   # fluxbox main config   # fluxbox main config
369   cat ${ALX_SKELETONS}/fluxbox/init \   cat ${ALX_SKELETONS}/fluxbox/init > ${ALX_UNPRIV_HOME}/.fluxbox/init
  > ${ALX_UNPRIV_HOME}/.fluxbox/init  
370    
371   # fluxbox autostart   # fluxbox autostart
372   cat ${ALX_SKELETONS}/fluxbox/apps \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
373   > ${ALX_UNPRIV_HOME}/.fluxbox/apps   # do not show decorations on messages generated with xmessage
374     if [ -x /usr/bin/xmessage ]
375     then
376     addconfig '[app] (xmessage)'
377     addconfig ' [Deco] {NONE}'
378     addconfig '[end]'
379     fi
380     # add icon utility
381     [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}'
382     # add numlock utility
383     [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}'
384    
385     # add screensaver
386     if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
387     then
388     if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
389     then
390     screensaver_passwd_cmd="-nolock"
391     else
392     screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
393     fi
394    
395     addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
396     fi
397    
398     # add autostart session
399     if [[ ! -z ${cfg_autostart_session} ]]
400     then
401     # sleep one second to wait until busybox is fully initialized and the screen is really centered
402     addconfig "[startup] {sleep 1 && nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}"
403     fi
404    
405   # fluxbox hotkeys   # fluxbox hotkeys
406   cat ${ALX_SKELETONS}/fluxbox/apps \   cat ${ALX_SKELETONS}/fluxbox/keys > ${ALX_UNPRIV_HOME}/.fluxbox/keys
  > ${ALX_UNPRIV_HOME}/.fluxbox/keys  
407    
408   # fluxbox menu header   # generate a fluxbox menu
409   cat ${ALX_SKELETONS}/fluxbox/menu.header \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
410   > ${ALX_UNPRIV_HOME}/.fluxbox/menu   clearconfig
411    
412     # fluxbox menu header
413     cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
414     # now fix it with proper messages :P
415     local ver="$(< /etc/mageversion)"
416     sed -i "s:@CHANGEME@:alx-${ver}  #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
417   # add a newline (maybe there is no crlf in the header)   # add a newline (maybe there is no crlf in the header)
418   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   addconfig
419    
420   # fluxbox menu sessions   # first generate session files
421   for (( i=0; i < count; i++ ))   for i in ${all_ses_ids}
422   do   do
423   echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \   evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
424   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   generate_ica_session_file \
425   done   --session "${cfg_sessions_session}" \
426     --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
427   # fluxbox menu footer   --username "${cfg_sessions_username}" \
428   cat ${ALX_SKELETONS}/fluxbox/menu.footer \   --password "${cfg_sessions_password}" \
429   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   --domain "${cfg_sessions_domain}" \
430     --server "${cfg_sessions_browseradrs}" \
431     --colordepth "${cfg_graphic_depth}"
432    
433   # add a newline (maybe there is no crlf in the footer)   # fluxbox menusession
434   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}"
435     done
436    
437   # now we generate the desktop icons   # delete all progs
438   cat ${ALX_SKELETONS}/idesk/ideskrc \   progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
439   > ${ALX_UNPRIV_HOME}/.ideskrc   [ -d ${progsh_path} ] && rm -rf ${progsh_path}
440     install -d ${progsh_path}
  # whipe out old stuff and install a fresh directory  
  [ -d ${ALX_UNPRIV_HOME}/.idesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.idesktop  
  install -d ${ALX_UNPRIV_HOME}/.idesktop  
441    
442   local name   # add other menuitems
443   for (( i=0; i < count; i++ ))   for i in ${all_other_ids}
444   do   do
445   name="$(basename ${ALX_SESSIONS[${i}]} .ica)"   evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
446    
447   if [ -f ${ALX_SESSIONS_ICONS}/${name}.png ]   # now echo config line for fluxbox-menu
448     # make it "configureable" :p
449     if [[ -n ${cfg_other_menuitems_workdir} ]]
450   then   then
451   icon="${ALX_SESSIONS_ICONS}/${name}.png"   workdir="--workdir ${cfg_other_menuitems_workdir}"
452   else   fi
453   icon="${ALX_SESSIONS_ICONS}/default.png"   if [[ -n ${cfg_other_menuitems_icon} ]]
454     then
455     cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
456   fi   fi
457    
458   echo "table Icon   # gen prog startup wrapper
459  Caption: ${name}   generate_program_sh \
460  Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica   --name "${cfg_other_menuitems_name}" \
461  Icon: ${icon}   --exec "${cfg_other_menuitems_exec}" \
462  end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk   --param "${cfg_other_menuitems_param}" \
463     --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
464     "${workdir}"
465    
466     addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
467   done   done
468    
469   # set correct permissions   # fluxbox menu footer
470     cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
471     # add a newline (maybe there is no crlf in the footer)
472     addconfig
473    
474     # now it's a good time to generate *all* icons :)
475     generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}"
476    
477     # fix permissions
478   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
479   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
480   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
481   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
482   chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc   chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc
   
   
  # unset vars  
  unset ALX_SESSIONS  
483  }  }

Legend:
Removed from v.239  
changed lines
  Added in v.2454