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 241 by niro, Tue Apr 12 20:54:19 2005 UTC alx-src/branches/alxconf-060/functions/config_sessions.sh revision 2161 by niro, Wed May 18 14:35:13 2011 UTC
# Line 1  Line 1 
1  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.4 2005-04-12 20:54:16 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   #all arrays:  # helper function to create citrix session files
11   # ->  session1 session2 ... sessionN  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 CONFIG
23    
24   #get settings from database   # very basic getops
25   all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   for i in $*
26   "select session from cfg_sessions where serial='${ALX_SERIAL}'")   do
27     case $1 in
28     --session) shift; ses_session="$1" ;;
29     --filename) shift; ses_filename="$1" ;;
30     --username) shift; ses_username="$1" ;;
31     --password) shift; ses_password="$1" ;;
32     --domain) shift; ses_domain="$1" ;;
33     --server) shift; ses_browseradrs="$1" ;;
34             esac
35     shift
36     done
37    
38   #split'em up and put in an array (only if $all not zero)   # abort if session, filename or server not given
39     [[ -z ${ses_session} ]] && return 1
40     [[ -z ${ses_filename} ]] && return 1
41     [[ -z ${ses_browseradrs} ]] && return 1
42    
43     # write session files
44     CONFIG="${ALX_ICA_SESSIONS}/${ses_filename}"
45     clearconfig
46    
47     addconfig '[WFClient]'
48     addconfig 'Version=2'
49    
50     # use ';' as ifs
51   declare -i i=0   declare -i i=0
52   if [ -n "${all}" ]   for server in ${ses_browseradrs//;/ }
53     do
54     (( i++ ))
55     num="${i}"
56     # support newer ica-clients:
57     # the first address must be named TcpBrowserAddress, but not TcpBrowserAddress1 !!
58     [[ ${i} -eq 1 ]] && num=""
59     addconfig "TcpBrowserAddress${num}=${server}"
60     done
61    
62     addconfig 'ScreenPercent=0'
63     addconfig '[ApplicationServers]'
64     addconfig "${ses_session}="
65     addconfig "[${ses_session}]"
66     addconfig "Address=${ses_session}"
67     addconfig "InitialProgram=#${ses_session}"
68     addconfig 'TransportDriver=TCP/IP'
69     addconfig 'WinStationDriver=ICA 3.0'
70     addconfig "ClearPassword=${ses__password}"
71     addconfig "Username=${ses_username}"
72     addconfig "Domain=${ses_domain}"
73     addconfig 'UseFullScreen=Yes'
74     addconfig 'NoWindowManager=True'
75    }
76    
77    # generates a sh file to start programs
78    generate_program_sh()
79    {
80     local dest
81     local name
82     local exec
83     local param
84     local workdir
85     local CONFIG
86    
87     # very basic getops
88     for i in $*
89     do
90     case $1 in
91     --name|-n) shift; name="$1" ;;
92     --exec|-x) shift; exec="$1" ;;
93     --param|-p) shift; param="$1" ;;
94     --dest|-d) shift; dest="$1" ;;
95     --workdir|-w) shift; workdir="$1" ;;
96             esac
97     shift
98     done
99    
100     # abort if name, dest or exec not given
101     [[ -z ${name} ]] && return 1
102     [[ -z ${exec} ]] && return 1
103     [[ -z ${dest} ]] && return 1
104    
105     CONFIG="${dest}"
106     addconfig "#!/bin/sh"
107     [ -n "${workdir}" ] && addconfig "cd ${workdir}"
108     addconfig "exec ${exec} ${param}"
109    
110     chmod 0755 "${dest}"
111    }
112    
113    # helper functions for generate all desktop icons
114    generate_icon()
115    {
116     local name
117     local icon
118     local command
119     local dest
120     local yres
121     local xres
122     local iwidth
123     local iheight
124     local deficon
125     local CONFIG
126    
127     # very basic getops
128     for i in $*
129     do
130     case $1 in
131     --name|-n) shift; name="$1" ;;
132     --command|-c) shift; command="$1" ;;
133     --icon|-i) shift; icon="$1" ;;
134     --dest|-d) shift; dest="$1" ;;
135     --xres|-x) shift; xres="$1" ;;
136     --yres|-y) shift; yres="$1" ;;
137     --icon-width|-w) shift; iwidth="$1" ;;
138     --icon-height|-h) shift; iheight="$1" ;;
139     --default-icon) shift; deficon="$1" ;;
140             esac
141     shift
142     done
143    
144     # some sanity checks:
145    
146     # abort if name or command not given
147     [[ -z ${name} ]] && return 1
148     [[ -z ${command} ]] && return 1
149    
150     # use some defaults for icon, dest, {x,y}res
151     [[ -z ${xres} ]] && xres=30
152     [[ -z ${yres} ]] && xres=30
153     [[ -z ${dest} ]] && dest="${ALX_UNPRIV_HOME}/.xtdesktop/${name}.lnk"
154     if [[ -z ${icon} ]] || [ ! -f ${icon} ]
155   then   then
156   for x in ${all}   # if no default icon is given use default.png
157   do   [[ -z ${deficon} ]] && deficon="default.png"
158   ALX_SESSIONS[${i}]=${x}   icon="${ALX_SESSIONS_ICONS}/${deficon}"
  ((i++))  
  done  
  count=${i}  
  else  
  count=0  
