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 .
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 .
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