Sistem Asistanı (Eski Pardus Yardımcı)

böylesi daha iyi bana göre . 1 defa indirirsin tüm bağımlılıklar ile birlikte format çektiğinde tekrar kurarsın deb paketinden. internet gerekmez . Öteki türlü her formatta bağımlılık indirmek zorundasın . Benim internetim Mobil veri benim gibiler için önemli .

1 Beğeni

Uygulamanın kendi simgesinde değilde yeni pencerede dişli şeklinde gözükme sebebini çözdüm inşâallâh .
Paket oluştururken dosya yollarını 2 örnek yol ile yaparak çözdüm . Orada karışıklık yapınca ikonu okuyamıyor tahminimce gidiyor yeni sekmede acayip bir ikonda açıyor :slight_smile: Klasör dizilimini hatalı yaptınmı sistem okuyamıyor tahminimce . Bu kendi tecrubeme göre yorum . Dep paketi yaparken aşağıdaki gibi yaptım


Ekran Görüntüsü 2025-12-14 21-02-28

Ek öneri:
Başka bir bilgisayara daha (1366x768) kurduğumda, uygulama penceresi için belirlenmiş minimum yükseklik biraz fazla geldi, 700 piksele kadar küçülebilirse daha iyi olabilir…

1 Beğeni

Sadi hocam onu ayarlayım teşekkürler.

  • Önceki mesajınızda “sistem temizliği” konusundan bahsetmiştiniz bleachbit mantığı diyelim zaten dikkat ettiyseniz kısmi bir temizlik yapıyor, yani sisteminize zarar verecek herhangi bir dosyaya müdahele etmiyor.

  • Ping (ağ hız testi bölümü) sudo istediğinden malum yetki girişi istiyor ama çalışıyor.

Neden RAM Miktarı Daha Az Görünüyor?

  • psutil.virtual_memory().total (kodunuzda kullanılan yöntem), Linux’ta sistemin kullanıma açtığı (usable) RAM miktarını verir.
  • Fiziksel RAM’in bir kısmı şu nedenlerle rezerve edilir ve uygulamalara sunulmaz:
    • Entegre GPU (iGPU) varsa (Intel/AMD işlemcilerde yaygın), BIOS/UEFI otomatik olarak 512 MB – 2 GB arası RAM’i grafik için ayırır (shared memory).
    • Kernel, BIOS/firmware, ACPI tabloları, IOMMU ve diğer düşük seviye donanım ihtiyaçları için küçük miktarlar (genellikle 100-500 MB) rezerve eder.
    • Bellek haritasında “holes” (boşluklar) olabilir, bunlar da toplamı düşürür.
  • Sonuç: 40 GB takılı RAM’de 38-39 GB usable görmek tamamen normal. Örneğin:
    • 16 GB takılı → ~15.7-15.8 GB gösterir.
    • 64 GB takılı → ~62-63 GB gösterir.

Bu, bir hata değil; Linux kernel’in güvenli çalışması için tasarlanmış bir davranış.

Böyle bir durumdan ötürü ram birebir tutmaması normalmiş, ben de çok takılmadım :slight_smile:

1 Beğeni

v1.1 yayında

Sistem Temizliğini daha gelişmiş, açık, anlaşılır ve kontrollü bir şekilde yapıyor. Tüm detayları kullanıcıya gösteriyor ve stabil çalışıyor. (Sisteme zarar verecek herhangi bir dosya vb müdahale etmeden güvenli temizlik yapıyor)

Usb Iso Yazdırıcı (rufus vb gibi), açıklamalar eklendi ve sistemin kendi penceresinde tüm işlemi gerçekleştiriyor, açık şeffaf ve kolay kullanımlı oldu. Herhangi bir iso imajını “dd” modda istediğiniz taşınabilir diske yazmakta

Pencere boyut sorunu daha küçük ekranlı cihazlarda rahat kullanım sağlanabilmesi amacı ile pencere boyutu küçültüldü, notebook gibi küçük ekranlarda daha kullanıcı dostu bir ekran olması sağlandı. @Sadi bey’in önerisiydi teşekkürler

