> ## Documentation Index
> Fetch the complete documentation index at: https://docs.t3gemstone.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Kiosk

> Dokunmatik paneller için kiosk imajı

<Tip>
  Bölüm bitiminde aşağıdaki konularda deneyim kazanacaksınız.

  * Kiosk imajının ne olduğu ve nerelerde kullanılabileceği hakkında bilgi sahibi olmak.
  * Gemstone Kiosk imajını karta yükledikten sonra grafik arayüzü bulunan bir uygulamayı sistem açıldığında otomatik başlatmak
</Tip>

Kiosk ifadesi genellikle, kullanıcının dokunmatik bir ekran aracılığıyla sistemle etkileşimde
bulunduğu bilgisayarlar için kullanılmaktadır. Dokunmatik desteği ve grafik arayüzü bulunmakla birlikte,
Masaüstü bilgisayarlarındaki uygulamaları barındırmayıp çok daha küçük boyutlu hızlı açılan sistemlerdir.
Otonom araçların sürücü konsolları, komuta kontrol panellerindeki yönetim
ekranları, ATM ekranları, sıramatikler vs. örnek olarak verilebilir.

<Note>
  Örnek görselleri inceleyiniz.
</Note>

<AccordionGroup>
  <Accordion title="Cezeri Uçan Araba Komuta Kontrol Paneli">
    <Frame>
      <img height="600" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/S1XNwAfVXiylpyYD/images/cezeri-console.png?fit=max&auto=format&n=S1XNwAfVXiylpyYD&q=85&s=eeb10a7a9306015154a0d4068046bbe2" data-path="images/cezeri-console.png" />
    </Frame>
  </Accordion>

  <Accordion title="TOGG Uçtan Uca Sürücü Konsolu">
    <Frame>
      <img height="600" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/togg-console.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=a073f60199ab350d997d24e8e9fe8b69" data-path="images/togg-console.png" />
    </Frame>
  </Accordion>

  <Accordion title="Tesla Sürücü Konsolu">
    <Frame>
      <img height="600" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/tesla-console.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=1499dc29e26b60e92d97e628ead01dbe" data-path="images/tesla-console.png" />
    </Frame>
  </Accordion>

  <Accordion title="SpaceX Dragon Kapsülü Komuta Kontrol Paneli">
    <Frame>
      <img height="600" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/S1XNwAfVXiylpyYD/images/dragon-console.png?fit=max&auto=format&n=S1XNwAfVXiylpyYD&q=85&s=20923fbafacdb2eb1115b9d271da73e4" data-path="images/dragon-console.png" />
    </Frame>
  </Accordion>
</AccordionGroup>

## 1. Özellikler

Linux sistemlerde grafik uygulamalarını çalıştırmak için birden fazla yöntem ve grafik alt sistemi bulunur. Bu
yöntemler, uygulamaların görsel içeriği işleme ve ekrana yansıtma şekillerine göre farklılık gösterir.

* **X11 (X Window System)**, geleneksel ve en yaygın kullanılan pencere sistemidir; istemci-sunucu mimarisiyle çalışır
  ve ağ üzerinden uygulamaların görüntülenmesine izin verir.
* **Wayland** ise X11'in yerini almak üzere tasarlanan modern bir
  protokoldür ve daha basit, performans odaklı bir yapı sunar; doğrudan çekirdek modülü olan DRM/KMS ile iletişim kurarak
  daha az gecikmeli bir deneyim sağlar.
* **DirectFB**, gömülü sistemlerde sıklıkla tercih edilen hafif bir grafik
  kütüphanesidir ve doğrudan framebuffer üzerinden çizim yapar, bu da X11 veya Wayland gibi karmaşık
  katmanlar olmadan hızlı grafik işleme imkanı tanır.
* **LinuxFB**, doğrudan
  Linux çekirdeğinin framebuffer aygıtına erişen basit bir yöntemdir ve özellikle düşük kaynaklı sistemlerde
  kullanışlıdır, ancak gelişmiş grafik özelliklerinden yoksundur.

Bunların haricinde GUI projelerinde kullanılan
Qt veya GTK gibi grafik araçları da çeşitli grafik sistemleriyle entegre çalışabilir. Örneğin, Qt uygulamaları
**eglfs (Embedded OpenGL Full Screen)** gibi platform eklentileriyle doğrudan framebuffer veya Wayland üzerinde
çalıştırılabilir.

