Вопрос или проблема
Я использую DWM под Arch Linux в сочетании с терминалом urxvt. У меня запущен демон urxvt, но когда я нажимаю комбинацию клавиш для открытия окна терминала, ничего не происходит.
Существует ли файл журнала ошибок для DWM?
Есть ли предложения, что я могу сделать, чтобы выяснить, почему терминал не открывается?
Спасибо!
Редактировать: Мой файл config.c:
/* внешний вид */
static const char font[] = "-*-terminus-medium-r-normal-*- 12-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#000000";
static const char normbgcolor[] = "#3f3f3f";
static const char normfgcolor[] = "#dfaf8f";
static const char selbordercolor[] = "#cc0000";
static const char selbgcolor[] = "#2b2b2b";
static const char selfgcolor[] = "#f0dfaf";
static const unsigned int borderpx = 1; /* размер границы окна в пикселях */
static const unsigned int snap = 0; /* привязка в пикселях */
static const Bool showbar = True; /* False означает отсутствие панели */
static const Bool topbar = True; /* False означает нижнюю панель */
/* теги */
static const char *tags[] = { "term", "work", "www", "mail"};
static const Rule rules[] = {
/* класс экземпляр заголовок маска тегов плавающее монитор */
{ "Gimp", NULL, NULL, 0, True, -1 },
{ "Firefox", NULL, NULL, 1 << 8, False, -1 },
};
/* макеты */
static const float mfact = 0.55; /* коэффициент размера основной области [0.05..0.95] */
static const int nmaster = 1; /* количество клиентов в основной области */
static const Bool resizehints = False; /* True означает уважение подсказок размера при изменении размера плиток */
static const Layout layouts[] = {
/* символ функция расстановки */
{ "[]=", tile }, /* первый элемент является по умолчанию */
{ "><>", NULL }, /* отсутствие функции расстановки означает плавающее поведение */
{ "[M]", monocle },
};
/* определения ключей */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* помощник для запуска команд оболочки в pre dwm-5.0 стиле */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* команды */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = { "urxvtc", NULL };
static Key keys[] = {
/* модификатор ключ функция аргумент */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
};
/* определения кнопок */
/* клик может быть ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin или ClkRootWin */
static Button buttons[] = {
/* клик маска события кнопка функция аргумент */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};
можете ли вы запустить urxvtc, как указано в строке
/* ком/* команды */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = { "urxvtc", NULL };mands */
иначе используйте другой терминал
Вы выполняете команду urxvtc
как termcmd
:
static const char *termcmd[] = { "urxvtc", NULL };
Обратите внимание, что это команда для управления демоном urxvt
, поэтому сначала должен быть запущен демон urxvtd
. Есть ли у вас команда urxvtd
в вашем .xinitrc
(или подобном)?
Для ясности:
urxvt
– терминальный эмуляторurxvt
.urxvtd
– терминальный демонurxvt
.urxvtc
– управление демономurxvtd
.
Уточняя вопрос еще больше, чтобы отладить этот вызов, я считаю, что ваш лучший вариант:
- Выполните с
dmenu
командуurxvt
. Если этот шаг прошел успешно, у вас откроется терминальный эмулятор, и эмуляторurxvt
будет работать корректно без демонізації, так что проблема в демоне или управлении демоном, а не вurxvt
. - В этом открытом терминале введите
urxvtc
. Еслиurxvt
правильно демонизирован, должен открыться другой терминальный эмулятор, если нет, оно выбросит ошибку типа:
Не удалось подключиться к демону rxvt-unicode: соединение отклонено
- Если есть ошибка, введите
urxvtd &
и повторите шаг 2 снова. - Затем попробуйте сочетание клавиш Mod4+Shift+Enter, чтобы проверить, что выполнение
urxvtc
корректно относительно демона, как указано в:
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
Однако, если все это кажется вам сложным и вы не против использовать демонизацию в urxvt
, вы можете упростить весь процесс и добавить простую команду urxvt
вместо управления демоном, то есть:
static const char *termcmd[] = { "urxvt", NULL };
.
Ответ или решение
Ваш вопрос о том, почему терминал не открывается в вашем рабочем окружении dwm на Arch Linux при использовании терминала urxvt, можно решить, следуя нескольким шагам для диагностики и исправления проблемы. Давайте подробно разберем возможные причины и шаги по их устранению.
Возможные причины проблемы
-
Отсутствие запущенного демона urxvtd: Вы используете команду
urxvtc
для открытия терминала, которая предназначена для взаимодействия с демономurxvtd
. Если демон не запущен, команда не выполнится. -
Ошибки в конфигурации dwm: Возможна ошибка в файле конфигурации
config.c
, что приводит к неправильному срабатыванию комбинации клавиш. -
Проблемы с доступом к необходимым файлам: Убедитесь, что все исполняемые файлы доступны и правильно настроены в PATH.
Шаги по диагностике и устранению проблемы
-
Проверка конфигурации urxvtd:
- Убедитесь, что команда
urxvtd
запущена. Это можно сделать добавив следующую строку в ваш файл.xinitrc
:urxvtd -q -f -o &
- Запустите
urxvtd
вручную в открытом терминале и посмотрите, возникнут ли какие-либо ошибки.
- Убедитесь, что команда
-
Использование другого способа запуска терминала:
- Попробуйте заменить
urxvtc
наurxvt
в вашем файлеconfig.c
:static const char *termcmd[] = { "urxvt", NULL };
- Перекомпилируйте dwm и перезапустите его, чтобы изменения вступили в силу.
- Попробуйте заменить
-
Диагностика через dmenu:
- Используйте
dmenu
для запускаurxvt
и убедитесь, что сам терминал работает нормально. - Если
urxvt
запустился без ошибок, проблема может заключаться именно в демонизации или в самой конфигурации запуска через dwm.
- Используйте
-
Проверка комбинации клавиш:
- Убедитесь, что в файле
config.c
правильно прописана комбинация для открытия терминала:{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
- Перезапустите dwm после изменений, выполнив
killall dwm
и вновь запустив его с помощьюstartx
.
- Убедитесь, что в файле
Логи и их анализ
Dwm по умолчанию не создает лог-файлы, но вы можете перенаправить вывод ошибок в файл. Для этого запустите dwm из терминала и добавьте перенаправление:
dwm 2> ~/dwm-errors.log
Проверьте файл dwm-errors.log
для получения дополнительной информации о возможных ошибках.
Вывод
Следуя приведенным выше шагам, вы сможете диагностировать и устранить причину проблемы с запуском терминала в вашем окружении dwm. Важно последовательно проверять каждый фактор, чтобы выявить источник неисправности. Также помните о возможности использования альтернативных решений, если текущее не подходит для ваших требований.