Автоматически устанавливать программу с помощью терминала (который имеет меню)

Хорошо, так что это будет звучать смешно. Но я выключил и снова включил экран, и теперь он работает.

1
задан 9 February 2018 в 23:31

3 ответа

Обычно можно попробовать --quiet, -q --help, но, как вы сказали, это не сработает. Мы должны что-то построить самостоятельно.

Для автоматической установки я считаю полезным использовать установку на виртуальном X-сервере. Мы можем отправлять ключи на X-сервер и не будем вмешиваться в текущий экран. Поэтому нам нужно xvfb создать проект X.org. Я также хочу сделать скриншоты во время установки, чтобы увидеть, где находится процесс, и возникают ли какие-либо ошибки. Для этого нам нужно imagemagick. Обратите внимание, что imagemagick будет работать только на X сеансах.

Сначала загрузите установщик и распакуйте его.

cd ~/Downloads
wget http://cdn.rowleydownload.co.uk/arm/releases/arm_crossworks_4_1_0_linux_x64.tar.gz
tar xf arm_crossworks_4_1_0_linux_x64.tar.gz
cd ~/Downloads/arm_crossworks_4_1_linux_x64

затем выполните этот сценарий из моего суждения:

#!/bin/bash
#
# source: https://askubuntu.com/questions/1002349/install-a-program-automatically-with-terminal-which-has-menus
# dependencies: sudo imagemagick xvfb

# constants
SERVERNUM=99
SCREENSHOT=status.png
CROSSWORKS_PID=
XVFB_PID=
PROGRESS_PID=
KEYS_PID=

# function find_free_servernum() taken from xvfb-run
# Xvfb is part of x.org and licensed under MIT
# http://opensource.org/licenses/mit-license.php
#
# Find a free server number by looking at .X*-lock files in /tmp.
find_free_servernum() {
    # Sadly, the "local" keyword is not POSIX.  Leave the next line commented in
    # the hope Debian Policy eventually changes to allow it in /bin/sh scripts
    # anyway.
    #local i

    i=$SERVERNUM
    while [ -f /tmp/.X$i-lock ]; do
        i=$(($i + 1))
    done
    echo $i
}

start_xvfb() {
    SERVERNUM=$(find_free_servernum)
    echo starting virtual DISPLAY at :$SERVERNUM
    export DISPLAY=:$SERVERNUM

    Xvfb $DISPLAY -screen 0 1280x800x16 &> /dev/null &
    XVFB_PID=$!
}

install_crossworks() {
    check_root
    if [ ! -e ./install_crossworks ]; then
        echo crossworks installation file not found
        exit 1
    fi
    timeout --kill-after=90s 90s sudo -n ./install_crossworks &
    CROSSWORKS_PID=$!

    crossworks_enter_keys &
    KEYS_PID=$!

    show_progress &
    PROGRESS_PID=$!

    if wait $CROSSWORKS_PID; then
        echo ok
    fi

    kill "$PROGRESS_PID" &> /dev/null
    kill "$KEYS_PID" &> /dev/null
}

crossworks_enter_keys() {
    # wait for archive to get checked for crc errors
    sleep 5
    # press next
    xdotool key KP_Enter
    sleep 1
    # accept license
    xdotool key Tab Tab Tab space Tab Tab KP_Enter
    sleep 1
    # select install directory
    xdotool key KP_Enter
    sleep 1
    # start installation
    xdotool key KP_Enter
    sleep 60
    # exit installation
    xdotool key KP_Enter
    sleep 1
}

show_progress() {
    while /bin/true; do
        take_screenshot
        echo -n .
        sleep 1
    done
}

take_screenshot() {
    import -window root $SCREENSHOT
    sudo chown $USER $SCREENSHOT
}

check_root() {
    if ! sudo -n /bin/true 2>/dev/null; then
        echo super user is required for installation.
        sudo /bin/true
    fi
}

check_installation() {
    if [ -e /usr/share/crossworks_for_arm_4.1/bin/crossstudio ]; then
        echo Crossworks installed.
        exit 0
    fi
}

cleanup() {
    kill "$PROGRESS_PID" &> /dev/null
    kill "$CROSSWORKS_PID" &> /dev/null
    kill "$XVFB_PID" &> /dev/null
    kill "$KEYS_PID" &> /dev/null
}

trap cleanup EXIT

check_installation
start_xvfb
install_crossworks
check_installation

One Большая проблема заключалась в том, что я догадывался о том, что установщик берет до того, как потребуется следующий вход пользователя. Это может зависеть от вашего процессора.

Также обратите внимание, что сценарий установки действителен только для установки кросс-программ. Сценарий не будет работать для обновления или удаления.

Чтобы снова удалить кроссворды, выполните

sudo /usr/share/crossworks_for_arm_4.1/bin/uninstall