159   fi   fi
160    
161   export ALX_SESSIONS   CONFIG="${dest}"
162     clearconfig
163    
164     addconfig 'table Icon'
165     addconfig '  Type: Program'
166     addconfig "  Caption: ${name}"
167     addconfig "  Command: ${command}"
168     addconfig "  Icon: ${icon}"
169     addconfig "  X: ${xres}"
170     addconfig "  Y: ${yres}"
171    
172     # add these only if not zero
173     if [[ ! -z ${iwidth} ]] && [[ ! -z ${iheight} ]]
174     then
175     addconfig "  IconWidth: ${iwidth}"
176     addconfig "  IconHeight: ${iheight}"
177     fi
178    
179     addconfig 'end'
180  }  }
181    
182  config_sessions()  generate_all_desktop_icons()
183  {  {
184   #first of all get the vars   local session_list="$1"
185   get_sessions_settings   local other_menuitem_list="$2"
186     local res
187     local xres
188     local yres
189     local x
190     local y
191     local i
192     local name
193     local progsh_path
194    
195   local count=${#ALX_SESSIONS[*]}   # progsh path
196   local icon   progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
197    
198     # get the resolution
199     res=$(mysqldo "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
200    
201     # split res to x & y
202     xres="${res%x*}"
203     xres="${res#*x}"
204    
205     # top left edge of the icon is given in config file
206     # remove a little bit to simulate the bottom-right edge
207     xres="$(( ${xres} - 120 ))"
208     yres="$(( ${yres} - 80 ))"
209    
210     # basic config
211     cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc
212    
213     # clean desktop icon location
214     [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop
215     install -d ${ALX_UNPRIV_HOME}/.xtdesktop
216    
217     # default settings
218     declare -i x=30
219     declare -i y=30
220    
221     # ica icons
222     for i in ${session_list}
223     do
224     # abort if empty
225     [[ -z ${i} ]] && continue
226    
227     # get database information
228     evaluate_table cfg_sessions "where serial='${ALX_SERIAL}' and id='${i}'"
229    
230     # new line if x > xres
231     if [ ${x} -ge ${xres} ]
232     then
233     x=30
234     y=$((${y} + 80))
235     fi
236    
237     # new row if y > yres
238     if [ ${y} -ge ${yres} ]
239     then
240     x=$((${x} + 120))
241     y=30
242    
243   # DEBUG   # re-check x
244  # declare -i i=0   [ ${x} -ge ${xres} ] && x=30
245  # echo count=${count}   fi
246  # echo "Number of new sessions: ${count}"  
247  # for ((i=0; i < count; i++))   generate_icon \
248  # do   --name "${cfg_session_session}" \
249  # echo "${i} - ${ALX_SESSIONS[${i}]}"   --command "nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_session_filename})" \
250  # done   --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_session_session}).png" \
251     --dest "${ALX_UNPRIV_HOME}/.xtdesktop/$(fix_whitespaces ${cfg_session_session}).lnk" \
252     --xres "${x}" \
253     --yres "${y}"
254    
255     y=$((${y} + 80))
256     done
257    
258     for i in ${other_menuitem_list}
259     do
260     # abort if empty
261     [[ -z ${i} ]] && continue
262    
263     # get database information
264     evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
265    
266     # new line if x > xres
267     if [ ${x} -ge ${xres} ]
268     then
269     x=30
270     y=$((${y} + 80))
271     fi
272    
273     # new row if y > yres
274     if [ ${y} -ge ${yres} ]
275     then
276     x=$((${x} + 120))
277     y=30
278    
279     # re-check x
280     [ ${x} -ge ${xres} ] && x=30
281     fi
282    
283     generate_icon \
284     --name "${cfg_other_menuitems_name}" \
285     --command "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_exec})" \
286     --icon "${ALX_SESSIONS_ICONS}/$(fix_whitespaces ${cfg_other_menuitems_name}).png" \
287     --dest "${ALX_UNPRIV_HOME}/.xtdesktop/$(fix_whitespaces ${cfg_other_menuitems_name}).lnk" \
288     --xres "${x}" \
289     --yres "${y}" \
290     --default-icon "default_item.png"
291    
292     y=$((${y} + 80))
293     done
294    
295     # last but not least gen a icon with some sys informations
296     local sysinfo
297     local hostname
298     local osversion
299    
300     osversion="$(< /etc/mageversion)"
301     hostname=$(mysqldo "select hostname from cfg_network where serial='${ALX_SERIAL}'")
302     sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
303    
304     # now get the right position:
305     # restore orig values of xres
306     xres="$(( ${xres} + 120 ))"
307     # default y pos (full yres -22 = cur yres + 58 !)
308     yres="$(( ${yres} + 58 ))"
309     # middle of the screen
310     # (no txt - length required, xtdesk manage that itself)
311     xres="$(( ${xres} / 2))"
312    
313     generate_icon \
314     --name "${sysinfo}" \
315     --command "exit 0" \
316     --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
317     --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \
318     --xres "${xres}" \
319     --yres "${yres}" \
320     --icon-width "1" \
321     --icon-height "1"
322    }
323    
324    config_sessions()
325    {
326     local i
327     local all_ses_ids
328     local all_other_ids
329     local CONFIG
330     local screensaver_passwd_cmd
331    
332     # get all session ids from database
333     all_ses_ids=$(mysqldo "select id from cfg_sessions where serial='${ALX_SERIAL}'")
334     # get all other_menutiem ids from database
335     all_other_ids=$(mysqldo "select id from cfg_other_menuitems where serial='${ALX_SERIAL}'")
336    
337     # get screensaver settings
338     evaluate_table cfg_screensaver
339     # get autostart settings
340     evaluate_table cfg_autostart
341    
342   # now setup fluxbox for user station   # now setup fluxbox for user station
343    
# Line 55  config_sessions() Line 348  config_sessions()
348   # now generate fluxbox config files   # now generate fluxbox config files
349    
350   # fluxbox main config   # fluxbox main config
351   cat ${ALX_SKELETONS}/fluxbox/init \   cat ${ALX_SKELETONS}/fluxbox/init > ${ALX_UNPRIV_HOME}/.fluxbox/init
  > ${ALX_UNPRIV_HOME}/.fluxbox/init  
352    
353   # fluxbox autostart   # fluxbox autostart
354   cat ${ALX_SKELETONS}/fluxbox/apps \   cat ${ALX_SKELETONS}/fluxbox/apps > ${ALX_UNPRIV_HOME}/.fluxbox/apps
355   > ${ALX_UNPRIV_HOME}/.fluxbox/apps  
356     CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps"
357     # add screensaver
358     if [[ ! -z ${cfg_screensaver_screensaver} ]] && [[ ! -z ${cfg_screensaver_screensaver_timeout} ]]
359     then
360     if [[ -z ${cfg_screensaver_password} ]] || [[ ${cfg_screensaver_password} = NULL ]]
361     then
362     screensaver_passwd_cmd="-nolock"
363     else
364     screensaver_passwd_cmd="-cpasswd $(cryptpw -m des ${cfg_screensaver_password})"
365     fi
366    
367     addconfig "[startup] {nohup xautolock -time ${cfg_screensaver_timeout} -locker 'xlock -mode ${cfg_screensaver_screensaver} ${screensaver_passwd_cmd}' > /dev/null &}"
368     fi
369    
370     # add autostart session
371     if [[ ! -z ${cfg_autostart_session} ]]
372     then
373     addconfig "[startup] {nohup nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_autostart_session}) &}"
374     fi
375    
376   # fluxbox hotkeys   # fluxbox hotkeys
377   cat ${ALX_SKELETONS}/fluxbox/apps \   cat ${ALX_SKELETONS}/fluxbox/keys > ${ALX_UNPRIV_HOME}/.fluxbox/keys
  > ${ALX_UNPRIV_HOME}/.fluxbox/keys  
378    
379   # fluxbox menu header   # generate a fluxbox menu
380   cat ${ALX_SKELETONS}/fluxbox/menu.header \   CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/menu"
381   > ${ALX_UNPRIV_HOME}/.fluxbox/menu   clearconfig
382    
383     # fluxbox menu header
384     cat ${ALX_SKELETONS}/fluxbox/menu.header >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
385     # now fix it with proper messages :P
386     local ver="$(< /etc/mageversion)"
387     sed -i "s:@CHANGEME@:alx-${ver}  #${ALX_SERIAL}:g" ${ALX_UNPRIV_HOME}/.fluxbox/menu
388   # add a newline (maybe there is no crlf in the header)   # add a newline (maybe there is no crlf in the header)
389   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   addconfig
390    
391   # fluxbox menu sessions   # first generate session files
392   for (( i=0; i < count; i++ ))   for i in ${all_ses_ids}
393   do   do
394   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}'"
395   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   generate_ica_session_file \
396   done   --session "${cfg_sessions_session}" \
397     --filename "$(fix_whitespaces ${cfg_sessions_filename})" \
398     --username "${cfg_sessions_username}" \
399     --password "${cfg_sessions_password}" \
400     --domain "${cfg_sessions_domain}" \
401     --server "${cfg_sessions_browseradrs}"
402    
403   # fluxbox menu footer   # fluxbox menusession
404   cat ${ALX_SKELETONS}/fluxbox/menu.footer \   addconfig "[exec] (${cfg_sessions_session}) {nice -n 19 wfica ${ALX_ICA_SESSIONS}/$(fix_whitespaces ${cfg_sessions_filename})}"
405   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   done
   
  # add a newline (maybe there is no crlf in the footer)  
  echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu  
406    
407   # now we generate the desktop icons   # delete all progs
408   cat ${ALX_SKELETONS}/idesk/ideskrc \   progsh_path="${ALX_UNPRIV_HOME}/.alxprogs"
409   > ${ALX_UNPRIV_HOME}/.ideskrc   [ -d ${progsh_path} ] && rm -rf ${progsh_path}
410     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  
411    
412   local name   # add other menuitems
413   for (( i=0; i < count; i++ ))   for i in ${all_other_ids}
414   do   do
415   name="$(basename ${ALX_SESSIONS[${i}]} .ica)"   evaluate_table cfg_other_menuitems "where serial='${ALX_SERIAL}' and id='${i}'"
416    
417   if [ -f ${ALX_SESSIONS_ICONS}/${name}.png ]   # now echo config line for fluxbox-menu
418     # make it "configureable" :p
419     if [[ -n ${cfg_other_menuitems_workdir} ]]
420   then   then
421   icon="${ALX_SESSIONS_ICONS}/${name}.png"   workdir="--workdir ${cfg_other_menuitems_workdir}"
  else  
  icon="${ALX_SESSIONS_ICONS}/default.png"  
422   fi   fi
423     if [[ -n ${cfg_other_menuitems_icon} ]]
424     then
425     cfg_other_menuitems_icon="<${cfg_other_menuitems_icon}>"
426     fi
427    
428     # gen prog startup wrapper
429     generate_program_sh \
430     --name "${cfg_other_menuitems_name}" \
431     --exec "${cfg_other_menuitems_exec}" \
432     --param "${cfg_other_menuitems_param}" \
433     --dest "${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})" \
434     "${workdir}"
435    
436   echo "table Icon   addconfig "[exec] (${cfg_other_menuitems_name}) {${progsh_path}/$(fix_whitespaces ${cfg_other_menuitems_name})} ${cfg_other_menuitems_icon}"
 Caption: ${name}  
 Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica  
 Icon: ${icon}  
 end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk  
437   done   done
438    
439   # set correct permissions   # fluxbox menu footer
440     cat ${ALX_SKELETONS}/fluxbox/menu.footer >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
441     # add a newline (maybe there is no crlf in the footer)
442     addconfig
443    
444     # now it's a good time to generate *all* icons :)
445     generate_all_desktop_icons "${all_ses_ids}" "${all_other_ids}"
446    
447     # fix permissions
448   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
449   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
450   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
451   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop   chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop
452   chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc   chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc
   
   
  # unset vars  
  unset ALX_SESSIONS  
453  }  }

Legend:
Removed from v.241  
changed lines
  Added in v.2161