Arduino "Permission denied" hatasını çözmek için önce sorunun kodda olmadığını doğrulaman gerekir. Seri Monitör ve portu kullanan diğer uygulamaları kapat, kartın doğru portunu seç, ardından işletim sisteminin bu porta erişim iznini kontrol et. Bu sıra çoğu durumda sorunu bulur ve gereksiz yere kodu değiştirmeni önler.
Permission denied kod hatası mıdır, yoksa erişim sorunu mu?
Çoğu zaman erişim sorunudur. Arduino yazılımı bir taslağı iki aşamada işler: önce kodu derler, sonra derlenen programı seri port üzerinden karta gönderir. Derleme sorunsuz bitip hata yükleme aşamasında geliyorsa, sorun çoğunlukla kodda değil, seri porta erişimdedir.
Permission denied, kodun hatalı olduğunu değil, seri porta erişimin işletim sistemi veya başka bir işlem tarafından engellendiğini gösterebilir.
Derleme hatası bunun tersine kodun kendisini işaret eder. Hata mesajı genellikle bir satır numarası ve eksik noktalı virgül, tanımsız değişken gibi bir açıklama içerir. Yükleme hatasında böyle bir satır numarası bulunmaz; mesaj porttan, aygıttan ya da erişimden söz eder. Mesajın tam metni IDE ve arduino-cli sürümüne, işletim sistemine ve dile göre değişebilir. Bu yüzden birebir cümleye değil, hatanın hangi aşamada geldiğine bakmak daha güvenilir bir ipucudur.
Üç olası kaynağı şu tabloyla ayırabilirsin:
| Teşhis yolu | Tipik belirti | İlk kontrol |
|---|---|---|
| Kod hatası | Hata, derleme aşamasında gelir ve bir satır numarası içerir; yükleme hiç başlamaz. | Hata satırına ve üstündeki satırlara bak, yazım ve tanım hatalarını düzelt. |
| Yanlış port veya kablo | Port listede yoktur ya da listede görünür ama yükleme başarısız olur. | Kartı çıkarıp tak, veri aktarabilen bir kablo kullan, portu ve kartı yeniden seç. |
| İşletim sistemi izni | Port listede görünür, ancak porta erişim reddedilir. | Portu başka bir uygulamanın tutup tutmadığına bak, sonra kullanıcı izinlerini kontrol et. |
Bu ayrım, sonraki adımların sırasını da belirler: önce kodu elemek, sonra fiziksel bağlantıyı, en son izinleri kontrol etmek gerekir.
Hata mesajından teşhise: 5 adımlık kontrol akışı

Aşağıdaki akışı sırayla uygula. Her adımda ne yapacağın, ne görmeyi beklediğin ve beklediğini görmezsen nereye geçeceğin yazılı. Menü adları Arduino IDE sürümüne ve dil ayarına göre değişebilir; aşağıda "Araçlar menüsündeki Port seçeneği" gibi genel ifadeler kullanıldı.
- Hatanın aşamasına bak. Ne yapılacak: Hata mesajının derleme sırasında mı, yükleme sırasında mı geldiğini belirle. Beklenen sonuç: Derleme tamamlanıyor ve hata yükleme aşamasında çıkıyor. Değilse: Hata derleme sırasındaysa bu bir kod hatasıdır; mesajdaki satır numarasına git ve kodu düzelt. Yükleme sırasındaysa 2. adıma geç.
- Kartı çıkarıp tak ve port listesine bak. Ne yapılacak: USB kabloyu karttan ya da bilgisayardan çıkarıp yeniden tak, ardından Araçlar menüsündeki Port seçeneğini aç. Beklenen sonuç: Kartı taktığında listede yeni bir port beliriyor. Değilse: Port hiç görünmüyorsa sorun izin değil bağlantıdır; yazının kablo ve port seçimi bölümüne geç.
- Doğru portu ve kartı seç. Ne yapılacak: Listede beliren portu seç ve Araçlar menüsünden kart modelinin gerçekten elindeki kartla eşleştiğini kontrol et. Beklenen sonuç: Seçimden sonra yükleme denemesi hata vermeden ilerliyor. Değilse: Aynı hatayı alıyorsan 4. adıma geç.
- Portu başka bir işlemin tutup tutmadığına bak. Ne yapılacak: Seri Monitör'ü, Seri Çizici'yi, açık ikinci bir IDE penceresini ve seri bağlantı kuran terminal oturumlarını kapat; sonra yüklemeyi yeniden dene. Beklenen sonuç: Port serbest kalıyor ve yükleme tamamlanıyor. Değilse: Hâlâ erişim reddediliyorsa 5. adıma geç.
- İşletim sistemi izinlerine bak. Ne yapılacak: Kullanıcı hesabının seri port aygıtına erişim yetkisi olup olmadığını kontrol et. Beklenen sonuç: Gerekli izin tanımlandığında yükleme başlıyor. Değilse: Kartı ve kabloyu başka bir bağlantı noktasında dene; Linux kullanıyorsan yazının Linux bölümündeki aygıt dosyası ve kullanıcı grubu adımlarına geç.
Özet kural: önce kod, sonra kablo ve port, sonra başka işlem, en son izin.
Portu başka bir işlem tutuyorsa ne yapmalısın?