, если есть какие-либо ошибки, попробуйте взглянуть на status.png, который помещается в текущий рабочий каталог. Это скриншот из X-фреймбуфера.

Это будет выглядеть примерно так:

этот скрипт из моего gist

Также посмотрите /usr/share/crossworks_for_arm_4.1/ , Иногда, если установка прерывается, этот каталог существует, но не полностью заполнен всеми необходимыми данными.

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

1
ответ дан 22 May 2018 в 13:21

Обычно можно попробовать --quiet, -q --help, но, как вы сказали, это не сработает. Мы должны что-то построить самостоятельно.

Для автоматической установки я считаю полезным использовать установку на виртуальном X-сервере. Мы можем отправлять ключи на X-сервер и не будем вмешиваться в текущий экран. Поэтому нам нужно xvfb создать проект X.org. Я также хочу сделать скриншоты во время установки, чтобы увидеть, где находится процесс, и возникают ли какие-либо ошибки. Для этого нам нужно imagemagick. Обратите внимание, что imagemagick будет работать только на X сеансах.

Сначала загрузите установщик и распакуйте его.

cd ~/Downloads wget http://cdn.rowleydownload.co.uk/arm/releases/arm_crossworks_4_1_0_linux_x64.tar.gz tar xf arm_crossworks_4_1_0_linux_x64.tar.gz cd ~/Downloads/arm_crossworks_4_1_linux_x64

затем выполните этот сценарий из моего суждения:

#!/bin/bash # # source: https://askubuntu.com/questions/1002349/install-a-program-automatically-with-terminal-which-has-menus # dependencies: sudo imagemagick xvfb # constants SERVERNUM=99 SCREENSHOT=status.png CROSSWORKS_PID= XVFB_PID= PROGRESS_PID= KEYS_PID= # function find_free_servernum() taken from xvfb-run # Xvfb is part of x.org and licensed under MIT # http://opensource.org/licenses/mit-license.php # # Find a free server number by looking at .X*-lock files in /tmp. find_free_servernum() { # Sadly, the "local" keyword is not POSIX. Leave the next line commented in # the hope Debian Policy eventually changes to allow it in /bin/sh scripts # anyway. #local i i=$SERVERNUM while [ -f /tmp/.X$i-lock ]; do i=$(($i + 1)) done echo $i } start_xvfb() { SERVERNUM=$(find_free_servernum) echo starting virtual DISPLAY at :$SERVERNUM export DISPLAY=:$SERVERNUM Xvfb $DISPLAY -screen 0 1280x800x16 &> /dev/null & XVFB_PID=$! } install_crossworks() { check_root if [ ! -e ./install_crossworks ]; then echo crossworks installation file not found exit 1 fi timeout --kill-after=90s 90s sudo -n ./install_crossworks & CROSSWORKS_PID=$! crossworks_enter_keys & KEYS_PID=$! show_progress & PROGRESS_PID=$! if wait $CROSSWORKS_PID; then echo ok fi kill "$PROGRESS_PID" &> /dev/null kill "$KEYS_PID" &> /dev/null } crossworks_enter_keys() { # wait for archive to get checked for crc errors sleep 5 # press next xdotool key KP_Enter sleep 1 # accept license xdotool key Tab Tab Tab space Tab Tab KP_Enter sleep 1 # select install directory xdotool key KP_Enter sleep 1 # start installation xdotool key KP_Enter sleep 60 # exit installation xdotool key KP_Enter sleep 1 } show_progress() { while /bin/true; do take_screenshot echo -n . sleep 1 done } take_screenshot() { import -window root $SCREENSHOT sudo chown $USER $SCREENSHOT } check_root() { if ! sudo -n /bin/true 2>/dev/null; then echo super user is required for installation. sudo /bin/true fi } check_installation() { if [ -e /usr/share/crossworks_for_arm_4.1/bin/crossstudio ]; then echo Crossworks installed. exit 0 fi } cleanup() { kill "$PROGRESS_PID" &> /dev/null kill "$CROSSWORKS_PID" &> /dev/null kill "$XVFB_PID" &> /dev/null kill "$KEYS_PID" &> /dev/null } trap cleanup EXIT check_installation start_xvfb install_crossworks check_installation

One Большая проблема заключалась в том, что я догадывался о том, что установщик берет до того, как потребуется следующий вход пользователя. Это может зависеть от вашего процессора.

Также обратите внимание, что сценарий установки действителен только для установки кросс-программ. Сценарий не будет работать для обновления или удаления.

Чтобы снова удалить кроссворды, выполните

sudo /usr/share/crossworks_for_arm_4.1/bin/uninstall

, если есть какие-либо ошибки, попробуйте взглянуть на status.png, который помещается в текущий рабочий каталог. Это скриншот из X-фреймбуфера.

Это будет выглядеть примерно так:

этот скрипт из моего gist

