tazpanel annotate settings.cgi @ rev 142

settings.cgi: add xorg keymap support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 17 12:20:08 2011 +0200 (2011-04-17)
parents 02bac4e0fafe
children ac272f688afe
rev   line source
pankso@42 1 #!/bin/sh
pankso@42 2 #
pankso@42 3 # System settings CGI interface: user, locale, keyboard, date. Since we
paul@52 4 # dont have multiple pages here there is only one case used to get command
pankso@49 5 # values and the full content is following directly.
pankso@42 6 #
pankso@112 7 # Copyright (C) 2011 SliTaz GNU/Linux - BSD License
pankso@42 8 #
pankso@42 9
pankso@42 10 # Common functions from libtazpanel
pankso@42 11 . lib/libtazpanel
pankso@42 12 get_config
pascal@81 13 header
pankso@42 14
pankso@42 15 TITLE="- Settings"
pankso@42 16
pankso@42 17 # Get the list of system locales
pankso@42 18 list_locales() {
pankso@42 19 cd /usr/share/i18n/locales
pankso@42 20 for locale in `ls -1 [a-z][a-z]_[A-Z][A-Z]`
pankso@42 21 do
pankso@42 22 echo "<option value='$locale'>$locale</option>"
pankso@42 23 done
pankso@42 24 }
pankso@42 25
pascal@141 26 # Get the list of console keymaps
pascal@141 27 list_keymaps() {
pascal@141 28 cd /usr/share/kmap
pascal@141 29 for keymap in *.kmap
pascal@141 30 do
pascal@141 31 basename $keymap .kmap | sed "s|.*|<option value='&'>&</option>|"
pascal@141 32 done
pascal@141 33 }
pascal@141 34
paul@127 35 # Get the list of panel styles
pankso@110 36 list_styles() {
pankso@110 37 cd $PANEL/styles
pankso@110 38 for style in *
pankso@110 39 do
pankso@110 40 echo "<option value='$style'>$style</option>"
pankso@110 41 done
pankso@110 42 }
pankso@110 43
pankso@42 44 #
pankso@42 45 # Commands executed before page loading.
pankso@42 46 #
pankso@42 47
pascal@81 48 case " $(GET) " in
pascal@115 49 *\ do\ *)
pascal@115 50 # Assume not array support in httpd_helper.sh ;^)
pascal@115 51 users=""
pascal@115 52 IFS="&"
pascal@115 53 for i in $QUERY_STRING ; do
pascal@115 54 case "$i" in
pascal@115 55 user=*) users="$users ${i#user=}" ;;
pascal@115 56 esac
pascal@115 57 done
pascal@115 58 unset IFS
pascal@115 59 for cmd in "Delete user" "Lock user" "Unlock user" \
pascal@115 60 "Change password" ; do
pascal@115 61 [ "$(GET do)" == "$(gettext "$cmd")" ] || continue
pascal@115 62 for user in $users ; do
pascal@115 63 case "$cmd" in
pascal@115 64 Delete*) deluser $user ;;
pankso@119 65 Lock*) passwd -l $user | log ;;
pankso@119 66 Unlock*) passwd -u $user | log ;;
pankso@118 67 Change*) echo "$user:$(GET password)" | chpasswd | log ;;
pascal@115 68 esac
pascal@115 69 done
pascal@115 70 done ;;
pascal@115 71 *\ adduser\ *)
pankso@42 72 #
pankso@42 73 # Manage system user accounts
pankso@42 74 #
pascal@81 75 user=$(GET adduser)
pascal@115 76 passwd=$(GET passwd)
pascal@81 77 if [ -n "$user" ]; then
pascal@81 78 adduser -D $user
pankso@119 79 echo "$user:$passwd" | chpasswd | log
pascal@81 80 for g in audio cdrom floppy video
pascal@81 81 do
pascal@81 82 addgroup $user $g
pascal@81 83 done
pascal@81 84 fi ;;
pascal@81 85 *\ gen_locale\ *)
pascal@81 86 new_locale=$(GET gen_locale) ;;
pascal@141 87 *\ gen_keymap\ *)
pascal@141 88 new_keymap=$(GET gen_keymap) ;;
pascal@142 89 *\ apply_xorg_kbd\ *)
pascal@142 90 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
pascal@142 91 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
pascal@81 92 *\ rdate\ *)
pankso@42 93 rdate -s tick.greyware.com ;;
pascal@81 94 *\ hwclock\ *)
pankso@42 95 hwclock -w ;;
pankso@110 96 *\ panel_pass*)
pankso@110 97 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
pankso@110 98 *\ style*)
pankso@110 99 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
pankso@110 100 . $CONFIG ;;
pankso@42 101 esac
pankso@42 102
pankso@42 103 #
pankso@42 104 # Default xHTML content
pankso@42 105 #
pankso@42 106 xhtml_header
pankso@67 107
pankso@110 108 case " $(GET) " in
pankso@110 109 *\ user*)
pankso@110 110 #
pankso@110 111 # Users management
pankso@110 112 #
pankso@110 113 cat <<EOT
pascal@115 114 <a name="users"></a>
pankso@110 115 <h3>`gettext "Manage users"`</h3>
pankso@110 116 <form method="get" action="$SCRIPT_NAME">
pascal@115 117 <div id="actions">
pascal@115 118 <div class="float-left">
pascal@115 119 $(gettext "Selection:")
pascal@115 120 <input type="submit" name="do" value="`gettext "Delete user"`" />
pascal@115 121 <input type="submit" name="do" value="`gettext "Lock user"`" />
pascal@115 122 <input type="submit" name="do" value="`gettext "Unlock user"`" />
pascal@115 123 </div>
pascal@115 124 </div>
pankso@42 125 EOT
pascal@115 126 table_start
pascal@115 127 cat << EOT
pascal@115 128 <tr class="thead">
pascal@115 129 <td>`gettext "Login"`</td>
pascal@115 130 <td>`gettext "User ID"`</td>
pascal@115 131 <td>`gettext "Name"`</td>
pascal@115 132 <td>`gettext "Home"`</td>
pascal@115 133 <td>`gettext "Shell"`</td>
pascal@115 134 </tr>
pascal@115 135 EOT
pascal@115 136 for login in `cat /etc/passwd | cut -d ":" -f 1`
pankso@110 137 do
pascal@115 138 if [ -d /home/$login ]; then
pascal@115 139 colorlogin=$login
pascal@115 140 grep -qs "^$login:!" /etc/shadow &&
pascal@115 141 colorlogin="<span style='color: red;'>$login</span>"
pascal@115 142 IFS=':'
pascal@115 143 set -- $(grep "^$login:" /etc/passwd)
pascal@115 144 unset IFS
pascal@115 145 uid=$3
pascal@115 146 gid=$4
pascal@115 147 name="$(echo $5 | sed s/,.*//)"
pascal@115 148 home="$6"
pascal@115 149 shell=$7
pascal@115 150 cat <<EOT
pascal@115 151 <tr>
pascal@115 152 <td><input type='checkbox' name='user' value='$login' />
pascal@115 153 <img src='$IMAGES/user.png' />$colorlogin</td>
pascal@115 154 <td>$uid:$gid</td>
pascal@115 155 <td>$name</td>
pascal@115 156 <td>$home</td>
pascal@115 157 <td>$shell</td>
pascal@115 158 </tr>
pascal@115 159 EOT
pankso@110 160 fi
pankso@110 161 done
pankso@110 162 table_end
pankso@110 163 cat << EOT
pankso@117 164 <p>
pankso@117 165 $(gettext "Password":)
pascal@121 166 <input type="password" name="password" />
pankso@117 167 <input type="submit" name="do" value="`gettext "Change password"`" />
pankso@117 168 </p>
pankso@42 169 </form>
pankso@42 170
pankso@42 171 <h4>`gettext "Add a new user"`</h4>
pankso@42 172 <form method="get" action="$SCRIPT_NAME">
pankso@42 173 <input type="hidden" name="user" />
pankso@42 174 <p>`gettext "User login:"`</p>
pankso@42 175 <p><input type="text" name="adduser" size="30" /></p>
pankso@42 176 <p>`gettext "User password:"`</p>
pankso@42 177 <p><input type="password" name="passwd" size="30" /></p>
pankso@42 178 <input type="submit" value="`gettext "Create user"`" />
pankso@42 179 </form>
pankso@42 180 EOT
pankso@110 181 ;;
pankso@110 182 *)
pankso@110 183 #
pankso@110 184 # Defaut system settings page
pankso@110 185 #
pankso@110 186 cat << EOT
pankso@110 187 <div id="wrapper">
pankso@110 188 <h2>$(gettext "System settings")</h2>
pankso@110 189 <p>$(gettext "Manage system time, users or language settings")<p>
pankso@110 190 </div>
pankso@110 191 <div id="actions">
pankso@110 192 <a class="button" href="$SCRIPT_NAME?users">
pankso@110 193 <img src="$IMAGES/users.png" />$(gettext "Manage users")</a>
pankso@110 194 </div>
pankso@42 195
pankso@110 196 <h3>`gettext "System time"`</h3>
pankso@110 197 <pre>
pankso@110 198 `gettext "Time zome :"` `cat /etc/TZ`
pankso@110 199 `gettext "System time :"` `date`
pankso@110 200 `gettext "Hardware clock :"` `hwclock -r`
pankso@110 201 </pre>
pankso@110 202 <a class="button" href="$SCRIPT_NAME?rdate">`gettext "Sync online"`</a>
pankso@110 203 <a class="button" href="$SCRIPT_NAME?hwclock">`gettext "Set hardware clock"`</a>
pankso@110 204 EOT
pankso@110 205 #
pankso@110 206 # Locale settings
pankso@110 207 #
pankso@110 208 cat << EOT
pankso@42 209 <a name="locale"></a>
pankso@42 210 <h3>`gettext "System language"`</h3>
pankso@42 211 <p>
pankso@42 212 EOT
pankso@42 213 # Check if a new locale was requested
pankso@42 214 if [ -n "$new_locale" ]; then
pankso@42 215 rm -rf /usr/lib/locale/$new_locale
pankso@42 216 localedef -i $new_locale -c -f UTF-8 \
pankso@42 217 /usr/lib/locale/$new_locale
pankso@42 218 # System configuration
pankso@42 219 echo "LANG=$new_locale" > /etc/locale.conf
pankso@42 220 echo "LC_ALL=$new_locale" >> /etc/locale.conf
paul@52 221 eval_gettext "You must logout and login again to your current
pankso@42 222 session to use \$new_locale locale."
pankso@42 223 else
pankso@110 224 gettext "Current system locales: "
pankso@42 225 locale -a
pankso@42 226 fi
pankso@42 227 cat << EOT
pankso@42 228 </p>
pankso@42 229 <form method="get" action="$SCRIPT_NAME">
pankso@110 230 $(gettext "Available locales:")
pascal@81 231 <select name="gen_locale">
pankso@42 232 <option value="en_US">en_US</options>
pankso@110 233 $(list_locales)
pankso@42 234 </select>
pankso@110 235 <input type="submit" value="$(gettext "Activate")" />
pankso@42 236 </form>
pankso@110 237
pascal@141 238 <a name="keymap"></a>
pascal@141 239 <h3>`gettext "Console keymap"`</h3>
pascal@141 240 <p>
pascal@141 241 EOT
pascal@141 242 # Check if a new keymap was requested
pascal@141 243 if [ -n "$new_keymap" ]; then
pascal@141 244 echo "$new_keymap" > /etc/keymap.conf
pascal@141 245 if [ -x /bin/loadkeys ]; then
pascal@141 246 loadkeys $new_keymap
pascal@141 247 else
pascal@141 248 loadkmap < /usr/share/kmap/$new_keymap.kmap
pascal@141 249 fi
pascal@141 250 fi
pascal@141 251 gettext "Current console keymap: "
pascal@142 252 keymap=$(cat /etc/keymap.conf)
pascal@142 253 echo $keymap
pascal@142 254 echo "</p>"
pascal@142 255 if [ -n "$keymap" ]; then
pascal@142 256 case "$keymap" in
pascal@142 257 fr_CH*)
pascal@142 258 keymap="ch" ;;
pascal@142 259 ru)
pascal@142 260 keymap="us,ru(winkeys)" ;;
pascal@142 261 slovene)
pascal@142 262 keymap=si ;;
pascal@142 263 *)
pascal@142 264 keymap=${keymap%-lat*}
pascal@142 265 keymap=${keymap%-abnt2} ;;
pascal@142 266 esac
pascal@142 267 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
pascal@142 268 cat << EOT
pascal@142 269 <form method="get" action="$SCRIPT_NAME">
pascal@142 270 $(gettext "Suggested keymap for Xorg:")
pascal@142 271 <input type="submit" name "apply_xorg_kbd" value="$keymap" />
pascal@142 272 <a class="button" href="index.cgi?file=$keyboard_config">
pascal@142 273 <img src="$IMAGES/edit.png" />$(gettext "Edit")</a>
pascal@142 274 </form>
pascal@142 275 EOT
pascal@142 276 fi
pascal@141 277 cat << EOT
pascal@141 278 <form method="get" action="$SCRIPT_NAME">
pascal@141 279 $(gettext "Available keymaps:")
pascal@141 280 <select name="gen_keymap">
pascal@141 281 $(list_keymaps)
pascal@141 282 </select>
pascal@141 283 <input type="submit" value="$(gettext "Activate")" />
pascal@141 284 </form>
pascal@141 285
pankso@110 286 <h3>$(gettext "Panel configuration")</h3>
pankso@110 287 <form method="get" action="$SCRIPT_NAME">
pankso@110 288 <p>
pankso@110 289 $(gettext "Style:")
pankso@110 290 <select name="style">
pankso@110 291 $(list_styles)
pankso@110 292 </select>
pankso@110 293 <input type="submit" value="$(gettext "Activate")" />
pankso@110 294 </p>
pankso@110 295 </form>
pankso@110 296 <form method="get" action="$SCRIPT_NAME">
pankso@110 297 <p>
pankso@110 298 $(gettext "Panel password:")
pankso@110 299 <input type="password" name="panel_pass"/>
pankso@110 300 <input type="submit" value="$(gettext "Change")" />
pankso@110 301 </p>
pankso@110 302 </form>
pankso@110 303 <p>
pankso@110 304 $(gettext "Configuration files: ")
pankso@110 305 <a class="button" href="index.cgi?file=$CONFIG">
pankso@110 306 <img src="$IMAGES/edit.png" />$(gettext "Panel")</a>
pankso@110 307 <a class="button" href="index.cgi?file=$HTTPD_CONF">
pankso@110 308 <img src="$IMAGES/edit.png" />$(gettext "Server")</a>
pankso@110 309 </p>
pankso@110 310 <p>
pankso@110 311 $(gettext "TazPanel provides a debuging mode and page:")
pankso@110 312 <a href='/index.cgi?debug'>debug</a>
pankso@110 313 </p>
pankso@42 314 EOT
pankso@110 315 ;;
pankso@110 316 esac
pankso@42 317
pankso@42 318 xhtml_footer
pankso@42 319 exit 0