Вы могли бы хотеть посмотреть на Linux С нуля:
Linux с нуля (LFS) является проектом, который предоставляет Вам пошаговые инструкции для создания Вашей собственной специализированной системы Linux полностью из источника.
Можно исследовать ресурсы существующего окна с editres. Это - интерактивная программа, которая позволяет Вам просмотреть дерево ресурса и найти местоположение виджета в том дереве путем нажатия на виджет в приложении. Можно даже изменить ресурс если поддержка приложений это. Это, однако, требует, что поддержка приложений протокол Editres, который не является настолько общим даже среди истощающейся пропорции приложений то использование X ресурсов. Кроме того, GUI editres клиент является единственным приложением, которое я знаю этого, знает, как отправить запросы Editres, таким образом, никакой список командных строк.
Вы видите, какие установки ресурса определяются для конкретного приложения с appres. Приложение могло бы поддерживать другие настройки. Это отличается от xrdb -query
которые только перечисляют настройки, которые явно перегрузил пользователь (appres, также перечисляет системные значения по умолчанию).
Довольно легко «захватить» функцию XrmParseCommand
и вывести список опций перед выполнением исходной функции.
/* G. Allen Morris III <gam3@gam3.net> */
#define _GNU_SOURCE
#include <X11/Xresource.h>
#include <stdio.h>
#include <dlfcn.h>
static char *types[] = {
"XrmoptionNoArg",
"XrmoptionIsArg",
"XrmoptionStickyArg",
"XrmoptionSepArg",
"XrmoptionResArg",
"XrmoptionSkipArg",
"XrmoptionSkipLine",
"XrmoptionSkipNArgs"
};
void XrmParseCommand(XrmDatabase * database,
XrmOptionDescList table,
int table_count,
_Xconst char *name, int *argc_in_out, char **argv_in_out)
{
void (*original_XrmParseCommand) (XrmDatabase * database,
XrmOptionDescList table,
int table_count,
_Xconst char *name, int *argc_in_out,
char **argv_in_out);
int argc = *argc_in_out;
printf("'XrmParseCommand's %s\n", name);
for (int i = 0; i < table_count; i++) {
switch (table[i].argKind) {
case XrmoptionNoArg:
case XrmoptionIsArg:
case XrmoptionStickyArg:
case XrmoptionResArg:
case XrmoptionSkipArg:
case XrmoptionSkipLine:
case XrmoptionSkipNArgs:
case XrmoptionSepArg:
printf("%20s %30s %s \n", types[table[i].argKind], table[i].option,
table[i].specifier);
break;
default:
printf("%20s %30s %s \n", "UNKNOWN", table[i].option,
table[i].specifier);
}
}
original_XrmParseCommand = dlsym(RTLD_NEXT, "XrmParseCommand");
(*original_XrmParseCommand) (database,
table,
table_count, name, argc_in_out, argv_in_out);
}
/* eof */
Makefile
myXrmParseCommand.so : myXrmParseCommand.c
gcc -Wall -fPIC -shared -o $@ $< -ldl
Чтобы запустить
#/bin/sh
make && LD_PRELOAD=./myXrmParseCommand.so xterm -e :;
Фрагмент Git lab здесь .