Linux'de kendi arayüzümü nasıl oluştururum?

Başlatan Katsuro, 23 Kasım 2016 - 15:14:35

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Katsuro

Merhaba konuyu yanlış yere açtıysam lütfen kusura bakmayın.

Yaklaşık bir senedir ubuntu kullanıyorum gtk ile ufak tefek programlar yapıyorum. Sormak istediğim soru şu;
Yaptığım bir pencere uygulamasının bilgisayar açılınca otomatik olarak nasıl çalıştırırım? Yani Gnome masaüstü açılmadan direk benim yaptığım uygulamanın çalışmasını ve ekranı kaplamasını sağlamak. Diğer bütün donanımlar, dosya sistemleri arkaplanda çalışmalı.

Bu konuda bana yol gösterirseniz çok sevinirim.

Erdem

Çok kolay.

Sol üstte bulunan Ana Seçke'yi tıklayın. Ara kısmına Başlangıç Uygulamaları yazın.



Buraya yazdığınız programın ismini ve bilgilerini yazın.



Bilgisayarı açtığınızda programın çalıştığını görebilirsiniz. Programı tam ekran yapmayı sanırım uygulama tarafında yapabilirsiniz.

mhmtkrktr

 _ Linux pencere yöneticileri _ konularını da inceleyebilirsin.

Toor

Wayland ya da xorg mutlaka kullanmalısınız. Bunların kütüphanelerini öğrenmeniz gerekli.

Katsuro

[mention=611444]@Toor[/mention]

Xorg dediğiniz xlib kütüphanesi sanırım. Biraz araştırdım fakat sağlam bir döküman bulamadım.
Ben daha çok elektronik projeler üzerine uğraşıyorum. Plc kullanmak istemiyorum çünkü cihaza istediğiniz gibi hükmedemiyorsunuz. Kendim board tasarlayıp yaptığım zaman ise çok uğraşmak zorunda kalıyorum.(Ekran, Klavye, Haberleşme vs)

Yapmak istediğim tam olarak şu;
Bir pc'yi alıp donanımlarını ve ekranı kullarak daha önce yapmış olduğum elektronik kart ile tcp ile haberleştirip bir nevi endüstriyel cihaz yapmak.
Bilgisayar kullanmamın amacı ise; Hem boardla uğraşmamak hemde hızlı ve karmaşık hesaplamalar yapmak. 8 ve 16 bit işlemcilerde bu biraz kasıyor. Birde üstüne compiler'a muhtaç kalıyorsun ve bellek kapasitem sınırlı oluyor.

unixmania

selam kardes. bunu daha once paylasmistim. https://forum.ubuntu-tr.net/index.php?topic=50358.0

bunu da simdi paylasiyom. ekran karti ve mesa bile yuklu olmasa asadaki kod calisir ve ekrana verilen renkte bir dikdortgen cizer.

5 arguman alir program.

kullanim: program x y width height renk

x, y: ekranin x ve y koordinati

width, height: genislik ve yukseklik

yalniz bu intel donanim ve sayilar benim monitor icin. bi raspery pi3 aliversen onun ustunde denemeler yapsan senin amacina daha uygun degilmi. 150 tl falan.

#include <stdio.h>
#include <fcntl.h>
#include <libdrm/i915_drm.h>
#include <libdrm/drm_fourcc.h>

static void drawbox(int x, int y, int w, int h, int pitch, unsigned long buffer, unsigned int rgb){
for (int i=x; i<x+w; i++){
for (int j=y; j<y+h; j++) *((unsigned int*)(buffer + 4*i + j*pitch)) = rgb;
}
}

int main(int argc, char* argv[])
{
unsigned int fd, fbs, crtcs, connector, encoders;

struct drm_mode_card_res res = {0};
struct drm_mode_modeinfo mode;
struct drm_mode_get_connector conn = {0};
struct drm_i915_gem_create gem;
struct drm_gem_flink gemf;
struct drm_gem_open gemo;
struct drm_i915_gem_mmap gemm = {0};
struct drm_mode_get_encoder enc;
struct drm_mode_crtc crtc;
struct drm_mode_fb_cmd cmd = {0};

fd  = open("/dev/dri/card0",O_RDWR | O_CLOEXEC);

cap.capability = DRM_CLIENT_CAP_UNIVERSAL_PLANES;
cap.value      = 1;
ioctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);

cap.capability = DRM_CLIENT_CAP_ATOMIC;
cap.value      = 1;
ioctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);

ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res);
res.fb_id_ptr        = (unsigned long) &fbs;
res.crtc_id_ptr      = (unsigned long) &crtcs;
res.connector_id_ptr = (unsigned long) &connector;
res.encoder_id_ptr   = (unsigned long) &encoders;

ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res);

conn.connector_id = connector;
ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn); //get connector resource counts

unsigned int props[conn.count_props], prop_values[conn.count_props], encs[conn.count_encoders];

conn.modes_ptr       = (unsigned long) &mode;
conn.props_ptr       = (unsigned long) props;
conn.prop_values_ptr = (unsigned long) prop_values;
conn.encoders_ptr    = (unsigned long) encs;
ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn); //get connector resources

enc.encoder_id = conn.encoder_id;
ioctl(fd, DRM_IOCTL_MODE_GETENCODER, &enc); //get encoder

crtc.crtc_id = enc.crtc_id;
ioctl(fd, DRM_IOCTL_MODE_GETCRTC, &crtc);

gem.size = 4096*768*4;
ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, &gem);

gemf.handle = gem.handle;
ioctl(fd, DRM_IOCTL_GEM_FLINK, &gemf);

gemo.name = gemf.name;
ioctl(fd, DRM_IOCTL_GEM_OPEN, &gemo);

gemm.handle = gemo.handle;
gemm.offset = 0;
gemm.size   = gem.size;
ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &gemm);

cmd.width  = 1366;
cmd.height = 768;
cmd.bpp    = 32;
cmd.pitch  = 5504;
cmd.depth  = 24;
cmd.handle = gemo.handle;

ioctl(fd, DRM_IOCTL_MODE_ADDFB, &cmd);

drawbox(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), cmd.pitch, gemm.addr_ptr, (unsigned int) strtol(argv[5], 0, 16));

crtc.fb_id              = cmd.fb_id;
crtc.set_connectors_ptr = (unsigned long) &conn.connector_id;
crtc.count_connectors   = 1;
crtc.mode               = mode;
crtc.mode_valid         = 1;
ioctl(fd, DRM_IOCTL_MODE_SETCRTC, &crtc);

getchar();
close(fd);
return 0;
}