diff options
Diffstat (limited to 'debian/romtal-sistem-dondurma/bin/romtalsd')
-rwxr-xr-x | debian/romtal-sistem-dondurma/bin/romtalsd | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/debian/romtal-sistem-dondurma/bin/romtalsd b/debian/romtal-sistem-dondurma/bin/romtalsd new file mode 100755 index 0000000..0555449 --- /dev/null +++ b/debian/romtal-sistem-dondurma/bin/romtalsd @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +import os +import subprocess +import sys +import gi + +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk + +def run_as_root(cmd_list): + """ + Verilen komut listesini pkexec ile root olarak çalıştırır. + """ + try: + subprocess.run(["pkexec"] + cmd_list, check=True) + except subprocess.CalledProcessError as e: + raise RuntimeError(f"Komut hatası: {e.cmd}, Çıkış kodu: {e.returncode}") + +def get_mount_device(mount_point): + """ + /proc/mounts dosyasını okuyarak, verilen mount noktasının bağlı olduğu cihazı döner. + + Args: + mount_point (str): İncelenecek mount noktası, örneğin "/media/root-ro". + + Returns: + str veya None: Mount edilmiş aygıtın adı (örneğin, "/dev/sda1") + veya belirtilen mount noktası bulunamazsa None. + """ + try: + with open("/proc/mounts", "r") as f: + for line in f: + parts = line.split() + if parts[1] == mount_point: + return parts[0] + except Exception: + pass + return None + +def overlay_status(): + """ + /etc/overlayroot.conf dosyasını ve /media/root-rw mount noktasını kontrol eder: + - Eğer /media/root-rw mount edilmişse, overlay aktif kabul edilir. + - Aksi halde, /etc/overlayroot.conf dosyasını açar; içeriğinde "tmpfs" ifadesi varsa overlay aktif, + yoksa overlay pasif olarak belirlenir. + """ + # İlk olarak /media/root-rw mount edilip edilmediğini kontrol et + if get_mount_device("/media/root-rw"): + return True + + # /etc/overlayroot.conf kontrolü + conf_path = "/etc/overlayroot.conf" + if os.path.exists(conf_path): + try: + with open(conf_path, "r") as f: + content = f.read() + return "tmpfs" in content + except Exception: + return False + else: + # Dosya yoksa paket kontrolü yapılabilir + try: + result = subprocess.run(["dpkg", "-l", "romtal-sistem-dondurma"], capture_output=True, text=True) + return "overlayroot" in result.stdout + except Exception: + return False + +class OverlayrootGUI(Gtk.Window): + def __init__(self): + super().__init__(title="R.O.M.T.A.L Sistem Dondurma") + self.set_default_size(400, 250) + self.set_border_width(20) + + # Stil ayarları + css = b""" + button { + font: 15px Arial; + padding: 10px; + margin: 5px; + } + + """ + style_provider = Gtk.CssProvider() + style_provider.load_from_data(css) + Gtk.StyleContext.add_provider_for_screen( + Gdk.Screen.get_default(), + style_provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + + self.overlay_enabled = overlay_status() + self.create_ui() + + def create_ui(self): + grid = Gtk.Grid(column_spacing=10, row_spacing=10) + + self.enable_btn = Gtk.Button(label="Sistem Dondurma Aktif Et") + self.disable_btn = Gtk.Button(label="Sistem Dondurma Devre Dışı Bırak") + + self.enable_btn.connect("clicked", self.enable_overlayroot) + self.disable_btn.connect("clicked", self.disable_overlayroot) + + self.status_label = Gtk.Label() + self.update_status() + + # Footer label ekliyoruz + self.footer_label = Gtk.Label(label="Made By R.O.M.T.A.L | https://rasimoneltml.meb.k12.tr/") + + grid.attach(self.status_label, 0, 0, 2, 1) + grid.attach(self.enable_btn, 0, 1, 1, 1) + grid.attach(self.disable_btn, 1, 1, 1, 1) + grid.attach(self.footer_label, 0, 2, 2, 1) + + self.add(grid) + + def update_status(self): + status_text = "Şuanki Durum: " + ("Aktif" if self.overlay_enabled else "Devre Dışı") + self.status_label.set_markup(f"<b>{status_text}</b>") + self.enable_btn.set_sensitive(not self.overlay_enabled) + self.disable_btn.set_sensitive(self.overlay_enabled) + + def show_dialog(self, message, is_error=False): + dialog = Gtk.MessageDialog( + parent=self, + flags=0, + message_type=Gtk.MessageType.ERROR if is_error else Gtk.MessageType.INFO, + buttons=Gtk.ButtonsType.OK, + text=message + ) + dialog.run() + dialog.destroy() + + def enable_overlayroot(self, widget): + try: + cmd = [ + "sh", "-c", + ("rm -f /etc/overlayroot.conf && " + "echo 'overlayroot_cfgdisk=\"disable\"' > /etc/overlayroot.conf && " + "echo 'overlayroot=\"tmpfs\"' >> /etc/overlayroot.conf") + ] + run_as_root(cmd) + self.overlay_enabled = True + self.update_status() + self.show_dialog("Overlayroot aktif edildi!\nDeğişikliklerin geçerli olması için yeniden başlatın.") + except Exception as e: + self.show_dialog(f"Hata oluştu: {str(e)}", is_error=True) + + def disable_overlayroot(self, widget): + try: + device = get_mount_device("/media/root-ro") + if not device: + raise RuntimeError("'/media/root-ro' mount edilen cihaz bulunamadı.") + cmd = [ + "sh", "-c", + (f"mount -o remount,rw {device} && " + "rm -f /media/root-ro/etc/overlayroot.conf && " + "echo 'overlayroot_cfgdisk=\"disable\"' > /media/root-ro/etc/overlayroot.conf && " + "echo 'overlayroot=\"\"' >> /media/root-ro/etc/overlayroot.conf") + ] + run_as_root(cmd) + self.overlay_enabled = False + self.update_status() + self.show_dialog("Overlayroot devre dışı bırakıldı!\nDeğişikliklerin geçerli olması için yeniden başlatın.") + except Exception as e: + self.show_dialog(f"Hata oluştu: {str(e)}", is_error=True) + +if __name__ == "__main__": + win = OverlayrootGUI() + win.connect("destroy", Gtk.main_quit) + win.show_all() + Gtk.main() + |