Bir VM'de Linux kullanıyorum ve X sunucu çözünürlüğü değiştiğinde (genellikle VM'de tam ekran moduna girip çıkıyor) bir komut dosyası çalıştırmak istiyorum. Bunu nasıl yapabilirim?
Bir VM'de Linux kullanıyorum ve X sunucu çözünürlüğü değiştiğinde (genellikle VM'de tam ekran moduna girip çıkıyor) bir komut dosyası çalıştırmak istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
Bu kodu yaz
#include <iostream>
#include <X11/Xlib.h>
Display* disp = XOpenDisplay(NULL);
Screen* scrn = DefaultScreenOfDisplay(disp);
int height = scrn->height;
int width = scrn->width;
int main() {
std::cout << "width " << width << " height " << height << "\n";
}
Derle
g++ test.c -o test -lX11
Koş
rbabchis@haze:~$ ./test
width 1920 height 1080
rbabchis@haze:~$
Çözümü değiştirmek için komut dosyasını kontrol etmeye ve yürütmeye devam etmek için onu oradan değiştirmeniz veya başka bir programlama / komut dili ile sarmanız gerekir. Bu kolay olmalı.
Değişiklikleri sürekli kontrol etmek ve harici bir komut dosyasını çalıştırmak için bu komut dosyasını kullanın (./external_script)
#! / Bin / bash çözünürlük = $ (./ testi) doğru olsa da; yap { newResolution = $ (./ testi) if ["$ newResolution"! = "$ çözünürlük"]; sonra { echo "Çözünürlük değişikliği: $ newResolution" çözünürlüğü = $ newResolution ./external_script } fi uyku 1 } tamamlandı
Unix ve Linux Stack Exchange'de benzer bir sorunun sonucu olan başka bir çözüme inandim .
Sorunun yazarı , X-Events'e bağlanan ve böylece sürekli bir değişiklik değişikliği için anket yapmak zorunda olmayan, xeventbind adlı küçük bir araç yazdı . Bu, kaynakları korur ve kod değiştirildikten hemen sonra komut dosyasının çalıştırılmasını sağlar.
Kaynak kodu ve xeventbind belgelerine GitHub'da bulunabilir.