Bir seri port aynı anda yalnızca bir uygulama tarafından açık tutulabilir. Port bir programda açıkken başka bir program ona bağlanmaya çalışırsa işletim sistemi erişimi reddedebilir. Bu durumda yükleme sırasında "Permission denied" ya da buna benzer bir mesaj görebilirsin. Windows'ta aynı çakışma çoğunlukla erişim reddedildi anlamına gelen bir ifadeyle çıkar. Mesajın tam metni sürüme ve işletim sistemine göre değişebilir.
Portu tutan program her zaman göze çarpmaz. Şunlara sırayla bak:
- Açık kalmış Seri Monitör ya da Seri Çizici penceresi
- Arka planda duran, kapattığını sandığın eski bir IDE penceresi
- Aynı portu izleyen başka bir terminal oturumu ya da komut satırı aracı
Pratik sıra şöyle: bu pencereleri tek tek kapat, kartın USB kablosunu çıkarıp tak ve yüklemeyi yeniden dene. Kartı yeniden takmak port numarasını değiştirebilir. Bu yüzden yüklemeden önce araçlar menüsünden portu bir kez daha kontrol et.
Linux'ta portu hangi işlemin tuttuğunu görmek için lsof /dev/ttyACM0 komutunu kullanabilirsin. Kartın aygıt adı farklıysa onu yaz; bulmanın yolu sonraki bölümde. Komut çıktı verirse satırlarda işlemin adı (COMMAND), işlem numarası (PID) ve kullanıcı (USER) görünür. Çıktı boşsa o aygıt dosyasını açık tutan bir işlem yok demektir ve sorun muhtemelen çakışmadan değil, izinden kaynaklanıyordur. İşlemi bulduysan önce neyin çalıştığını anla, sonra o programı normal yoldan kapat.
Linux'ta seri port izni: aygıt dosyası ve kullanıcı grubu
Linux'ta kart bir aygıt dosyası olarak görünür ve bu dosyaya yalnızca sahibi ile belirli bir grubun üyeleri yazabilir. Kullanıcın o grupta değilse kodun doğru olsa bile yükleme sırasında izin hatası alabilirsin. Önce kartı tak, sonra aygıt dosyasını bul, izinlerini oku ve gruplarını kontrol et:
ls /dev/ttyACM* /dev/ttyUSB*
ls -l /dev/ttyACM0
groups
sudo usermod -aG dialout $USER
groups
İlk komut kartın aygıt adını gösterir. Kart ve USB çipine göre ad ttyACM0 ya da ttyUSB0 gibi değişebilir. Kalıplardan biri eşleşmezse kabuk o kalıp için "No such file or directory" yazabilir; bu normaldir, eşleşen satırı oku. İkinci komut örnek olarak şuna benzer bir satır verebilir:
crw-rw---- 1 root dialout 166, 0 Oct 31 10:12 /dev/ttyACM0
- c: ilk karakter, dosyanın bir karakter aygıtı olduğunu gösterir.
- root: dosyanın sahibidir.
- dialout: dosyanın grubudur. Bu örnekte yazma izni grup için de açık (
rw), yani bu gruptaki kullanıcılar porta erişebilir. - Son üç karakter (
---) diğer kullanıcıların hiçbir izni olmadığını gösterir.
Üçüncü komut (groups) senin hangi gruplarda olduğunu listeler. Çıktıda dosyadaki grup adı yoksa dördüncü komut seni o gruba ekler. -aG bayrağındaki a önemlidir: mevcut gruplarını silmeden ekleme yapar.
Grup üyeliği, oturum açılırken okunur. Bu yüzden değişikliğin geçerli olması için oturumu kapatıp yeniden açman, gerekirse bilgisayarı yeniden başlatman gerekir. Ardından groups komutunu tekrar çalıştır; listede grubu görüyorsan yüklemeyi yeniden deneyebilirsin.
Grup adı dağıtıma göre değişebilir. Arduino'nun Linux kurulum yönergelerinde Ubuntu ve Debian tabanlı sistemler için dialout geçer; bazı dağıtımlarda ise başka adlar kullanılır. Bu yüzden esas alacağın değer, kendi ls -l çıktındaki grup adıdır. Örnekteki dialout yerine orada gördüğün adı yaz.
Kablo ve port seçimi: yalnızca şarj eden kablo yükleme yapamaz
Bazı USB kabloları yalnızca güç aktarır, içlerinde veri hatları bulunmaz. Böyle bir kabloyla bağlanan kartın ışığı yanar ama bilgisayar kartı bir seri port olarak görmez. Arduino IDE'nin port menüsünde karşına bir giriş çıkmıyorsa ya da seçtiğin port yükleme sırasında hata veriyorsa, kablo ilk kontrol edeceğin noktalardan biridir.
Kabloyu ve girişi değiştirerek dene
- Başka bir kablo tak. Veri aktardığını bildiğin bir kablo kullan, örneğin telefonla dosya aktarırken çalışan bir kablo.
- Başka bir USB girişi seç. Bilgisayarın arka ya da yan tarafındaki farklı bir bağlantı noktasını dene.
- Hub'ı devreden çıkar. Kartı bir USB hub üzerinden bağlıyorsan doğrudan bilgisayara tak.
Beklenen sonuç: port menüsünde yeni bir giriş belirir. Belirmiyorsa sorun büyük olasılıkla kablo, giriş ya da sürücü tarafındadır; kod veya izin ayarlarına bakmadan önce bunları ele.
Kartın portunu çıkar tak yöntemiyle bul
Bilgisayarda birden fazla seri aygıt listelenebilir, bu yüzden doğru portu seçtiğinden emin olmak gerekir. Kartı çıkarıp portlar menüsüne bak, sonra kartı tekrar tak ve menüyü yeniden aç. Listede beliren ve kartı çıkarınca kaybolan giriş kartının portudur. Linux'ta bu giriş çoğunlukla /dev/ttyUSB0 ya da /dev/ttyACM0 gibi görünür; adın sonundaki rakam sistemden sisteme değişebilir. Windows'ta COM ile başlayan, macOS'ta ise /dev/cu. ile başlayan bir ad görürsün.
Sürücü gereksinimi karta göre değişir
Kartın bilgisayara nasıl tanındığı, üzerindeki USB çipine bağlıdır. Bazı kartlar ek sürücü olmadan tanınabilirken bazıları için üreticinin sürücüsü gerekebilir. Hangi duruma girdiğini genel bir kuralla söylemek mümkün değil. Kartının resmî sayfasına ya da Arduino'nun yardım dokümanlarına bakıp kartına uygun adımları izle.
Kablo, giriş ve port seçimi doğruysa ve hata sürüyorsa kontrol akışındaki diğer adımlara, yani portu tutan işlem ile işletim sistemi izinlerine dön.
Permission denied mesajı her zaman kodunla ilgili değildir. Önce kablo ve portu, sonra portu tutan işlemi, en sonda da işletim sistemi izinlerini kontrol edersen sorunun nerede olduğunu çoğu zaman kolayca ayırt edebilirsin.