Proje sürümlerini kendi sayfam tarikvardar.com.tr ve ya github sayfasından inceleyebilirsiniz, indirip kolaylık ile kurabilir / kullanabilirsiniz.

3 Beğeni

Artık minimum pencere yüksekliği görece daha küçük ekranlara da uygun hale gelmiş.
Daha önce yeterince açıklayamadığım bir husus: Sistem Asistanı uygulamasının parola gerektirmesi.
Gerek Debian 14 (deneme sürümü) gerekse Debian 13 (kararlı sürümü) / Pardus 25 KDE Plasma masaüstü ortamında uygulama açılırken parola sormuyor - ki bu güzel çünkü daha sonraki işlemlerin çoğu için bu gerekli değil - fakat sudo parolası gereken bazı işlemlerde soruyor. Benim kullandığı bu 2 sistemde bunun tek istisnası Ping oluyor. Yenilerde bu komut için de sudo parolası istenir oldu ve sanırım bu yüzden HATA veriyor (ilk paylaştığım ekran görüntüsündeki gibi). Ancak uygulamayı sudo sistem-asistani komutuyla başlatınca bu sorun olmuyor fakat bence mümkünse en iyisi (diğer bir iki tanesi gibi) uygulama içinde Ping testi yapmak istendiğinde parola sorulması olur.

@Sadi hocam kendim performans için xfce kullanıyorum. gnome, cinnamon vb sanal makinede denedim, ping attığımızda yani hız testinde sudo ile başlatsanız bile şifre soruyor ama, inceleyeceğim. Girişte sudo sormamması programın açılış stabilitesi için önemlive dediğiniz gibi şifre sormaz açılışta. Ama hız testi, temizlik vb müdahale edeceği yerlerde debian 13 pardus 25 şifre soruyor. yine de sıkıntı varsa haberleşelim özel mesajdan da bildirebilirsiniz

Ben konuyu çok net anladığımı söyleyemem. Ancak şunu anladım, program açılır açılmaz şifre mi soruyor? Bunun artıları da var, eksileri de var.

Programın yetkili açılarak, her işlemde ayrı ayrı parola sormaması bir yerde iyidir.

Programın normal açılarak her işlem için ayrı ayrı parola sorması da uygundur.

Sırf böyle bir değişiklik için yüzlerce satırı elden geçirmek zorunda kalacaksınız ve biraz boşa mesai gibi olacak. Yine de siz bilirsiniz. Ben duruma göre her ikisini de tercih edebiliyorum (nasıl bir program yaptığıma bağlı).

Bleachbit, “as root” seçeneğiyle başlatırsanız başlangıçta parola sorar. Normal başlatırsanız sormaz.

Pardus Başlangıç Onarma, parola sormadan açılır. Ama yetki gereken durumlarda sorar.

Her ikisi de aynı kapıya çıkıyor.

1 Beğeni

Şu andaki durum (yani, bir kez açılışta şifre sorup bir daha sormamak yerine, ancak birkaç gerekli durumda şifre sormak) bence en iyisi, çünkü Sistem Asistanı standart kullanıcı seviyesinde de kullanışlı özelliklerle dolu.
Hem Debian 14’te hem de Debian 13 ve Pardus 25’te benim karşılaştığım sorun şu: Ağ_DNS / Ağ ve Hız Testi sayfasındaki Ping testi şifre sormak yerine doğrudan “Hata” veriyor. Ancak Sistem Asistanı sudo ile başlatıldığında Ping testi çalışıyor - fakat bu tercih edilmeyen bir seçenek.
Bu konuları pek bilmiyorum şahsen fakat anlaşılan ping komutunun sudo olmadan kullanıma açık olması güvenlik açısından riskli bulunmuş ki böyle bir değişikliğe gidilmiş. Bu yüzden “Ping Testi” olayını gözden geçirmekte fayda var gibi görünüyor.
Ağ/İnternet bağlantısının kontrolü için artık başka yöntemleri kullanmak daha uygun olabilir belki.
Örneğin, nc -zvw3 1.1.1.1 443 ve curl -I https://google.com komutu bu bakımdan oldukça kullanışlı olabilir.

