Терминал не открывается под dwm — существует ли файл журнала ошибок?

Вопрос или проблема

Я использую 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.

Уточняя вопрос еще больше, чтобы отладить этот вызов, я считаю, что ваш лучший вариант:

  1. Выполните с dmenu команду urxvt. Если этот шаг прошел успешно, у вас откроется терминальный эмулятор, и эмулятор urxvt будет работать корректно без демонізації, так что проблема в демоне или управлении демоном, а не в urxvt.
  2. В этом открытом терминале введите urxvtc. Если urxvt правильно демонизирован, должен открыться другой терминальный эмулятор, если нет, оно выбросит ошибку типа:
Не удалось подключиться к демону rxvt-unicode: соединение отклонено
  1. Если есть ошибка, введите urxvtd & и повторите шаг 2 снова.
  2. Затем попробуйте сочетание клавиш Mod4+Shift+Enter, чтобы проверить, что выполнение urxvtc корректно относительно демона, как указано в:
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },

Однако, если все это кажется вам сложным и вы не против использовать демонизацию в urxvt, вы можете упростить весь процесс и добавить простую команду urxvt вместо управления демоном, то есть:

static const char *termcmd[]  = { "urxvt", NULL };

.

Ответ или решение

Ваш вопрос о том, почему терминал не открывается в вашем рабочем окружении dwm на Arch Linux при использовании терминала urxvt, можно решить, следуя нескольким шагам для диагностики и исправления проблемы. Давайте подробно разберем возможные причины и шаги по их устранению.

Возможные причины проблемы

  1. Отсутствие запущенного демона urxvtd: Вы используете команду urxvtc для открытия терминала, которая предназначена для взаимодействия с демоном urxvtd. Если демон не запущен, команда не выполнится.

  2. Ошибки в конфигурации dwm: Возможна ошибка в файле конфигурации config.c, что приводит к неправильному срабатыванию комбинации клавиш.

  3. Проблемы с доступом к необходимым файлам: Убедитесь, что все исполняемые файлы доступны и правильно настроены в PATH.

Шаги по диагностике и устранению проблемы

  1. Проверка конфигурации urxvtd:

    • Убедитесь, что команда urxvtd запущена. Это можно сделать добавив следующую строку в ваш файл .xinitrc:
      urxvtd -q -f -o &
    • Запустите urxvtd вручную в открытом терминале и посмотрите, возникнут ли какие-либо ошибки.
  2. Использование другого способа запуска терминала:

    • Попробуйте заменить urxvtc на urxvt в вашем файле config.c:
      static const char *termcmd[]  = { "urxvt", NULL };
    • Перекомпилируйте dwm и перезапустите его, чтобы изменения вступили в силу.
  3. Диагностика через dmenu:

    • Используйте dmenu для запуска urxvt и убедитесь, что сам терминал работает нормально.
    • Если urxvt запустился без ошибок, проблема может заключаться именно в демонизации или в самой конфигурации запуска через dwm.
  4. Проверка комбинации клавиш:

    • Убедитесь, что в файле config.c правильно прописана комбинация для открытия терминала:
      { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
    • Перезапустите dwm после изменений, выполнив killall dwm и вновь запустив его с помощью startx.

Логи и их анализ

Dwm по умолчанию не создает лог-файлы, но вы можете перенаправить вывод ошибок в файл. Для этого запустите dwm из терминала и добавьте перенаправление:

dwm 2> ~/dwm-errors.log

Проверьте файл dwm-errors.log для получения дополнительной информации о возможных ошибках.

Вывод

Следуя приведенным выше шагам, вы сможете диагностировать и устранить причину проблемы с запуском терминала в вашем окружении dwm. Важно последовательно проверять каждый фактор, чтобы выявить источник неисправности. Также помните о возможности использования альтернативных решений, если текущее не подходит для ваших требований.

Оцените материал
Добавить комментарий

Капча загружается...