Zenity, Bilgisayarı Kapat!

Başlatan hitokiri, 13 Şubat 2010 - 11:22:26

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

hitokiri

Evet, bu paylaşımımda süreli bilgisayarı kapatan basit bir betiğin kodları var,
Lafı fazla uzatmadan kodlara geçelim (:
...

#!/bin/bash

export kapat=" sudo halt"
sen=`zenity --entry --title="Biligisayarı kapat" --text="Dakika olarak bir zaman girniz:      " `
if [ $? -eq 1 ] ; then
exit 1
fi

if [ $sen -gt 5 ]
    then
        let "zaman=$sen*60-1"
        let "kes=$zaman/5"
        let "xx=$kes/60"
        echo $zaman
        echo $kes
        let "kalan=$sen-$xx"
        let "kalan1=$sen-$xx*2"
        let "kalan2=$sen-$xx*3"
        let "kalan3=$sen-$xx*4"
        echo $kalan
    else
        let "zaman=$sen*60-1"
        let "kes=$zaman/5"
        echo $zaman
        echo $kes
        let "kalan=$zaman-$kes"
        let "kalan1=$zaman-$kes*2"
        let "kalan2=$zaman-$kes*3"
        let "kalan3=$zaman-$kes*4"
        echo $kalan
fi

if [ $zaman -gt 300 ]
    then
        echo sure="dakika"
        export sure="dakika"
    else
       echo sure="saniye"
       export sure="saniye"
fi


(
echo "10" ; sleep 1
echo "#Sistem $sen dakika sonra kapatılıcak.." ; sleep $kes
echo "20" ; sleep 0
echo "#Bilgisayar  $kalan $sure sonra kapatılıcak"  ; sleep $kes
echo "50" ; sleep 0
echo "#Bilgisayar  $kalan1 $sure sonra kapatılıcak"  ; sleep $kes
echo "75" ; sleep 0
echo "#Bilgisayar  $kalan2 $sure sonra kapatılıcak"  ; sleep $kes
echo "85" ; sleep 0
echo "# Sistem  $kalan3 $sure sonra kapatılıyor..." ; sleep $kes
echo "99" ; sleep 0
$kapat
echo "100" ; sleep 0
) |
zenity --progress  --title="Kapat"  --text="Sistem $sen dakika sonra kapatılıcak.."  --percentage=0
if [ $? -eq 1 ] ; then
    zenity --error  --text="Bilgisayarın Kapatılması İptal Edildi."
    fi

Betiğin çalışma mantığı; öcelikle kullanıcıdan bilgisayarı kapatmak için şifre istiyor,
Dakika olarak zaman girdisi istiyor.
Daha sonra zaman sona erdiğinde sistemi iptal ediyor (;


Orjinal başlık..


** Kodlar Düzenlendi...

Denemek için kodları bir metin belgesine yapıştırıp çalıştırma hakkı vermeniz yeterli...
Dilerseniz oluşturduğunuz dosyaya *.sh uzantısı verebilirsiniz böylece olası herhangibi bir sorunla karşılaşma ihtimaliniz daha da azalır..

barış

#1
Biraz daha açıkla, kodların nasıl kullanılacağı falan gibi mesela :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 13 Şubat 2010 - 12:11:46

Wikiye eklendi.

hitokiri

Alıntı yapılan: barışubuntu - 13 Şubat 2010 - 12:02:23
Biraz daha açıkla, kodların nasıl kullanılacağı falan gibi mesela :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 13 Şubat 2010 - 12:11:46

Wikiye eklendi.
Nasıl bir açıklama ben anlamadım biraz aç @barışubuntu;
Bu arada bi eksiklik farkettim betikte belli bi süreden sonraki sürelerde çalışmıyor root hakkı(ee hep 1 dk denersem farketmem tabii :) ) kayboluyor, çözümü buldum şimdi yarım saatlik deneme aşaması var ,
İşin en sinir bozucu tarafı deneme süresi zaten :)
Bakalım eğer başarılı olursam gerekli düzeltmeyi başlığa geçerim..  :)

erginemr

Elinize sağlık.

Zaten en büyük sorun, bilgisayarı kapatmak için root yetkisi istemesi. Ancak bilgisayarı Gnome arayüzünden (gdm?) root yetkisi almadan kapatabiliyoruz. Yine GShutdown programı da, bilgisayarı root yetkisi olmadan kapatmaya programlanabiliyor. Bence bunu yapabilen komutu da aratırmalısınız.

hitokiri