1 Beğeni

Düzeltme!! Ben yanlış anladım hocam kusura bakmayın;

Evet Ağ_Dns menüsü içerisinde ping, wifi tarama, dns değiştirme ve hız testi bulunmakta.

Evet sudo şifresi sormuyor ve bu şekilde ping komutunu çalıştırıyor.

Siz de direk çalışmadığı gibi “Hata” verip kapanıyor.

Sudo kontrolü Debian 14 te sorun çıkarıyor olabilir. Onun için bir güncelleme / sudo kontrolü yapayım umarım o zaman sorun çözülür.

Ancak bende Pardus 25 kullanmaktayım ve hata vermeden, sudo şifresi sormadan direk ping ve hız testi çalışıyor.

1 Beğeni

Bu arada @Sadi hoca ısrarla Debian 13, Debian 12 dediniz, ben kodların yoğunluğundan alışkanlık gereği 11, 12 yazmıştım github ve kendi web sitemde düzelttim. Teşekkürler.

2 Beğeni

Hala kullanmayıp, öneride bulunmayan bir çok kişi var sanırım. Yorum ve desteklerinizi bekliyorum!!

1 Beğeni

fazlası için www.tarikvardar.com.tr

1 Beğeni

Buradaki set içinde benim en sık kullandığım İnternet Hız Testi oluyor genellikle.
Bu yüzden YZ’ye GitHub projesinin URL adresini ve ilgili sayfanın da sadece hız testi ile ilgili kısımlarını gösterip bana sadece tek tıkla İnternet hız testi yapacak bir Python betiği oluşturmasını rica ettim; sonuç tam istediğim gibi oldu.
Bence bunu da ayrı bir küçük proje olarak eklemek iyi fikir olabilir.
Hatta en iyisi bunun çok dilli (başlangıç olarak İngilizce, Türkçe) ve başka diller de eklenebilecek şekilde yapılması harika olur.

#!/usr/bin/env python3
"""
Internet Speed Test
PyQt6-based speed test tool that measures download and upload speeds
"""

from PyQt6.QtWidgets import (
	QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel,
	QGroupBox, QPushButton, QProgressBar, QMessageBox
)
from PyQt6.QtCore import Qt, QThread, pyqtSignal
from PyQt6.QtGui import QFont
import sys
import requests
import time
import threading

# --- NETWORK TASK WORKER ---
class NetworkTask(threading.Thread):
	"""Background thread for network operations"""
	def __init__(self, url, mode='dl', data=None):
		super().__init__()
		self.url = url
		self.mode = mode
		self.data = data
		self.bytes_transferred = 0
		self.running = True
		self.daemon = True

	def run(self):
		try:
			if self.mode == 'dl':
				# Download mode
				while self.running:
					response = requests.get(self.url, stream=True, timeout=5)
					for chunk in response.iter_content(chunk_size=8192):
						if not self.running:
							break
						if chunk:
							self.bytes_transferred += len(chunk)
			elif self.mode == 'ul':
				# Upload mode
				while self.running:
					response = requests.post(self.url, data=self.data, timeout=5)
					if not self.running:
						break
					self.bytes_transferred += len(self.data)
		except Exception:
			pass

	def stop(self):
		self.running = False

