Отправьте текст/вход во все вкладки

xvfb-run по-видимому, не фактический двоичный файл, а сценарий, согласно этому сайту.

На базирующихся дистрибутивах Debian это довольно легко. Пакет называют xvfb, и приложение может быть выполнено в нем с xvfb-управляемым-a ПРИЛОЖЕНИЕМ. На основанных на об/мин дистрибутивах это не настолько легко. Но со справкой приведенной ниже таблицы, легко узнать название пакета xvfb на каждом распределении. Можно также видеть, поставляется ли сценарий с рудой пакета не, и в противном случае это может быть загружено отсюда.

Сценарий, кажется, идентичен для OpenSUSE и CentOS/RHEL, здесь это:

#!/bin/sh

# $Id: xvfb-run 2027 2004-11-16 14:54:16Z branden $

# This script starts an instance of Xvfb, the "fake" X server, runs a command
# with that server available, and kills the X server when done.  The return
# value of the command becomes the return value of this script.
#
# If anyone is using this to build a Debian package, make sure the package
# Build-Depends on xvfb, xbase-clients, and xfonts-base.

set -e

PROGNAME=xvfb-run
SERVERNUM=99
AUTHFILE=
ERRORFILE=/dev/null
STARTWAIT=3
XVFBARGS="-screen 0 640x480x8"
LISTENTCP="-nolisten tcp"
XAUTHPROTO=.

# Query the terminal to establish a default number of columns to use for
# displaying messages to the user.  This is used only as a fallback in the event
# the COLUMNS variable is not set.  ($COLUMNS can react to SIGWINCH while the
# script is running, and this cannot, only being calculated once.)
DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true
if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then
    DEFCOLUMNS=80
fi

# Display a message, wrapping lines at the terminal width.
message () {
    echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS}
}

# Display an error message.
error () {
    message "error: $*" >&2
}

# Display a usage message.
usage () {
    if [ -n "$*" ]; then
        message "usage error: $*"
    fi
    cat <>"$ERRORFILE" 2>&1
    fi
    if [ -n "$XVFB_RUN_TMPDIR" ]; then
        if ! rm -r "$XVFB_RUN_TMPDIR"; then
            error "problem while cleaning up temporary directory"
            exit 5
        fi
    fi
}

# Parse the command line.
ARGS=$(getopt --options +ae:f:hn:lp:s:w: \
       --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \
       --name "$PROGNAME" -- "$@")
GETOPT_STATUS=$?

if [ $GETOPT_STATUS -ne 0 ]; then
    error "internal error; getopt exited with status $GETOPT_STATUS"
    exit 6
fi

eval set -- "$ARGS"

while :; do
    case "$1" in
        -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;;
        -e|--error-file) ERRORFILE="$2"; shift ;;
        -f|--auth-file) AUTHFILE="$2"; shift ;;
        -h|--help) SHOWHELP="yes" ;;
        -n|--server-num) SERVERNUM="$2"; shift ;;
        -l|--listen-tcp) LISTENTCP="" ;;
        -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;;
        -s|--server-args) XVFBARGS="$2"; shift ;;
        -w|--wait) STARTWAIT="$2"; shift ;;
        --) shift; break ;;
        *) error "internal error; getopt permitted \"$1\" unexpectedly"
           exit 6
           ;;
    esac
    shift
done

if [ "$SHOWHELP" ]; then
    usage
    exit 0
fi

if [ -z "$*" ]; then
    usage "need a command to run" >&2
    exit 2
fi

if ! which xauth >/dev/null; then
    error "xauth command not found"
    exit 3
fi

# tidy up after ourselves
trap clean_up EXIT

# If the user did not specify an X authorization file to use, set up a temporary
# directory to house one.
if [ -z "$AUTHFILE" ]; then
    XVFB_RUN_TMPDIR="${TMPDIR:-/tmp}/$PROGNAME.$$"
    if ! mkdir -p -m 700 "$XVFB_RUN_TMPDIR"; then
        error "temporary directory $XVFB_RUN_TMPDIR already exists"
        exit 4
    fi
    AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" -t Xauthority.XXXXXXXX)
fi

# Start Xvfb.
MCOOKIE=$(mcookie)
XAUTHORITY=$AUTHFILE xauth add ":$SERVERNUM" "$XAUTHPROTO" "$MCOOKIE" \
  >>"$ERRORFILE" 2>&1
XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \
  2>&1 &
XVFBPID=$!
sleep "$STARTWAIT"
if ! kill -0 $XVFBPID 2>/dev/null; then
  echo "Xvfb failed to start" >&2
  exit 1
fi

# Start the command and save its exit status.
set +e
DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
RETVAL=$?
set -e

# Kill Xvfb now that the command has exited.
kill $XVFBPID

# Return the executed command's exit status.
exit $RETVAL

# vim:set ai et sts=4 sw=4 tw=80:

Лично я затем получил ошибку

which: no xauth in (/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games)
xvfb-run: error: xauth command not found

Который был зафиксирован путем простой установки xauth через yast.

3
19.04.2014, 04:05
1 ответ

Multixterm

Есть инструмент под названием multixterm . Он использует терминалы xterm . Вы можете вызвать его так:

$ multixterm

И после этого вам будет представлен графический интерфейс.

ss of gui

Затем вы можете начать раскручивать xterm окна, нажав кнопку новый xterm . Вот, например, я вызвал 2. Если затем щелкнуть главное окно, вы можете начать вводить команды в обоих окнах одновременно:

ss of xtems

keyboardcast

Доступно только в Ubuntu, похоже на multixterm .

выдержка

Назначение клавиатуры - позволить вам отправлять нажатия клавиш сразу в несколько X окон. Это позволяет, например, управлять несколькими терминалами, подключенными к разным, но схожим хостам, в целях массового администрирования.

Вы также можете выбрать нетерминалы. Если вы придумаете разумное использование этой способности, мне было бы интересно узнать об этом.

Программа может выбирать окна для отправки, сопоставляя их заголовки (используя подстроку) или нажимая на них (способом, аналогичным функции снимков экрана в GIMP).

Программа также имеет возможность запускать несколько экземпляров gnome-terminal, выполняющих одну команду с несколькими аргументами (например, выполняет 'ssh' на нескольких хостах). Терминалы gnome вызываются с профилем 'keyboardcast', если он существует (так, например, ваш размер шрифта может быть меньше).

Терминатор

Если вы хотите отказаться от использования gnome-terminal , есть также Терминатор . В частности, этот пункт из списка функций:

Одновременный набор текста для произвольных групп терминалов

Вот пример, в котором я транслирую команду ls в 4 разных окна терминатора .

ss #1

6
27.01.2020, 21:14

Теги

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