Magellan Linux

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

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

revision 271 by niro, Thu Apr 21 08:46:44 2005 UTC revision 304 by niro, Sun Aug 28 19:29:35 2005 UTC
# Line 1  Line 1 
1  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.6 2005-04-21 08:46:44 niro Exp $  # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/functions/config_sessions.sh,v 1.11 2005-08-28 19:29:35 niro Exp $
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()  get_sessions_settings()
5  {  {
6   local x i all count   local x i all count
7    
8   #all arrays:   # all arrays:
9   # ->  session1 session2 ... sessionN   # ->  session1 session2 ... sessionN
10    
11   #get settings from database   # get settings from database
12   all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
13   "select filename from cfg_sessions where serial='${ALX_SERIAL}'")   "select filename from cfg_sessions where serial='${ALX_SERIAL}'")
  #"select session from cfg_sessions where serial='${ALX_SERIAL}'")  
14    
15   #split'em up and put in an array (only if $all not zero)   # split'em up and put in an array (only if $all not zero)
16   declare -i i=0   declare -i i=0
17   if [ -n "${all}" ]   if [ -n "${all}" ]
18   then   then
# Line 32  get_sessions_settings() Line 31  get_sessions_settings()
31    
32  get_autostart_settings()  get_autostart_settings()
33  {  {
34   #get settings from database   # get settings from database
35   ALX_AUTOSTART=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ALX_AUTOSTART=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
36   "select session from cfg_autostart where serial='${ALX_SERIAL}'")   "select session from cfg_autostart where serial='${ALX_SERIAL}'")
37    
38   export ALX_SESSIONS   export ALX_AUTOSTART
39  }  }
40    
41  generate_ica_session_files()  generate_ica_session_files()
# Line 44  generate_ica_session_files() Line 43  generate_ica_session_files()
43   local all_ids   local all_ids
44   local i   local i
45   local x   local x
  local k  
46   local server   local server
47   local ses_session   local ses_session
48   local ses_filename   local ses_filename
# Line 52  generate_ica_session_files() Line 50  generate_ica_session_files()
50   local ses_domain   local ses_domain
51   local ses_password   local ses_password
52   local ses_browseradrs   local ses_browseradrs
53     local ses_colors
54    
55   #get settings from database   # get settings from database
56   all_ids=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   all_ids=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
57   "select id from cfg_sessions where serial='${ALX_SERIAL}'")   "select id from cfg_sessions where serial='${ALX_SERIAL}'")
58    
  declare -i x=0  
