summaryrefslogtreecommitdiff
path: root/romtal-sistem-dondurma/bin
diff options
context:
space:
mode:
authorSahan Yılmaz <[email protected]>2025-02-23 13:16:00 +0300
committerSahan Yılmaz <[email protected]>2025-02-23 13:16:00 +0300
commit0b4e3ed390b203ea48107ecd3011a5ae0f0a7668 (patch)
tree3578788d58c6b85565583dcd2ea00c67d3ab74c2 /romtal-sistem-dondurma/bin
parent6a4b9b0b467e7958d649cde62a875246fa390931 (diff)
first commit
Diffstat (limited to 'romtal-sistem-dondurma/bin')
-rwxr-xr-xromtal-sistem-dondurma/bin/romtalsd172
1 files changed, 172 insertions, 0 deletions
diff --git a/romtal-sistem-dondurma/bin/romtalsd b/romtal-sistem-dondurma/bin/romtalsd
new file mode 100755
index 0000000..0555449
--- /dev/null
+++ b/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()
+