Также посмотрите /usr/share/crossworks_for_arm_4.1/ , Иногда, если установка прерывается, этот каталог существует, но не полностью заполнен всеми необходимыми данными.

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

1
ответ дан 17 July 2018 в 21:42

Обычно можно попробовать --quiet, -q --help, но, как вы сказали, это не сработает. Мы должны что-то построить самостоятельно.

Для автоматической установки я считаю полезным использовать установку на виртуальном X-сервере. Мы можем отправлять ключи на X-сервер и не будем вмешиваться в текущий экран. Поэтому нам нужно xvfb создать проект X.org. Я также хочу сделать скриншоты во время установки, чтобы увидеть, где находится процесс, и возникают ли какие-либо ошибки. Для этого нам нужно imagemagick. Обратите внимание, что imagemagick будет работать только на X сеансах.

Сначала загрузите установщик и распакуйте его.

cd ~/Downloads wget http://cdn.rowleydownload.co.uk/arm/releases/arm_crossworks_4_1_0_linux_x64.tar.gz tar xf arm_crossworks_4_1_0_linux_x64.tar.gz cd ~/Downloads/arm_crossworks_4_1_linux_x64

затем выполните этот сценарий из моего суждения:

#!/bin/bash # # source: https://askubuntu.com/questions/1002349/install-a-program-automatically-with-terminal-which-has-menus # dependencies: sudo imagemagick xvfb # constants SERVERNUM=99 SCREENSHOT=status.png CROSSWORKS_PID= XVFB_PID= PROGRESS_PID= KEYS_PID= # function find_free_servernum() taken from xvfb-run # Xvfb is part of x.org and licensed under MIT # http://opensource.org/licenses/mit-license.php # # Find a free server number by looking at .X*-lock files in /tmp. find_free_servernum() { # Sadly, the "local" keyword is not POSIX. Leave the next line commented in # the hope Debian Policy eventually changes to allow it in /bin/sh scripts # anyway. #local i i=$SERVERNUM while [ -f /tmp/.X$i-lock ]; do i=$(($i + 1)) done echo $i } start_xvfb() { SERVERNUM=$(find_free_servernum) echo starting virtual DISPLAY at :$SERVERNUM export DISPLAY=:$SERVERNUM Xvfb $DISPLAY -screen 0 1280x800x16 &> /dev/null & XVFB_PID=$! } install_crossworks() { check_root if [ ! -e ./install_crossworks ]; then echo crossworks installation file not found exit 1 fi timeout --kill-after=90s 90s sudo -n ./install_crossworks & CROSSWORKS_PID=$! crossworks_enter_keys & KEYS_PID=$! show_progress & PROGRESS_PID=$! if wait $CROSSWORKS_PID; then echo ok fi kill "$PROGRESS_PID" &> /dev/null kill "$KEYS_PID" &> /dev/null } crossworks_enter_keys() { # wait for archive to get checked for crc errors sleep 5 # press next xdotool key KP_Enter sleep 1 # accept license xdotool key Tab Tab Tab space Tab Tab KP_Enter sleep 1 # select install directory xdotool key KP_Enter sleep 1 # start installation xdotool key KP_Enter sleep 60 # exit installation xdotool key KP_Enter sleep 1 } show_progress() { while /bin/true; do take_screenshot echo -n . sleep 1 done } take_screenshot() { import -window root $SCREENSHOT sudo chown $USER $SCREENSHOT } check_root() { if ! sudo -n /bin/true 2>/dev/null; then echo super user is required for installation. sudo /bin/true fi } check_installation() { if [ -e /usr/share/crossworks_for_arm_4.1/bin/crossstudio ]; then echo Crossworks installed. exit 0 fi } cleanup() { kill "$PROGRESS_PID" &> /dev/null kill "$CROSSWORKS_PID" &> /dev/null kill "$XVFB_PID" &> /dev/null kill "$KEYS_PID" &> /dev/null } trap cleanup EXIT check_installation start_xvfb install_crossworks check_installation

One Большая проблема заключалась в том, что я догадывался о том, что установщик берет до того, как потребуется следующий вход пользователя. Это может зависеть от вашего процессора.

Также обратите внимание, что сценарий установки действителен только для установки кросс-программ. Сценарий не будет работать для обновления или удаления.

Чтобы снова удалить кроссворды, выполните

sudo /usr/share/crossworks_for_arm_4.1/bin/uninstall

, если есть какие-либо ошибки, попробуйте взглянуть на status.png, который помещается в текущий рабочий каталог. Это скриншот из X-фреймбуфера.

Это будет выглядеть примерно так:

этот скрипт из моего gist

Также посмотрите /usr/share/crossworks_for_arm_4.1/ , Иногда, если установка прерывается, этот каталог существует, но не полностью заполнен всеми необходимыми данными.

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

1
ответ дан 23 July 2018 в 22:19

Другие вопросы по тегам:

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