# Tinkon Yazıcı Agent — kurulum Dükkândaki bir Mac'i "yazıcı köprüsü" yapar: sunucuya **dışa** doğru bağlanıp iş çeker, fişi yazıcının **iç ağ adresine** (ör. `10.0.1.250:9100`) basar. Port yönlendirmesi gerekmez; hat 4G yedeğe düşüp CGNAT'a girse bile çalışır. Mac'e **hiçbir şey kurulmaz** — yalnız macOS'ta zaten olan araçlar kullanılır (`sh · curl · base64 · gunzip · nc · launchctl`). Python **gerekmez** (macOS 12.3'ten beri Python hazır gelmiyor). ## Kurulum (3 adım, terminal yok) 1. tKasa → **Restoran Ayarları → Yazıcılar → Agent** → **"Bu bilgisayar için kurulum dosyası indir"**. Link **tek kullanımlık** ve **15 dakika** geçerlidir; anahtar dosyanın içinde gelir (hiçbir yere bir şey yazmayacaksın). 2. İnen zip'i aç → **`Tinkon Yazici Kur.command`** dosyasına **çift tıkla**. macOS "geliştirici doğrulanamadı" derse: dosyaya **sağ tık → Aç → Aç**. (Bir kez sorulur. Tamamen uyarısız çift tık için Apple Developer ID + notarization gerekiyor.) 3. Pencerede **"TINKON YAZICI AGENT KURULDU"** yazacak — pencereyi kapatabilirsin. Kurulum dosyası şunları kendisi yapar: - kendini `~/Library/Application Support/Tinkon/` altına kopyalar (**sudo yok**, her Mac'te her kullanıcıda çalışır), - ayar dosyasını (anahtar + sunucu + bilgisayar kimliği) yazar, - **launchd servisi** kurar (`com.tinkon.yazici`, `RunAtLoad` + `KeepAlive`, `caffeinate -s` ile → bilgisayar açılınca kendiliğinden başlar, pencere kapanınca ölmez, Mac uyumaz), - iç IP'sini ve bilgisayar adını sunucuya **kendi** bildirir (elle IP girmek yok). ## Doğrulama tKasa → Yazıcılar → Agent kartında **● Canlı** ve bu bilgisayarın adı + iç IP'si listede görünür. Birden fazla bilgisayara kurabilirsin (bugün kasiyerin, yarın müdürün): işi hangisi çekerse o basar, kuyruk atomik olduğu için **aynı fiş iki kez basılmaz**. Baskı yolu ayrıca seçilir — **İnternet** ya da **Lokal**. Agent kurulu olsa bile yol İnternet'te kaldıkça fişler sunucudan gider; **Lokal** seçilince agent üzerinden gider. Otomatik geçiş yoktur (bilinçli karar). ## Kaldırma Zip içindeki **`Tinkon Yazici Kaldir.command`** → çift tık. Servisi durdurur, dosyaları siler. (Kaldırdıktan sonra baskı yolu **Lokal** kalmışsa **İnternet**'e almayı unutma.) ## Sorun giderme | Belirti | Sebep / çözüm | |---|---| | Kartta "Agent yok" | Mac kapalı/uykuda ya da servis çalışmıyor. Log: `~/Library/Application Support/Tinkon/agent.log` | | "anahtar reddedildi (403)" | Anahtar yenilenmiş → tKasa'dan **yeni kurulum dosyası** indir, çift tıkla (üzerine kurar). | | Çift tıklayınca TextEdit açılıyor | Zip'ten çıkarmadan çalıştırdın. Zip'i aç, içindeki `.command` dosyasını kullan (çalıştırma biti zip içinde korunur). | | Test kırmızı ama yazıcı sağlam | Test yolu = baskı yolu. **Lokal**'de iç adres (`ic`) tanımlı olmalı: Yazıcılar → yazıcı → Düzenle → iç adres. | | Wi-Fi yazıcı internette basmıyor | Doğru davranış: Wi-Fi yazıcılar yalnız **Lokal** modda basar (iç ağ adresine). | Servisi elle durdurma/başlatma (gerekirse): launchctl bootout gui/$(id -u)/com.tinkon.yazici launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.tinkon.yazici.plist ## Mimari notlar (bakım) - Kuyruk kv `prnq` (yalnız meta) + baytlar `uploads/prnq/.bin`; can sinyali kv `prnagent` (`agents` listesi = çoklu bilgisayar). Kimlik `config.prnAgent.key`, **`X-Prn-Key`** başlığında. - Agent düz metin uçlarını kullanır: `prn_pull_txt` / `prn_ack_txt` (kabukta JSON ayrıştırmak kırılgan). Başlık: `JOB `. - `tip=test` → agent **yalnız bağlanır**, bayt yazmaz (kağıt harcamaz). Bağlantı testleri seçili moda göre bu yola düşer (`_printertest.php`). - Kurulum paketini `agent_kur.php` üretir: `agent/tkasa-agent.sh` şablonundaki `#__TK_AYAR__` satırını anahtar/URL/kimlik ile değiştirir, elle yazılmış bir STORE zip'e koyar (çalıştırma biti korunsun diye). Jeton `prnkur` kv'sinde, tek kullanımlık.