При выходе из оболочки без -H
терминал будет закрыт, также. С этим флагом будет продолжать работать терминал, но процесс оболочки закрывается и не может быть восстановлен.
Я думаю, что Вы пробуете к archieve, что Вы только запускаете свой терминал, и Ваша среда разработки запускает?
Можно создать сценарий оболочки и поместить все команды в нем. В конце сценария Вы только запускаете свою оболочку:
#!/bin/sh
gradle &
git &
... &
.... &
jboss &
$SHELL
# some cleanup commands if needed
Затем назовите этот сценарий через xfce4-terminal -e /the/script
. При выходе от $SHELL
родительский процесс (Ваш сценарий) законченный и фоновые задачи получит сигнал выхода и выйдет, также.
Если Вы хотите поддержать их, используйте, например. nohup jboss &
в Вашем сценарии
В этом сообщении описывается мой подход к отладке WMI на основе DSDT из вашего acpidump (SSDT не содержит здесь соответствующих подробностей).
\ _ SB.AMW0
- это устройство WMI в микропрограмме Dell ACPI.Метод \ EV4
вызывает \ WMNF
, который является единственным методом, который вызывает устройство \ _ SB.AMW0
(функция SWEV
= Установить ? Событие WMI). \ EV4
- это метод, который вызывается встроенным контроллером клавиатуры.
Теперь SWEV
- это установленное событие WMI, CMEV
, скорее всего, является событием очистки WMI. После вызова SWEV
устанавливаются биты в переменной WMEV
(«Событие WMI»?). WMI проверяет коды событий, вызывая метод _WED
и проверяя его возвращаемое значение. В этом методе _WED
действительно видно, что проверяется WMEV
и вызывается CMEV
:
Method (_WED, 1, NotSerialized) // _Wxx: Wake Event
{
WVSP ()
If (LNotEqual (Arg0, 0xD0))
{
WVCU ()
Return (WMBU) /* \_SB_.AMW0.WMBU */
}
If (LEqual (ECD0, Zero))
{
WVCU ()
Return (WMBU) /* \_SB_.AMW0.WMBU */
}
If (And (WMEV, 0x0200))
{
CWEV (0x0200)
// WMBU = { 0x0002, 0x0000, 0xE045 }
WVPT (0x02)
WVPT (Zero)
WVPT (0xE045)
}
Else
{
If (And (WMEV, 0x0100))
{
CWEV (0x0100)
If (ECG4 ())
{
WVPT (0x02)
WVPT (Zero)
WVPT (0xE043)
}
Else
{
WVPT (0x02)
WVPT (Zero)
WVPT (0xE044)
}
}
Else
{
If (And (WMEV, 0x0800))
{
Store (EC0A (WMBU), WMBU) /* \_SB_.AMW0.WMBU */
CWEV (0x0800)
}
}
}
WVCU ()
Return (WMBU) /* \_SB_.AMW0.WMBU */
}
Обратите внимание, однако, есть два условия, которые могут помешать возвращаемый код события (здесь не применяется):
Если Arg0 (идентификатор уведомления) не равен 0xD0. Это не так, как видно из этой интерпретации описания WMI:
9DBB5994-A997-11DA-B012-B622A1EF5492:
object_id: � [D0 00]
notify_id: D0
зарезервировано: 00
instance_count: 1
flags: 0x8 ACPI_WMI_EVENT
\ _ SB.AMW0.ECD0
равно 0
. Поскольку код Dell WMI прослушивает события WMI, вызывается WED0
(событие WMI D0
) с ненулевым аргументом, и это также не выполняется. Итак, продолжим интерпретацию _WED
. Возвращаемое значение теперь зависит от значения WMEV
. WVPT
устанавливает 16-битное слово в возвращаемом буфере WMBU
(и продвигает указатель для следующего вызова WVPT
). Мы можем построить следующую таблицу:
WMEV returned WMBU guessed key (see dell-wmi)
0200 0002 0000 E045 KEY_PROG1 or NumLock
0100 (ECG4()) 0002 0000 E043 ??
0100 (not ECG4()) 0002 0000 E044 ??
0800 ?? (value depends on EC registers)
Теперь код dell-wmi ожидает, что второе слово будет 0x0010
, а не 0x0000
. Для дальнейшей отладки вы должны включить параметр debug_event
для модуля WMI
# remove all dependencies of WMI and WMI itself:
modprobe -vr dell-wmi
modprobe wmi debug_event
modprobe dell-wmi
. Теперь нажмите горячие клавиши и посмотрите журналы ядра. Вам нужно выяснить, каков точный формат WMBU
, я полагаю, что вы получите наиболее интересные ключи для WMEV 0x0800, вам нужно рассмотреть это поближе. Возможно, добавьте это в dell_wmi_notify
(после u16 * buffer_entry = (u16 *) obj-> buffer.pointer;
) для отладки:
pr_info("WMBU = %04x %04x %04x\n", buffer_entry[0], buffer_entry[1], buffer_entry[2]);