Her bir yöntem, farklı kullanım senaryolarına hitap eder ve performans, uyumluluk veya kaynak kullanımı gibi faktörlere
göre seçilebilir. Gemstone Kiosk imajında **X11** tercih edilmiştir. Bu seçimde X11'in en yaygın grafik sistemi olması
ve birçok yazılımla uyumlu olması etkili olmuştur.

X11 üzerinde kiosk uygulamasını tam ekran göstermek için son derece
konfigüre edilebilir olan ve az sistem kaynağı kullanan **Openbox** pencere yöneticisi tercih edilmiştir.
Kiosk ihtiyaçlarına uygun olması için Openbox ayarlarından (`$HOME/.config/openbox/rc.xml`)
pencere kenarlıkları, başlık, yönetim tuşları, sürükleme, klavye kısayol tuşları vb. işlevler devre dışı
bırakılmıştır.

## 2. Kurulum

[Hızlı Başlangıç](../quickstart#1-kurulum) bölümündeki anlatıldığı şekilde Gemstone'u bilgisayarınıza
bağlayarak Gemstone Imager isimli uygulamayı başlatarak **Operating System** bölümüne tıklayınız.

<Frame>
  <img src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/gem-imager/select-os.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=229ae8eec777891c973747f9c63cc256" width="820" height="655" data-path="images/gem-imager/select-os.png" />
</Frame>

Operating System seçim ekranında Ubuntu veya Debian imajlarına tıkladığınızda aşağıdaki gibi Desktop,
Kiosk ve Minimal seçenekleri listelenecektir. Kiosk imajını seçerek yazma işlemini tamamlayınız.

<Frame>
  <img src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/gem-imager/select-kiosk.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=5515f5232b91738fab1fc61905ee880c" width="820" height="655" data-path="images/gem-imager/select-kiosk.png" />
</Frame>

İmaj yükleme işlemi tamamlandıktan sonra Gemstone'a güç verdiğinizde varsayılan olarak aşağıdaki
gibi **Demo** uygulaması açılacaktır. Demo uygulaması PyQt6 ile geliştirilmiştir. Kaynak kodlarına
[t3gemstone/examples](https://github.com/t3gemstone/examples/tree/main/gui) reposundan erişebilirsiniz.

<Frame caption="Todo: Kiosk GCS">
  <img style={{height: "300px", width: "auto"}} className="rounded-lg" noZoom src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/under-construction.png?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=272252292237340bb9c15e3cfc27ebc1" width="1038" height="1002" data-path="images/under-construction.png" />
</Frame>

## 3. Konfigürasyon

<Note>
  X11 istemcileri `DISPLAY` çevre değişkenini kullanarak görüntünün nerede gösterileceğine karar verir.
  Seri terminal ya da SSH ile bağlanıldığında `DISPLAY` çevre değişkeninin manuel olarak ayarlanması gerekir.
  Bu değişkenin formatı `<host adı>:<görüntü sunucusu numarası>.<ekran numarası>` şeklindedir.
  Görüntü sunucusu localhost'ta çalışıyorsa host adı boş bırakılır. Aşağıda örnek kullanıma yer verilmiştir.
  Uç durumlar haricinde `DISPLAY=:0.0` kullanımı yaygındır.

  ```bash theme={"system"}
  ubuntu@host:~$ ssh gemstone@10.0.0.1 DISPLAY=:0.0 xrandr --query
  ```

  * Görüntü sunucusu Gemstone kart içinde çalıştığından biz de SSH ile bu karta bağlandığımızdan host adı boş bırakılmıştır.
  * Modern sistemlerde tek görüntü sunucusu çalıştığı için `0` numaralı sunucuya bağlanılmıştır.
  * Modern sistemlerde çoklu monitör kullanılsa bile tek sanal ekran şeklinde ayarlandığı için `0` numaralı ekrana
    bağlanılmıştır.
</Note>

Gemstone karta [seri port ya da SSH](../quickstart#2-1-seriport) aracılığıyla bağlandıktan sonra gerekli ayarları
`$HOME/kiosk.environment` dosyasından çevre değişkenler yardımıyla yapabilirsiniz. Bu dosyada yer alan çevre değişkenler
ve işlevleri aşağıdaki tabloda listelenmiştir.

| Çevre Değişken             | Varsayılan Değer                  | İşlev                                                      |
| -------------------------- | --------------------------------- | ---------------------------------------------------------- |
| `PATH`                     | `$HOME/bin:$PATH`                 | Uygulamaların aranacağı dizinler                           |
| `LD_LIBRARY_PATH`          | `/usr/local/qt6:$LD_LIBRARY_PATH` | Dinamik kütüphanelerin (.so) aranacağı dizinler            |
| `KIOSK_RESOLUTION`         | `800x600`                         | Ekran çözünürlüğü                                          |
| `KIOSK_REFRESH_RATE`       | `60`                              | Ekran yenileme hızı                                        |
| `KIOSK_LOG_PATH`           | `$HOME/kiosk.log`                 | Uygulama stdout ve stderr çıktılarının kaydedileceği dizin |
| `KIOSK_LOG_MAX_SIZE_BYTES` | `104857600`                       | Byte cinsinden log dosyasının maksimum boyutu              |
| `KIOSK_BIN`                | `kiosk`                           | Çalıştırılacak uygulama                                    |

Ayarlarda yapılan değişikliklerin geçerli olması için aşağıdaki komut yardımıyla Openbox oturumunu yeniden
başlatmanız yeterlidir.

```bash theme={"system"}
gemstone@t3-gem-o1:~$ DISPLAY=:0.0 openbox --exit
```

Ekranınız için geçerli çözünürlük ve yenileme hızı değerlerini aşağıdaki komut ile listeleyebilirsiniz.

```bash theme={"system"}
gemstone@t3-gem-o1:~$ DISPLAY=:0.0 xrandr --query
# Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8096 x 8096
# HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
#    1920x1080     60.00*+  50.00    59.94
#    1680x1050     59.88
#    1600x900      60.00
#    1280x1024     75.02    60.02
#    1440x900      59.90
#    1366x768      59.79
#    1152x864      75.00
#    1280x720      60.00    50.00    59.94
#    1024x768      75.03    70.07    60.00
#    832x624       74.55
#    800x600       72.19    75.00    60.32    56.25
#    720x576       50.00
#    720x480       60.00    59.94
#    640x480       75.00    72.81    60.00    59.94
#    720x400       70.08
```

Kiosk uygulaması varsayılan olarak `$HOME/bin/kiosk` dizininde yer alır. Uygulamayı değiştirmek ya da güncellemek için
aşağıda gösterildiği şekilde
`scp` ile bu dizine yeni uygulamayı gönderdikten sonra Openbox oturumunu yeniden başlatınız.

```bash theme={"system"}
ubuntu@host:~$ scp kiosk gemstone@10.0.0.1:bin/kiosk
ubuntu@host:~$ ssh gemstone@10.0.0.1 DISPLAY=:0.0 openbox --exit
```

## 4. Mimari

Gemstone karta güç verilmesinden kiosk uygulamasının gösterilmesine kadar gerçekleşen aşamalar aşağıda listelenmiştir.

1. Systemd `getty@tty1` servisini başlatır. Bu servis tty1 isimli terminalden `gemstone` kullanıcısına otomatik login
   olur.
2. `gemstone` kullanıcısının varsayılan shell'i yani `/bin/bash` başlatılır.
3. Bash shell tarafından `$HOME/.profile` scripti çalıştırılır. Bu script içinde X11'in görüntü sunucusu olan **Xserver**'ı
   başlatan `startx` komutu yer alır. Xserver herhangi bir sebeple çökerse durum systemd journal'a `kiosk` etiketi ile
   kaydedilir ve `startx` tekrar çalıştırılır.
4. Xserver tarafından `$HOME/.xinitrc` scripti çalıştırılır. Bu script içinde Openbox oturumunu başlatan `exec openbox-session`
   komutu yer alır.
5. Openbox tarafından `$HOME/.config/openbox/autostart` scripti çalıştırılır. Bu script içinde `KIOSK_BIN` çevre değişkeni
   ile tanımlanan uygulama çalıştırılır. Bu uygulamanın stdout ve stderr çıktıları `KIOSK_LOG_PATH`
   çevre değişkeni ile tanımlanan dosyaya kaydedilir. Kiosk uygulaması herhangi bir sebeple çökerse durum systemd
   journal'a `kiosk` etiketi ile kaydedilir ve uygulama tekrar çalıştırılır.

## 5. Son

Desktop imajına kullanıcı adı ve şifre ile giriş yapılabilirken, Kiosk isimli imaj yalnızca belirlediğiniz uygulamanın
otomatik başlatıldığı ve sisteme ekran üzerinden erişim imkanının olmadığı imaj türüdür.