59   for i in ${all_ids}   for i in ${all_ids}
60   do   do
61   # get settings   # get settings
62   ses_session[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_session=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
63   "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select session from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
64    
65   ses_filename[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_filename=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
66   "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select filename from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
67    
68   ses_username[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_username=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
69   "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select username from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
70    
71   ses_domain[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_domain=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
72   "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select domain from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
73    
74   ses_password[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_password=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
75   "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select password from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
76    
77   ses_browseradrs[${x}]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \   ses_browseradrs=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
78   "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")   "select browseradrs from cfg_sessions where serial='${ALX_SERIAL}' and id='${i}'")
79    
80     # get the right colors
81     ses_colors=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
82     "select depth from cfg_graphic where serial='${ALX_SERIAL}'")
83     case ${ses_colors} in
84     24) ses_colors="8";;
85     16) ses_colors="4";;
86     8) ses_colors="2";;
87     *) ses_colors="2";;
88     esac
89    
90   # write session files   # write session files
91   echo '[WFClient]' > ${ALX_ICA_SESSIONS}/${ses_filename}   echo '[WFClient]' > ${ALX_ICA_SESSIONS}/${ses_filename}
92   echo 'Version=2' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'Version=2' >> ${ALX_ICA_SESSIONS}/${ses_filename}
93   OLD_IFS="$IFS"   OLD_IFS="$IFS"
94   IFS=";"   IFS=";"
95   declare -i k=0   declare -i x=0
96   for server in ${ses_browseradrs[${x}]}   for server in ${ses_browseradrs}
97   do   do
98   (( k++ ))   (( x++ ))
99   echo "TcpBrowserAddress${k}=${server}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "TcpBrowserAddress${x}=${server}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
100   done   done
101   IFS="${OLD_IFS}"   IFS="${OLD_IFS}"
102   unset k   unset x
103   unset OLD_IFS   unset OLD_IFS
104    
105   echo 'ScreenPercent=0' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'ScreenPercent=0' >> ${ALX_ICA_SESSIONS}/${ses_filename}
106    
107   echo '[ApplicationServers]' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo '[ApplicationServers]' >> ${ALX_ICA_SESSIONS}/${ses_filename}
108   echo "${ses_session[${x}]}=" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "${ses_session}=" >> ${ALX_ICA_SESSIONS}/${ses_filename}
109    
110   echo "[${ses_session[${x}]}]" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "[${ses_session}]" >> ${ALX_ICA_SESSIONS}/${ses_filename}
111   echo "Address=${ses_session[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "Address=${ses_session}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
112   echo "InitialProgram=#${ses_session[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "InitialProgram=#${ses_session}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
113   echo 'DesiredColor=8' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "DesiredColor=${ses_colors}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
114   echo 'TransportDriver=TCP/IP' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'TransportDriver=TCP/IP' >> ${ALX_ICA_SESSIONS}/${ses_filename}
115   echo 'WinStationDriver=ICA 3.0' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'WinStationDriver=ICA 3.0' >> ${ALX_ICA_SESSIONS}/${ses_filename}
116   echo "ClearPassword=${ses_password[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "ClearPassword=${ses_password}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
117   echo "Username=${ses_username[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "Username=${ses_username}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
118   echo "Domain=${ses_domain[${x}]}" >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo "Domain=${ses_domain}" >> ${ALX_ICA_SESSIONS}/${ses_filename}
119   echo 'UseFullScreen=Yes' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'UseFullScreen=Yes' >> ${ALX_ICA_SESSIONS}/${ses_filename}
120   echo 'NoWindowManager=True' >> ${ALX_ICA_SESSIONS}/${ses_filename}   echo 'NoWindowManager=True' >> ${ALX_ICA_SESSIONS}/${ses_filename}
121   done   done
122    }
123    
124    get_other_menuitems()
125    {
126     local x i count name exec icon workdir
127    
128     # all arrays:
129     # ->  session1 session2 ... sessionN
130    
131     # get settings from database
132     count=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
133     "select name from cfg_other_menuitems where serial='${ALX_SERIAL}'")
134    
135     # get all instances and put them into an array
136     if [ -n "${count}" ]
137     then
138     for x in ${count}
139     do
140     # to be sure
141     unset name
142     unset exec
143     unset workdir
144     unset icon
145    
146     name=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
147     "select name from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
148    
149     exec=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
150     "select exec from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
151    
152     workdir=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
153     "select workdir from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
154    
155     icon=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
156     "select icon from cfg_other_menuitems where serial='${ALX_SERIAL}' and name='${x}'")
157    
158     # debug only
159     #echo "DEBUG: ${x}: name:'${name}' exec:'${exec}' workdir:'${workdir}' ic$
160    
161     # now echo config line for fluxbox-menu
162     # make it "configureable" :P
163     [ -n "${workdir}" ] && workdir="cd ${workdir};"
164     [ -n "${icon}" ] && icon="[${icon}]"
165     echo "[exec] (${name}) {${workdir}${exec}} ${icon}"
166     done
167     fi
168    }
169    
170    
171    # helper functions for generate all desktop icons
172    generate_icon()
173    {
174     local name
175     local icon
176     local command
177     local dest
178     local yres
179     local xres
180     local iwidth
181     local iheight
182    
183     # very basic getops
184     for i in $*
185     do
186     case $1 in
187     --name|-n) shift; name="$1" ;;
188     --command|-c) shift; command="$1" ;;
189     --icon|-i) shift; icon="$1" ;;
190     --dest|-d) shift; dest="$1" ;;
191     --xres|-x) shift; xres="$1" ;;
192     --yres|-y) shift; yres="$1" ;;
193     --icon-width|-w) shift; iwidth="$1" ;;
194     --icon-height|-h) shift; iheight="$1" ;;
195             esac
196     shift
197     done
198    
199     # some sanity checks :
200    
201     # abort if name or command not given
202     [ -z "${name}" ] && return 1
203     [ -z "${command}" ] && return 1
204    
205     # use some defaults for icon, dest, {x,y}res
206     [ -z "${xres}" ] && xres=20
207     [ -z "${yres}" ] && xres=20
208     [ -z "${dest}" ] && dest="${ALX_UNPRIV_HOME}/.xtdesktop/${name}.lnk"
209     if [ -z "${icon}" ] || [ ! -f "${icon}" ]
210     then
211     icon="${ALX_SESSIONS_ICONS}/default.png"
212     fi
213    
214     echo "table Icon" > ${dest}
215     echo "  Type: Program" >> ${dest}
216     echo "  Caption: ${name}" >> ${dest}
217     echo "  Command: ${command}" >> ${dest}
218     echo "  Icon: ${icon}" >> ${dest}
219     echo "  X: ${xres}" >> ${dest}
220     echo "  Y: ${yres}" >> ${dest}
221    
222     # add these only if not zero
223     if [ -n "${iwidth}" ] && [ -n "${iheight}" ]
224     then
225     echo "  IconWidth: ${iwidth}" >> ${dest}
226     echo "  IconHeight: ${iheight}" >> ${dest}
227     fi
228    
229     echo "end" >> ${dest}
230    }
231    
232    generate_all_desktop_icons()
233    {
234     local res
235     local xres
236     local yres
237     local icon_list
238     local x
239     local y
240     local item
241    
242     # get the resolution
243     res=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
244     "select resolution from cfg_graphic where serial='${ALX_SERIAL}'")
245    
246     # split res to x & y
247     xres="$(echo ${res} | cut -dx -f1)"
248     yres="$(echo ${res} | cut -dx -f2)"
249    
250     # top left edge of the icon is given in config file
251     # remove a little bit to simulate the bottom-right edge
252     xres="$(( ${xres} - 120 ))"
253     yres="$(( ${yres} - 80 ))"
254    
255     # basic config
256     cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc
257    
258     # clean desktop icon location
259     [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop
260     install -d ${ALX_UNPRIV_HOME}/.xtdesktop
261    
262    
263     # default settings
264     declare -i x=20
265     declare -i y=20
266    
267     # first all ica sessions
268     local count=${#ALX_SESSIONS[*]}
269     for (( i=0; i < count; i++ ))
270     do
271     icon_list="${icon_list} $(basename ${ALX_SESSIONS[${i}] .ica})"
272     done
273    
274     for item in ${icon_list}
275     do
276     # abort if empty
277     [ -z "${item}" ] && continue
278    
279   (( x++ ))   # new line if x > xres
280     if [ ${x} -ge ${xres} ];then
281     x=20
282     y=$((${y} + 80))
283     fi
284    
285     # new row if y > yres
286     if [ ${y} -ge ${yres} ];then
287     x=$((${x} + 120))
288     y=20
289    
290     # re-check x
291     [ ${x} -ge ${xres} ] && x=20
292     fi
293    
294     generate_icon \
295     --name "${item}" \
296     --command "wfica ${ALX_ICA_SESSIONS}/${item}.ica" \
297     --icon "${ALX_SESSIONS_ICONS}/${item}.png" \
298     --dest "${ALX_UNPRIV_HOME}/.xtdesktop/${item}.lnk" \
299     --xres "${x}" \
300     --yres "${y}"
301    
302     y=$((${y} + 80))
303     done
304    
305    
306     # last but not least gen a icon with some sys informations
307     local sysinfo
308     local hostname
309     local osversion
310    
311     osversion="$(< /etc/mageversion)"
312     hostname=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
313     "select hostname from cfg_network where serial='${ALX_SERIAL}'")
314     sysinfo="Hostname: ${hostname} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
315    
316     # now get the right position:
317     # restore orig values of xres
318     xres="$(( ${xres} + 120 ))"
319     # default y pos (full yres -22 = cur yres + 58 !)
320     yres="$(( ${yres} + 58 ))"
321     # middle of the screen
322     # (no txt - length required, xtdesk manage that itself)
323     xres="$(( ${xres} / 2))"
324    
325     generate_icon \
326     --name "${sysinfo}" \
327     --command "exit 0" \
328     --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
329     --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \
330     --xres "${xres}" \
331     --yres "${yres}" \
332     --icon-width "1" \
333     --icon-height "1"
334  }  }
335    
336  config_sessions()  config_sessions()
# Line 120  config_sessions() Line 338  config_sessions()
338   # generate ica session files   # generate ica session files
339   generate_ica_session_files   generate_ica_session_files
340    
341   #first of all get the vars   # first of all get the vars
342   get_sessions_settings   get_sessions_settings
343   get_autostart_settings   get_autostart_settings
344    
345   local count=${#ALX_SESSIONS[*]}   local count=${#ALX_SESSIONS[*]}
346   local icon   local icon
347     local i
348    
349   # DEBUG   # DEBUG
350  # declare -i i=0  # declare -i i=0
# Line 167  config_sessions() Line 386  config_sessions()
386   cat ${ALX_SKELETONS}/fluxbox/menu.header \   cat ${ALX_SKELETONS}/fluxbox/menu.header \
387   > ${ALX_UNPRIV_HOME}/.fluxbox/menu   > ${ALX_UNPRIV_HOME}/.fluxbox/menu
388    
389     # now fix it with proper messages :P
390     local ver="$(< /etc/mageversion)"
391     sed -i "s:@CHANGEME@:alx-${ver}  #${ALX_SERIAL}:g" \
392     ${ALX_UNPRIV_HOME}/.fluxbox/menu
393    
394   # add a newline (maybe there is no crlf in the header)   # add a newline (maybe there is no crlf in the header)
395   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
396    
397   # fluxbox menu sessions   # fluxbox menu sessions
398   for (( i=0; i < count; i++ ))   for (( i=0; i < count; i++ ))
399   do   do
400   echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \   [ -n "${ALX_SESSIONS[${i}]}" ] && \
401   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   echo "[exec] ($(basename ${ALX_SESSIONS[${i}]} .ica)) {wfica ${ALX_ICA_SESSIONS}/${ALX_SESSIONS[${i}]}}" \
402     >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
403   done   done
404    
405     # add other menuitems
406     get_other_menuitems >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
407    
408   # fluxbox menu footer   # fluxbox menu footer
409   cat ${ALX_SKELETONS}/fluxbox/menu.footer \   cat ${ALX_SKELETONS}/fluxbox/menu.footer \
410   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
# Line 184  config_sessions() Line 412  config_sessions()
412   # add a newline (maybe there is no crlf in the footer)   # add a newline (maybe there is no crlf in the footer)
413   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu   echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
414    
415   # now we generate the desktop icons   # now it's a good time to generate *all* icons :)
416   cat ${ALX_SKELETONS}/idesk/ideskrc \   generate_all_desktop_icons
  > ${ALX_UNPRIV_HOME}/.ideskrc  
   
  # 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  
   
  local name  
  for (( i=0; i < count; i++ ))  
  do  
  name="$(basename ${ALX_SESSIONS[${i}]} .ica)"  
   
  if [ -f ${ALX_SESSIONS_ICONS}/${name}.png ]  
  then  
  icon="${ALX_SESSIONS_ICONS}/${name}.png"  
  else  
  icon="${ALX_SESSIONS_ICONS}/default.png"  
  fi  
   
  echo "table Icon  
 Caption: ${name}  
 Command: wfica ${ALX_ICA_SESSIONS}/${name}.ica  
 Icon: ${icon}  
 end" > ${ALX_UNPRIV_HOME}/.idesktop/${name}.lnk  
  done  
417    
418   # set correct permissions   # set correct permissions
419   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
420   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox   chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
421   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox   chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
422   chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop   chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop
423   chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc   chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc
   
424    
425   # unset vars   # unset vars
426   unset ALX_SESSIONS   unset ALX_SESSIONS

Legend:
Removed from v.271  
changed lines
  Added in v.304