Linux da usb girişini algılama

Merhabalar, 3.parti kutuphane kullanmadan linuxda usb girip girmedigini nasıl kontrol ederim?
Bu işin dbus modulu(ustelik 3.parti degil,linuxun kendi içinde var) ile yapıldıgını düşünüyorum,ama nasıl kullanılacağını bulamıyorum.Biliyorum pyudev ile yapılacagını,ama mumkun oldugunca 3.parti kutuphane kullanmak istemiyorum.Ne yapmalıyım, neler uzerinden gitmeliyim?

Bi de terminal komutu olarak
udevadm monitor
var ama galiba işimi gormez,ama usb girişini algılıyor.
Kolay gelsin :slight_smile:

Belli aralıklarla lsusb komutunun çıktısını parse ederek önceki ile karşılaştırmayı deneyebilirsiniz.

>>> devices
['1d6b:0003', '0bda:0129', '0bda:57cc', '0489:e09c', '09da:010e', '1d6b:0002']
>>> 
1 Beğeni

Burdan yururum ben,anlayamadıgım yer olursa belirtirim, gerçekten çok teşekkurler.

Kolay gelsin :slight_smile:

Yuruyemedim,yani terminal çıktısı parse edememekten degil,parse ederim ben,sıkıntı yok ama benim bunu terminal çıktısı kullanarak degil,başka turlu halletmem lazım.

dbus la bir şeyler yapabilir miyim diye düşündüm,bence işin kilit noktası dbus modulu,ama kullanamıyorum.Nasıl kullanabilirim ben bunu?

3.part kutuphane de kullanamam,başka bir öneriniz var mı?

  • /media/username çıktısını kontrol et de demeyin,bu da tutarlı bir yol degil,ya user orada hinligine başka bir klasor oluşturursa,sıkıntı.

Kolay gelsin :slight_smile:

Pek uğraşacak vaktim yok ama bu iş için olan kütüphanelerin kaynak kodlarını incelemeyi deneyebilirsiniz.

1 Beğeni

Teşekkürler,bir de dbus dan yurumeye çalışacağım.İlerleme kaydettim ama malesef yine başarısızım.

Sonunda bu işi dbus kutuphanesini kullanarak çözmeyi başardım.

Kodlar:

import dbus

bus = dbus.SystemBus()

obj = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2")

iface = dbus.Interface(obj, "org.freedesktop.DBus.ObjectManager")

for i in iface.GetManagedObjects():
    print(i)

Yararlandıgım link:

Anlayamadıgınız yerde bilgim dahilinde yardımcı olmaya çalışırım.Siz(forumdaki herkes) bu kodları daha da geliştirebilirsiniz.

Kolay gelsin :slight_smile:

simdi bu kod ne ise yariyor ben anlamadim biraz turkcemde sorunlar var lutfen bana anlatirmisiniz?

Hocam tabiki de, belki anlatmam biraz zor olacak ama anlatayım.

Bu kodları çalıştırmadan once usb yi takın çalıştırın,sonra usb yi çıkarın oyle çalıştırın,aradaki farkı daha iyi anlarsınız.

Ben usb nin girip girmedigini anlamaya çalışıyordum.dbus,linuxun kendi içinde olan bir modul.Ben bununla çözdüm sayılabilir sorunu.Gelelim kodlara.

Burada dbus import ediliyor ve System ile ilgili bir şeyler alıyor sanırsam.usb girişi bilgisi buraya gidiyor.

Burada işin usb tarafı lazım bana,buradan usb ile ilgili olan yonu alıyorum.

Burada obj değişkenini anahtar gibi kullanıp bir fantazi yapılıyor.Ama anlamadım.

Son olarak da bu kod parçası çalıştığında içinde usb niz takılı ise o da yazılıyor.

Çözüm sadece bu degil,bir suru degişik şey var orada.Mesela:

import dbus
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
 
bus = dbus.SystemBus()
 
# Function which will run when signal is received
def callback_function(*args):
    print('Received something .. ', args)
 
# Which signal to have an eye for
iface  = 'org.freedesktop.DBus.ObjectManager'
signal = 'InterfacesAdded'
bus.add_signal_receiver(callback_function, signal, iface)
 
# Let's start the loop
import gobject
loop = gobject.MainLoop()
loop.run()

Burada ise surekli olarak durmadan çalışıyor script. gobject kullanılmış.linux mint kullanıyorum ve linux mintte python2 de kendiliginden kurulu iken python3 de import error verdi bende,bu yuzden python2 de dene kodları.Bu scripti çalıştır, Script çalışırken USB tak,sonuca bak,çıkar sonuca bak.

dbus modulu illa sadece USB algılamak için degil,sistem vb gibi işlemler için,Network,Modem,Accounts(pardon ingilizce kaçtı ama) de dbusla yapılıyor.Henuz hakim degilim,bu mesajı yazarken bile yeni şeyler ogreniyorum dbus dan.Guzel kutuphane bence.

Kusura bakma,konuya hakim degilim.Hakim oldukca anlatabilirsem daha iyi anlatmak isterim şahsen.Ama incelemek istiyorsan terminale

sudo apt-get install d-feet 

Yazıp d-feet i kur. Sonra da adamla gitmeye çalış, biliyorum,zor ama anlayacagını umuyorum,ben de anlayamıyorum bazı kısmını.Ama çaba sarfediyorum :slight_smile: .

Bi de sende varsa şu dizini incele:

/usr/share/dbus-1/system-services

Ben bu sorunu üç şekilde halledebilirdim.
Zaten verdigim linkte de belirtilmiş:

  • Direkt kernelle konuş.
  • udev kutuphanesini kullan,bu da beraberinde pyudeve çıkıyor yolu
  • DBus protokolünü kullan.

Bana en uygun dbus protokolu geldi.kernelle konuşmak biraz zordu, yapamazdım.third party library de kullanamayacagımı belirttim.
Son olarak dbus protokolu vardı.ben de bunu kullandım.

Ama bence pyudev kullanın,ben bir şey yuzunden dbus kullanmam lazımdı.

Bu da pyudevli çözüm:

https://gist.github.com/BTaskaya/92066780b20d9a99c37c9f7b27f6dd83

Ve en reyis çözüm :smile::smile::smile:.

Anlayamadıgınız yerde lutfen ama lutfen sorun,zaten anlatmaya devam etecegim inşallah bunu,hala anlamakla ugraşmaktayım😊.

Kolay gelsin iyi de etmişsiniz sormayı,çok teşekkür ederim :slight_smile:

1 Beğeni

tesekkur edrim hocam iyi anlatmiwsiiniz

1 Beğeni

Buyrun burada da anlatmaya çalıştım.

http://cihataltiparmak.byethost17.com/programlama/linux_usb_detect.html

1 Beğeni