Alıntı yapılan: erginemr - 13 Şubat 2010 - 14:21:53
Elinize sağlık.

Zaten en büyük sorun, bilgisayarı kapatmak için root yetkisi istemesi. Ancak bilgisayarı Gnome arayüzünden (gdm?) root yetkisi almadan kapatabiliyoruz. Yine GShutdown programı da, bilgisayarı root yetkisi olmadan kapatmaya programlanabiliyor. Bence bunu yapabilen komutu da aratırmalısınız.
Teşekkür ederim @erginemr ;  anlamış değilim sorunu tahmin ettiğim şey olmadı,
Bu yoldan gidince bir şeyler hep eksik kalıcak gibi, o komutu bulmalıyım kesinlikle :)

erginemr

#5
Gnome'un bilgisayarı kapat düğmesinin komutunu hala bulamadım (belki komutu Gnome'un arka plandaki kendi süreci dışında kimse veremiyordur) ama konu ile ilgili benzer bir konu başlığı için:
http://forum.ubuntu-tr.net/index.php?topic=4198.0


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Cts 13 Şub 2010 17:57:46 GMT-2

GShutdown kaynak kodundan bir bölüm:

Alıntı Yap/* GDM */
       if(current_display_manager == DISPLAY_MANAGER_GDM) {
           char action_str[256];
           char command[30];

           if(action_get_type(action) == ACTION_TYPE_SHUTDOWN)
               snprintf(command, 29, "SET_LOGOUT_ACTION HALT");
           else if(action_get_type(action) == ACTION_TYPE_RESTART)
               snprintf(command, 29, "SET_LOGOUT_ACTION REBOOT");
           else
               command[0] == 0;
           
           if(*command) {
               snprintf(action_str, 255, "gdmflexiserver -a --command=\"%s\"", command);
               run_command(action_str);
           }
     
       /* KDM */
       else if(current_display_manager == DISPLAY_MANAGER_KDM) {
           if(action_get_type(action) == ACTION_TYPE_SHUTDOWN)
               run_command("kdmctl shutdown halt forcenow");
           else if(action_get_type(action) == ACTION_TYPE_RESTART)
               run_command("kdmctl shutdown reboot forcenow");
       }

Buna göre, Gnome masaüstü için şu komut root yetkisi olmadan bilgisayarı kapatıyor olabilir:
gdmflexiserver -a --command "SET_LOGOUT_ACTION HALT"

Şu komut da root yetkisi olmadan bilgisayarı yeniden başlatıyor olabilir:
gdmflexiserver -a --command "SET_LOGOUT_ACTION REBOOT"

Veya olmayabilir...  :)

hitokiri

#6
Tam yerini bulmuşum @erginemr çok teşekkürler;
Bu komutla gdmflexiserver -a --command
Gdm ekranını görüyoruz ama gdm ekranından , nasıl bilgisayarı kapatıcaz  :)
Bi daha bakayım şu kaynak dosyasına ; bulcaz gibi  :)
Veya http://forum.ubuntu-tr.net/index.php/topic,4198.0.html
bu başlıktaki anlatımı kurulum dosyası haline getirebilirz ptyhonda, kısayol için şifre istemediği gibi komutta çalışıyor tamamdır :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 13 Şubat 2010 - 18:58:51

Evet biraz saçma oldu ama hazırda bulunsun  :D :D ;
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
import os, time
x = os.getenv('USERNAME')
h = "çıkılıyor"
print "Merhaba " + x
print " Bu komutları açılan pencereden yeni bir satıra eklermisin"
print x  + " ALL= NOPASSWD: /sbin/halt"
print x  + " ALL= NOPASSWD: /sbin/reboot"
s = raw_input("Başlamak için enter'a bas ve şifreni gir")
os.system("export EDITOR=gedit && sudo -E visudo")
z =raw_input("Değişikliklerin etkin olması için bilgisayar yeniden başlatılmalı şimdi yeniden başlatılsın mı [e/h]?")
if  z == "e":
    os.system("sudo reboot")
else:
exit(h)



Denemek için kodları bir metin belgesine yapıştırıp çalıştırma hakkı vermeniz yeterli...
Dilerseniz oluşturduğunuz dosyaya *.py uzantısı verebilirsiniz böylece olası herhangibi bir sorunla karşılaşma ihtimaliniz daha da azalır..

hitokiri

#7
Sonunda birazda olsa derli toplu hâle getirmeyi başardım betiği @heartsmagic'inde yardımı sayesinde :)
#!/bin/bash

