Как определить, что оболочка создана sFTP с помощью «Выйти в локальную оболочку»?

Для управляемого окна рабочего стола EWMH оконный менеджер в конечном счете по-прежнему управляет и может делать все, что ему заблагорассудится. К сожалению, с KDE было сложнее всего работать пользователям, так как он имеет странное поведение в отношении размещения окон, порядка размещения и видимости окон рабочего стола (см. , проблема #4). С другой стороны, KWin имеет широкие возможности для установки правил окон, см. :https://userbase.kde.org/KWin_Rules--, вы можете найти там решение.

Другим обходным решением может быть простое игнорирование оконного менеджера. GLava предоставляет некоторые встроенные -параметры для этого, которые вы можете установить с помощью #request setxwintype "!-". Символ !задает неуправляемый режим, а следующий за ним -диктует порядок наложения, чтобы он располагался под всеми остальными окнами, но это не идеальное решение.

Источник :автор GLava

0
04.01.2020, 16:58
2 ответа

Нет простого способа проверить, (например, нет переменной среды, которая идентифицирует вашу оболочку как ту, которая была запущена из sftp ).

Вы можете пройтись по дереву процессов и посмотреть, является ли один из ваших предков sftpпроцессом:

#!/bin/bash

pid=$$
while :; do
  # if we reach pid 1, we know we're not a child of an sftp process
  [[ $pid -eq 1 ]] && break

  # get parent of $pid
  ppid=$(ps -o ppid= $pid)

  # get the command associated with $ppid
  cmd=$(ps -o cmd= -p $ppid)

  # check if it was sftp
  if [[ $cmd =~ sftp ]]; then
    echo "Running under sftp"
    exit
  fi

  pid=$ppid
done

echo "Not a child of sftp"
4
28.01.2020, 02:15
% sftp myhost
Connected to myhost.
sftp> !sh
$ if pgrep -s 0 sftp >/dev/null; then echo 'in sftp session'; fi
in sftp session

Это использует pgrepдля проверки того, существует ли команда sftp, работающая в том же сеансе, что и текущая оболочка. Если есть, то эта оболочка, скорее всего, была запущена из sftp.

Если ваш pgrepподдерживает параметр -q, используйте его вместо перенаправления вывода на /dev/null.

Для быстрой визуальной проверки вы также можете использоватьpstree -s -p "$$"(в Linux; pstree -p "$$"на некоторых BSD, в зависимости от pstreeреализации ). Это покажет вам дерево процессов для текущего процесса, и вы, надеюсь, сможете увидеть там sftpна глаз.

1
28.01.2020, 02:15

Теги

Похожие вопросы