1

Я использую Linux на виртуальной машине и хочу запускать сценарий всякий раз, когда изменяется разрешение X-сервера (обычно это происходит при входе / выходе из полноэкранного режима на виртуальной машине). Как я могу это сделать?

2 ответа2

1

Написать этот код

#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";
}

Скомпилируйте это

g++ test.c -o test -lX11

Запустить его

rbabchis@haze:~$ ./test
width 1920 height 1080
rbabchis@haze:~$ 

Вам придется изменить его оттуда или обернуть на другом языке программирования / сценариев, чтобы продолжить проверку и выполнение сценария при изменении разрешения. Это должно быть легко.

Используйте этот скрипт для постоянной проверки изменений и выполнения внешнего скрипта (./external_script)

#!/bin/bash

resolution=$(./test)

while true; do {
        newResolution=$(./test)
        if [ "$newResolution" != "$resolution" ]; then {
                echo "Resolution change: $newResolution"
                resolution=$newResolution
                ./external_script
        } fi

        sleep 1
} done

0

Я наткнулся на другое решение, которое было результатом аналогичного вопроса о Unix & Linux Stack Exchange.

Автор вопроса написал небольшой инструмент под названием xeventbind, который подключается к X-Events и, таким образом, не нуждается в постоянном опросе на предмет изменения разрешения. Это экономит ресурсы и обеспечивает выполнение сценария сразу после изменения разрешения.

Исходный код и документацию по xeventbind можно найти на GitHub.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .