tazpanel diff settings.cgi @ rev 498
Use bottom panel as status bar; settings: data picker, lock icon for locked users; font: add 'calendar', 'modem', and 'vpn' icons; etc...
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Mon May 18 17:13:57 2015 +0300 (2015-05-18) |
parents | df54c758feb8 |
children | 2a891cb47520 |
line diff
1.1 --- a/settings.cgi Tue May 12 15:05:51 2015 +0300 1.2 +++ b/settings.cgi Mon May 18 17:13:57 2015 +0300 1.3 @@ -22,12 +22,14 @@ 1.4 getent $1 2>/dev/null || cat /etc/$1 1.5 } 1.6 1.7 + 1.8 listdb() { 1.9 - for item in $(getdb $1 | cut -d ":" -f 1); do 1.10 + for item in $(getdb $1 | cut -d: -f1); do 1.11 echo "<option>$item</option>\n" 1.12 done 1.13 } 1.14 1.15 + 1.16 restart_lxpanel() { 1.17 # `lxpanelctl restart` exists, but it breaks often leaving us without any panel 1.18 lxpanel_pid="$(ps -o comm,pid | fgrep lxpanel | awk '{print $2}')" 1.19 @@ -36,7 +38,7 @@ 1.20 1.21 if [ "$USER" == "$lxpanel_user" ]; then 1.22 kill $lxpanel_pid 1.23 - DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' $lxpanel_comm 1>/tmp/debug1 2>/tmp/debug2 & 1.24 + DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' $lxpanel_comm & 1.25 fi 1.26 } 1.27 1.28 @@ -54,50 +56,65 @@ 1.29 case $(GET do) in 1.30 1.31 # Groups page 1.32 - delgroups) 1.33 - for i in $groups; do delgroup $i; done ;; 1.34 - addgroup) 1.35 - addgroup $groups ;; 1.36 - addmember) 1.37 - addgroup $(GET member) $groups ;; 1.38 - delmember) 1.39 - delgroup $(GET member) $groups ;; 1.40 + delgroups) for i in $groups; do delgroup $i; done ;; 1.41 + addgroup) addgroup $groups ;; 1.42 + addmember) addgroup $(GET member) $groups ;; 1.43 + delmember) delgroup $(GET member) $groups ;; 1.44 1.45 # Users page 1.46 - delusers) 1.47 - for i in $users; do deluser $i; done ;; 1.48 - lockusers) 1.49 - for i in $users; do passwd -l $i | log; done ;; 1.50 - unlockusers) 1.51 - for i in $users; do passwd -u $i | log; done ;; 1.52 - chpasswd) 1.53 - echo "$users:$(GET password)" | chpasswd -m | log ;; 1.54 + delusers) for i in $users; do deluser $i; done ;; 1.55 + lockusers) for i in $users; do passwd -l $i | log; done ;; 1.56 + unlockusers) for i in $users; do passwd -u $i | log; done ;; 1.57 + chpasswd) echo "$users:$(GET password)" | chpasswd -m | log ;; 1.58 adduser) 1.59 if [ -n "$users" ]; then 1.60 - name=$(GET name); name=${name:-SliTaz User} 1.61 - adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users 1.62 + name="$(GET name)" 1.63 + adduser -D -s /bin/sh -g "${name:-SliTaz User}" -G users -h /home/$users $users 1.64 echo "$user:$(GET passwd)" | chpasswd -m | log 1.65 for i in audio cdrom floppy video tty; do addgroup $users $i; done 1.66 + passwd -u $users | log 1.67 fi ;; 1.68 1.69 # System time 1.70 - settz) 1.71 - GET tz > /etc/TZ;; 1.72 - date) # normalize to two digits 1.73 - date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;; 1.74 - rdate) 1.75 + calendar) # display Yad date picker (AJAX) 1.76 + new_date="$(DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' \ 1.77 + yad --calendar --on-top --mouse --undecorated \ 1.78 + --window-icon=config-date --title="$(_ 'Set date')" \ 1.79 + --date-format='%x<span style="display:none">%F</span>')" 1.80 + header 1.81 + echo "$new_date"; exit 0;; 1.82 + 1.83 + settz) # set timezone 1.84 + GET tz > /etc/TZ ;; 1.85 + 1.86 + date) # only accepted format is MMDDhhmm[[YY]YY][.ss] 1.87 + if [ -n "$(GET dateFull)" ]; then 1.88 + dateFull="$(GET dateFull)" # %F = YYYY-MM-DD 1.89 + date $(printf '%02d%02d%02d%02d%d.%02d' "${dateFull:5:2}" \ 1.90 + "${dateFull:8:2}" "$(GET hour)" "$(GET min)" \ 1.91 + "${dateFull:0:4}" "$(GET sec)") >/dev/null 1.92 + else 1.93 + date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" \ 1.94 + "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" \ 1.95 + "$(GET sec)") >/dev/null 1.96 + fi;; 1.97 + 1.98 + rdate) # get and possibly set the system date/time from a remote host 1.99 rdate -s tick.greyware.com ;; 1.100 - hwclock) 1.101 + 1.102 + hwclock) # query and set hardware clock (RTC) 1.103 hwclock -w -u ;; 1.104 1.105 + gethwclock) # get date/time from hardware clock (AJAX) 1.106 + header; hwclock -ur | sed 's|0.000000 seconds||'; exit 0;; 1.107 + 1.108 esac 1.109 ;; 1.110 1.111 1.112 - *\ gen_locale\ *) 1.113 - new_locale=$(GET gen_locale) ;; 1.114 - *\ gen_keymap\ *) 1.115 - new_keymap=$(GET gen_keymap) ;; 1.116 + *\ gen_locale\ *) new_locale=$(GET gen_locale) ;; 1.117 + *\ gen_keymap\ *) new_keymap=$(GET gen_keymap) ;; 1.118 + 1.119 *\ apply_xorg_kbd\ *) 1.120 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \ 1.121 /etc/X11/xorg.conf.d/40-Keyboard.conf ;; 1.122 @@ -112,9 +129,9 @@ 1.123 1.124 dd="$HOME/.local/share/desktop-directories"; sd="$dd/SliTazMenu.directory" 1.125 1.126 - case $REMOTE_USER in 1.127 - root) color=31; ind='#';; 1.128 - *) color=32; ind='$';; 1.129 + case "$REMOTE_USER" in 1.130 + root) color='31'; ind='#';; 1.131 + *) color='32'; ind='$';; 1.132 esac 1.133 1.134 case $(GET tweak) in 1.135 @@ -166,7 +183,7 @@ 1.136 ;; 1.137 1.138 1.139 - *\ menuIcon\ *) 1.140 + *\ menuIcon\ *) # return specified image (AJAX) 1.141 icon="/usr/share/pixmaps/$(GET menuIcon).png" 1.142 [ ! -r $icon ] && exit 0 1.143 header "Content-Type: image/png"; cat $icon; exit 0 1.144 @@ -214,18 +231,16 @@ 1.145 </thead> 1.146 <tbody> 1.147 EOT 1.148 - for group in $(getdb group | cut -d ":" -f 1); do 1.149 + for group in $(getdb group | cut -d: -f1); do 1.150 IFS=':' 1.151 set -- $(getdb group | grep "^$group:") 1.152 unset IFS 1.153 - gid=$3 1.154 - members=$4 1.155 cat <<EOT 1.156 <tr> 1.157 <td><input type="checkbox" name="group" value="$group" id="$group"/> 1.158 <label for="$group" data-icon="group">$group</label></td> 1.159 - <td>$gid</td> 1.160 - <td>${members//,/, }</td> 1.161 + <td>$3</td> 1.162 + <td>${4//,/, }</td> 1.163 </tr> 1.164 EOT 1.165 done 1.166 @@ -239,40 +254,27 @@ 1.167 1.168 <section> 1.169 <header>$(_ 'Add a new group')</header> 1.170 - <form> 1.171 + <form class="wide"> 1.172 <input type="hidden" name="groups"/> 1.173 - <table> 1.174 - <tr><td>$(_ 'Group name:')</td> 1.175 - <td><input type="text" name="group"/></td> 1.176 - </tr> 1.177 - <tr><td colspan="2"> 1.178 - <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button> 1.179 - </td></tr> 1.180 - </table> 1.181 + <footer>$(_ 'Group name:') <input type="text" name="group"/> 1.182 + <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button> 1.183 + </footer> 1.184 </form> 1.185 </section> 1.186 1.187 1.188 <section> 1.189 <header>$(_ 'Manage group membership')</header> 1.190 - <form> 1.191 + <form class="wide"> 1.192 <input type="hidden" name="groups"/> 1.193 - <table> 1.194 - <tr> 1.195 - <td>$(_ 'Group name:')</td> 1.196 - <td><select name="group">$(listdb group)</select></td> 1.197 - <td>$(_ 'User name:')</td> 1.198 - <td><select name="member">$(listdb passwd)</select></td> 1.199 - </tr> 1.200 - <tr> 1.201 - <td colspan="2"> 1.202 - <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button> 1.203 - </td> 1.204 - <td colspan="2"> 1.205 - <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button> 1.206 - </td> 1.207 - </tr> 1.208 - </table> 1.209 + <div> 1.210 + $(_ 'Group name:') <select name="group">$(listdb group)</select> 1.211 + $(_ 'User name:') <select name="member">$(listdb passwd)</select> 1.212 + </div> 1.213 + <footer> 1.214 + <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button> 1.215 + <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button> 1.216 + </footer> 1.217 </form> 1.218 </section> 1.219 1.220 @@ -303,18 +305,20 @@ 1.221 <tr> 1.222 <td>$(_ 'Login')</td> 1.223 <td>$(_ 'User ID')</td> 1.224 - <td>$(_ 'Name')</td> 1.225 + <td>$(_ 'User Name')</td> 1.226 <td>$(_ 'Home')</td> 1.227 <td>$(_ 'Shell')</td> 1.228 </tr> 1.229 </thead> 1.230 </tbody> 1.231 EOT 1.232 - for login in $(getdb passwd | cut -d ":" -f 1); do 1.233 - if [ -d /home/$login ]; then 1.234 - colorlogin=$login 1.235 - grep -qs "^$login:!" /etc/shadow && 1.236 - colorlogin="<span style='color: red;'>$login</span>" 1.237 + for login in $(getdb passwd | cut -d: -f1); do 1.238 + if [ -d "/home/$login" ]; then 1.239 + blocked=''; usericon='user' 1.240 + if grep -qs "^$login:!" /etc/shadow; then 1.241 + blocked='class="color31"' 1.242 + usericon="lock" 1.243 + fi 1.244 IFS=':' 1.245 set -- $(getdb passwd | grep "^$login:") 1.246 unset IFS 1.247 @@ -322,7 +326,7 @@ 1.248 <tr> 1.249 <td style="white-space: nowrap"> 1.250 <input type="checkbox" name="user" value="$login" id="$login"/> 1.251 - <label for="$login" data-icon="user">$colorlogin</label></td> 1.252 + <label for="$login" data-icon="$usericon" $blocked>$login</label></td> 1.253 <td>$3:$4</td> 1.254 <td>$(echo $5 | sed s/,.*//)</td> 1.255 <td>$6</td> 1.256 @@ -337,11 +341,9 @@ 1.257 EOT 1.258 cat <<EOT 1.259 <footer> 1.260 - <div> 1.261 - $(_ 'Password:') 1.262 - <input type="password" name="password"/> 1.263 - <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button> 1.264 - </div> 1.265 + $(_ 'Password:') 1.266 + <input type="password" name="password"/> 1.267 + <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button> 1.268 </footer> 1.269 </form> 1.270 </section> 1.271 @@ -368,7 +370,7 @@ 1.272 </section> 1.273 EOT 1.274 1.275 - # `who` output is empty in the Live mode 1.276 + # `who` output is empty in the SLiM sessions 1.277 if [ -n "$(who)" ]; then 1.278 cat <<EOT 1.279 <section> 1.280 @@ -396,10 +398,12 @@ 1.281 # 1.282 check_root_tazpanel 1.283 1.284 - LOADING_MSG="$(_ 'Please wait...')"; loading_msg 1.285 + loading_msg "$(_ 'Please wait...')" 1.286 1.287 cur_loc=$(locale | grep LANG | cut -d= -f2) 1.288 cat <<EOT 1.289 + 1.290 + 1.291 <h2 id="locale">$(_ 'Choose locale')</h2> 1.292 1.293 <section> 1.294 @@ -498,6 +502,7 @@ 1.295 <section> 1.296 <header>$(_ 'Small quick tweaks for user %s' "$user")</header> 1.297 1.298 + <div> 1.299 <fieldset><legend>$(_ 'Terminal prompt')</legend> 1.300 <table class="wide"> 1.301 <tr> 1.302 @@ -577,6 +582,7 @@ 1.303 '{ printf "<a data-icon=\"conf\" href=\"index.cgi?file=%s\">%s</a> ", $1, gensub(h, "~", "")}' 1.304 )")</p> 1.305 </fieldset> 1.306 + </div> 1.307 </section> 1.308 EOT 1.309 ;; 1.310 @@ -601,7 +607,7 @@ 1.311 <section> 1.312 <header>$(_ 'System time')</header> 1.313 <div> 1.314 - <form class="wide"> 1.315 + <form class="wide" id="sysTimeForm"> 1.316 <fieldset><legend>$(_ 'Time zone:')</legend> 1.317 <select name="tz"> 1.318 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \ 1.319 @@ -617,11 +623,14 @@ 1.320 </fieldset> 1.321 1.322 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend> 1.323 - $(hwclock -ur | sed 's|0.000000 seconds||') 1.324 + <span id="hwclocks">$(hwclock -ur | sed 's|0.000000 seconds||')</span> 1.325 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button> 1.326 </fieldset> 1.327 1.328 <fieldset><legend>$(_ 'Set date')</legend> 1.329 +EOT 1.330 + if [ -z "$(which yad)" ]; then 1.331 + cat <<EOT 1.332 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/> 1.333 <select name="month" value="$(date +%m)"> 1.334 $(for i in $(seq 12); do 1.335 @@ -630,10 +639,30 @@ 1.336 done) 1.337 </select> 1.338 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/> 1.339 +EOT 1.340 + else 1.341 + cat <<EOT 1.342 + <button onclick="datePicker(); return false"> 1.343 + <span id="dateTime" data-icon="calendar">$(date +%x)<span style="display:none">$(date +%F)</span></span> 1.344 + </button> 1.345 +EOT 1.346 + fi 1.347 + cat <<EOT 1.348 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!-- 1.349 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!-- 1.350 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/> 1.351 +EOT 1.352 + if [ -z "$(which yad)" ]; then 1.353 + cat <<EOT 1.354 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button> 1.355 +EOT 1.356 + else 1.357 + cat <<EOT 1.358 + 1.359 + <button data-icon="ok" onclick="submitSysTimeForm()">$(_ 'Set date')</button> 1.360 +EOT 1.361 + fi 1.362 + cat <<EOT 1.363 </fieldset> 1.364 </form> 1.365 </div> 1.366 @@ -643,9 +672,34 @@ 1.367 Date.prototype.timeNow = function() { 1.368 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds(); 1.369 } 1.370 -setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000); 1.371 +setInterval(function(){ 1.372 + document.getElementById('time').innerText = new Date().timeNow(); 1.373 + ajax('settings.cgi?do=gethwclock', '1', 'hwclocks'); 1.374 +}, 1000); 1.375 1.376 -//document.getElementById('hwclock').disabled = 'disabled'; 1.377 + 1.378 +// Run date picker and return value to the 'dateTime' element 1.379 +function datePicker() { 1.380 + ajax('settings.cgi?do=calendar', '1', 'dateTime'); 1.381 +} 1.382 + 1.383 +// Actions to do before form submit and submit 1.384 +function submitSysTimeForm() { 1.385 + sysTimeForm = document.getElementById('sysTimeForm'); 1.386 + 1.387 + var dateFull = document.createElement('INPUT'); 1.388 + dateFull.name = 'dateFull'; 1.389 + dateFull.value = document.getElementById('dateTime').childNodes[1].innerText; 1.390 + dateFull.type = 'hidden'; 1.391 + sysTimeForm.appendChild(dateFull); 1.392 + 1.393 + var submitDo = document.createElement('INPUT'); 1.394 + submitDo.name = 'do'; submitDo.value = 'date'; 1.395 + submitDo.type = 'hidden'; 1.396 + sysTimeForm.appendChild(submitDo); 1.397 + 1.398 + sysTimeForm.submit(); 1.399 +} 1.400 </script> 1.401 </section> 1.402 EOT