# --- SPEED TEST WORKER ---
class SpeedTestWorker(QThread):
	"""Worker thread for speed test"""
	result_signal = pyqtSignal(str, str)
	progress_signal = pyqtSignal(int, float)

	def __init__(self):
		super().__init__()
		self.running = True
		self.thread_count = 4
		self.test_duration = 10

	def run(self):
		try:
			# DOWNLOAD TEST
			self.result_signal.emit("Status", "Measuring Download Speed...")
			url = "http://speed.cloudflare.com/__down?bytes=50000000"
			workers = []

			for _ in range(self.thread_count):
				task = NetworkTask(url, mode='dl')
				task.start()
				workers.append(task)

			start_time = time.time()
			last_bytes = 0
			last_check = start_time
			speed_samples = []

			while time.time() - start_time < self.test_duration and self.running:
				time.sleep(0.5)
				now = time.time()
				current_total_bytes = sum(w.bytes_transferred for w in workers)
				bytes_delta = current_total_bytes - last_bytes
				time_delta = now - last_check

				if time_delta > 0:
					instant_speed = (bytes_delta * 8) / (time_delta * 1000000)
					if (now - start_time) > 2:
						speed_samples.append(instant_speed)
					progress = int(((now - start_time) / self.test_duration) * 100)
					self.result_signal.emit("Download", f"{instant_speed:.1f} Mbps")
					self.progress_signal.emit(progress, instant_speed)
					last_bytes = current_total_bytes
					last_check = now

			for w in workers:
				w.stop()
				w.join(timeout=1)

			final_dl_speed = 0.0
			if speed_samples:
				speed_samples.sort()
				top_samples = speed_samples[int(len(speed_samples)*0.5):]
				if top_samples:
					final_dl_speed = sum(top_samples) / len(top_samples)
				else:
					final_dl_speed = max(speed_samples)

			self.result_signal.emit("Download", f"{final_dl_speed:.2f} Mbps")
			self.progress_signal.emit(100, final_dl_speed)

			if not self.running:
				return
			time.sleep(1)

			# UPLOAD TEST
			self.result_signal.emit("Status", "Measuring Upload Speed...")
			workers = []
			data = b'0' * 524288

			for _ in range(self.thread_count):
				task = NetworkTask("http://speed.cloudflare.com/__up", mode='ul', data=data)
				task.start()
				workers.append(task)

			start_time = time.time()
			last_bytes = 0
			last_check = start_time
			speed_samples = []

			while time.time() - start_time < self.test_duration and self.running:
				time.sleep(0.5)
				now = time.time()
				current_total_bytes = sum(w.bytes_transferred for w in workers)
				bytes_delta = current_total_bytes - last_bytes
				time_delta = now - last_check

				if time_delta > 0:
					instant_speed = (bytes_delta * 8) / (time_delta * 1000000)
					if (now - start_time) > 2:
						speed_samples.append(instant_speed)
					progress = int(((now - start_time) / self.test_duration) * 100)
					self.result_signal.emit("Upload", f"{instant_speed:.1f} Mbps")
					self.progress_signal.emit(progress, instant_speed)
					last_bytes = current_total_bytes
					last_check = now

			for w in workers:
				w.stop()
				w.join(timeout=1)

			final_ul_speed = 0.0
			if speed_samples:
				speed_samples.sort()
				top_samples = speed_samples[int(len(speed_samples)*0.5):]
				if top_samples:
					final_ul_speed = sum(top_samples) / len(top_samples)
				else:
					final_ul_speed = max(speed_samples)

			self.result_signal.emit("Upload", f"{final_ul_speed:.2f} Mbps")
			self.progress_signal.emit(100, final_ul_speed)
			self.result_signal.emit("Status", "Test Completed")
			self.result_signal.emit("Done", "Done")

		except Exception as e:
			self.result_signal.emit("Error", str(e))

	def stop(self):
		self.running = False

