Здравствуйте. Пытаюсь научиться создавать простые оконные приложения, но столкнулся с проблемой кодировок в Linux Mint. Конкретно в Си-коде (C/C++) с библиотекой Xlib.
Помогите решить проблему!
Код программы:
#include <X11/Xlib.h>
#include <X11/keysym.h> // Библиотека с кодами клавиш клавиатуры
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
Display *d;
Window w, r;
XGCValues gv;
GC gc;
XEvent e;
char *msg = "Привет! Hellow word!";
int s;
if ((d = XOpenDisplay(getenv("DISPLAY"))) == NULL) {
printf("Can't connect X server!\n");
exit(1);
}
s = XDefaultScreen(d);
r = RootWindow(d, s);
gv.foreground = XBlackPixel(d, s);
gv.font = XLoadFont(d, "-adobe-helvetica-medium-r-normal-*-16-*-*-*-*-*-koi8-r");
gc = XCreateGC(d, r, GCForeground | GCFont, &gv);
/* Создать окно */
w = XCreateSimpleWindow (d, r, 10, 10, 800, 600, 1, gv.foreground, XWhitePixel(d, s));
/* Устанавливаем заголовки окон */
XStoreName(d, w, "Window #1");
/* Вывести окно на экран */
XMapWindow(d, w);
/* Отправить все команды Xlib принудительно из буфера на сервер */
XFlush(d);
/* На какие события будем реагировать */
XSelectInput(d, w, ExposureMask | KeyPressMask | ButtonPressMask);
/* Бесконечный цикл обработки событий */
while (1) {
XNextEvent(d, &e);
/* При изменении размеров окна вызывается событие */
if (e.type == Expose) {
XDrawString(d, w, gc, 100, 100, msg, strlen(msg));
printf ("\n%s\n", msg);
XFlush(d);
}
/* При нажатии кнопки-выход */
if (e.type == KeyPress) {
//break;
}
/* При нажатии мышки-выход */
if (e.type == ButtonPress) {
break;
}
}
XCloseDisplay(d);
return 0;
}
Ошибка в консоли:
X Error of failed request: BadName (named color or font does not exist)
Major opcode of failed request: 45 (X_OpenFont)
Serial number of failed request: 7
Current serial number in output stream: 12
В самом терминале русские шрифты отображаются, а вот в этой программе какие-то квакозяблики.