ans=$(zenity --title ".: Zkapat :."  --width="640" --height="190" --list --text "Seçiminizi yapın" --radiolist --column "Seç" --column "zkapat" --column "Açıklama"  TRUE "Kurulum" "Bu betik kurulumunu bu seçenekle gerçekleştirebilirsiniz." TRUE1  "Kaldırma" "Bu betiği kaldırma işlemini bu seçenekle gerçekleştirebilirsiniz." ); echo $ans

if [ $? -eq 1 ] ; then
exit 1
fi


case $ans in


"Kurulum")  gksu Kurulum ;
echo '#!/bin/bash

export kapat=" sudo halt"
sen=`zenity --entry --title="Biligisayarı kapat" --text="Dakika olarak bir zaman girniz:      " `
if [ $? -eq 1 ] ; then
exit 1
fi

if [ $sen -gt 5 ]
    then
        let "zaman=$sen*60-1"
        let "kes=$zaman/5"
        let "xx=$kes/60"
        echo $zaman
        echo $kes
        let "kalan=$sen-$xx"
        let "kalan1=$sen-$xx*2"
        let "kalan2=$sen-$xx*3"
        let "kalan3=$sen-$xx*4"
        echo $kalan
    else
        let "zaman=$sen*60-1"
        let "kes=$zaman/5"
        echo $zaman
        echo $kes
        let "kalan=$zaman-$kes"
        let "kalan1=$zaman-$kes*2"
        let "kalan2=$zaman-$kes*3"
        let "kalan3=$zaman-$kes*4"
        echo $kalan
fi

if [ $zaman -gt 300 ]
    then
        echo sure="dakika"
        export sure="dakika"
    else
       echo sure="saniye"
       export sure="saniye"
fi


(
echo "10" ; sleep 1
echo "#Sistem $sen dakika sonra kapatılıcak.." ; sleep $kes
echo "20" ; sleep 0
echo "#Bilgisayar  $kalan $sure sonra kapatılıcak"  ; sleep $kes
echo "50" ; sleep 0
echo "#Bilgisayar  $kalan1 $sure sonra kapatılıcak"  ; sleep $kes
echo "75" ; sleep 0
echo "#Bilgisayar  $kalan2 $sure sonra kapatılıcak"  ; sleep $kes
echo "# Sistem  $kalan3 $sure sonra kapatılıyor..." ; sleep $kes
echo "99" ; sleep 0
$kapat
echo "100" ; sleep 0
) |

zenity --progress  --title="Kapat"  --text="Sistem $sen dakika sonra kapatılıcak.."  --percentage=0
if [ $? -eq 1 ] ; then
zenity --error --text="Hata bilgisayarın kapatılması iptal edildi , çıkılıyor!!" ;
exit 1
fi'  > /tmp/zkapat
(
sudo mv /tmp/zkapat /usr/local/bin/
) |
zenity --progress  --text="Kuruluyor.."   --percentage=0 ;
sudo chmod +x  '/usr/local/bin/zkapat'  ;
echo "#!/usr/bin/env xdg-open

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Icon[tr_TR]=gnome-panel-launcher
Exec=zkapat
Name[tr_TR]=zkapat
Comment[tr_TR]=zkapat
Name=zkapat
Comment=zkapat
Icon=gnome-panel-launcher
Categories=Utility;" >  /tmp/zkapat.desktop
sudo mv  /tmp/zkapat.desktop /usr/share/applications/
sudo chmod +x  '/usr/share/applications/zkapat.desktop'
echo "$USER ALL= NOPASSWD: /sbin/halt"  | sudo tee -a /etc/sudoers



zenity --info --text="zkapat başarıyla kuruldu .Bu betiği çalıştırmak için 'zkapat' komutunu kullanabilirsiniz veya uygulamlar>>donatılardan betiğe ulaşabilirsiniz!!" ;;


"Kaldırma") gksu Kaldırma ;
(
sudo  rm -rf  /usr/local/bin/zkapat ;  sudo rm -rf /usr/share/applications/zkapat.desktop
) |
zenity --progress  --text="Kaldırılıyor.."   --percentage=0 ;
zenity --info --text "zkapat başarıyla kaldırıldı!";;
esac

heartsmagic

Ufacık bir dokunmaya yardım denirse tabii :)
Dediğim gibi zevkle izliyorum, eline sağlık.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

hitokiri

Teşekkür ederim bu arada belirtelim , betik çalışabilmesi için , /etc/sudoers dosyasına halt komutunu o anki kullanıcı için her zaman erişilebilir kılıyor :)