# --- MAIN APPLICATION ---
class SpeedTestApp(QWidget):
	def __init__(self):
		super().__init__()
		self.init_ui()

	def init_ui(self):
		self.setWindowTitle("Internet Speed Test")
		self.setMinimumSize(600, 400)

		layout = QVBoxLayout(self)
		layout.setSpacing(20)
		layout.setContentsMargins(50, 50, 50, 50)

		# Title
		title = QLabel("<h1 style='color:#33AADD; text-align:center'>Internet Speed Test</h1>")
		title.setAlignment(Qt.AlignmentFlag.AlignCenter)
		layout.addWidget(title)

		# Status label
		self.lbl_status = QLabel("Ready to Start")
		self.lbl_status.setAlignment(Qt.AlignmentFlag.AlignCenter)
		self.lbl_status.setStyleSheet("font-size: 14pt; color: #555;")
		layout.addWidget(self.lbl_status)

		# Progress bar
		self.progress_bar = QProgressBar()
		self.progress_bar.setTextVisible(False)
		self.progress_bar.setFixedHeight(10)
		self.progress_bar.setStyleSheet("""
			QProgressBar {
				border-radius: 5px;
				background: #e0e0e0;
			}
			QProgressBar::chunk {
				background-color: #33AADD;
				border-radius: 5px;
			}
		""")
		layout.addWidget(self.progress_bar)

		# Speed display boxes
		speed_layout = QHBoxLayout()

		# Download box
		box_download = QGroupBox("Download")
		box_download.setStyleSheet("font-weight: bold; padding: 10px;")
		dl_layout = QVBoxLayout(box_download)
		self.lbl_download = QLabel("-")
		self.lbl_download.setAlignment(Qt.AlignmentFlag.AlignCenter)
		self.lbl_download.setStyleSheet("font-size: 24pt; font-weight: bold; color: #27ae60;")
		dl_layout.addWidget(self.lbl_download)

		# Upload box
		box_upload = QGroupBox("Upload")
		box_upload.setStyleSheet("font-weight: bold; padding: 10px;")
		ul_layout = QVBoxLayout(box_upload)
		self.lbl_upload = QLabel("-")
		self.lbl_upload.setAlignment(Qt.AlignmentFlag.AlignCenter)
		self.lbl_upload.setStyleSheet("font-size: 24pt; font-weight: bold; color: #e74c3c;")
		ul_layout.addWidget(self.lbl_upload)

		speed_layout.addWidget(box_download)
		speed_layout.addWidget(box_upload)
		layout.addLayout(speed_layout)

		# Start button
		self.btn_start = QPushButton("🚀 START TEST")
		self.btn_start.setFixedSize(220, 60)
		self.btn_start.setStyleSheet("""
			QPushButton {
				background-color: #e67e22;
				color: white;
				font-size: 14pt;
				border-radius: 30px;
				font-weight: bold;
			}
			QPushButton:hover {
				background-color: #d35400;
			}
			QPushButton:disabled {
				background-color: #95a5a6;
			}
		""")
		self.btn_start.clicked.connect(self.start_test)

		layout.addStretch()
		layout.addWidget(self.btn_start, alignment=Qt.AlignmentFlag.AlignCenter)
		layout.addStretch()

	def start_test(self):
		self.btn_start.setText("Testing...")
		self.btn_start.setEnabled(False)
		self.progress_bar.setValue(0)
		self.lbl_download.setText("-")
		self.lbl_upload.setText("-")

		self.worker = SpeedTestWorker()
		self.worker.result_signal.connect(self.handle_result)
		self.worker.progress_signal.connect(self.update_progress)
		self.worker.start()

	def update_progress(self, progress, speed):
		self.progress_bar.setValue(progress)

	def handle_result(self, result_type, value):
		if result_type == "Done":
			self.btn_start.setText("Restart Test")
			self.btn_start.setEnabled(True)
			self.progress_bar.setValue(100)
		elif result_type == "Error":
			QMessageBox.critical(self, "Error", value)
			self.btn_start.setEnabled(True)
		elif result_type == "Download":
			self.lbl_download.setText(value)
		elif result_type == "Upload":
			self.lbl_upload.setText(value)
		elif result_type == "Status":
			self.lbl_status.setText(value)

def main():
	app = QApplication(sys.argv)

	# Set application style
	app.setStyle('Fusion')

	window = SpeedTestApp()
	window.show()

	sys.exit(app.exec())

if __name__ == '__main__':
	main()
2 Beğeni

@Sadi Hocam en kısa zamanda fırsatım olduğunda sizin için onu da deneyeceğim

1 Beğeni

Aslında “benim için” bu kadarı yeterli - emeğiniz için çok teşekkürler.
Fakat “sizin için” GitHub platformunda oldukça popüler bir uygulama ortaya çıkabilir böylelikle diye düşünüyorum.
Şimdiye kadar ben https://www.speedtest.net adresindeki hız testini, daha doğrusu onun Linux kabuk betiğini kullanıyordum, fakat ona bu şekilde bir grafik arayüz eklemeyi becerememiştim.
Diğer işletim sistemlerini bilmiyorum fakat en azından Linux kullanıcıları için sizinki göze daha güzel görünüyor.
speedtest-ookla

1 Beğeni