Я написал небольшой скрипт в bash, который открывает файл, а затем через пять минут закрывает его. Он повторяет эту процедуру и снова.
Проблема в том, что если мышь указала, что программа открывается, я бы хотел, чтобы она открывалась на моем втором мониторе, который является идеальным размером для просмотра файла.
Я попытался использовать отображаемые переменные следующим образом (в командной строке) export DISPLAY =: 0.1. Но тогда любая программа, которую я вызываю из CLI после этого, возвращает ошибку. (Ошибка: невозможно открыть дисплей: 0.1)
У кого-нибудь есть предложение?
edit:
Вот скрипт, чтобы открыть файл под названием thesis.pdf каждые пять минут
#! /bin/bash
while true; do
evince /home/adam/Desktop/Thesis.pdf &
sleep 5m
ps -ef | grep "Thesis.pdf" | awk '{print $2}' | xargs kill
done
exit 0
Этот ответ предполагает, что вы используете Unity:
Если вы хотите позвонить приложение и, впоследствии, поместить свое окно в определенную позицию и размер, время между вызовом приложения и моментом появления окна действительно важно, но непредсказуемо; если ваша система занята, она может быть значительно длиннее, чем если она не работает.
Вам нужен (желательно «умный») способ убедиться, что позиционирование / изменение размера (сразу) после появления окна .
Скрипт ниже (отредактированная версия этого) открывает приложение, возможно, с файлом как аргумент, в любом месте вашего рабочего стола (также на втором мониторе). Он ждет появления окна до того, как он переместит окно в его положение и размер, поэтому он будет работать правильно, независимо от того, будет ли ваша система медленной (или занятой) или нет.
#!/usr/bin/env python3
import subprocess
import time
import sys
app = (" ").join(sys.argv[5:])
get = lambda x: subprocess.check_output(["/bin/bash", "-c", x]).decode("utf-8")
ws1 = get("wmctrl -lp"); t = 0
subprocess.Popen(["/bin/bash", "-c", app])
while t < 30:
ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
procs = [[(p, w[0]) for p in get("ps -e ww").splitlines() \
if app in p and w[2] in p] for w in ws2]
if len(procs) > 0:
w_id = procs[0][0][1]
cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_horz"
cmd2 = "wmctrl -ir "+w_id+" -b remove,maximized_vert"
cmd3 = "xdotool windowsize --sync "+procs[0][0][1]+" "+sys.argv[3]+"% "+sys.argv[4]+"%"
cmd4 = "xdotool windowmove "+procs[0][0][1]+" "+sys.argv[1]+" "+sys.argv[2]
for cmd in [cmd1, cmd2, cmd3, cmd4]:
subprocess.call(["/bin/bash", "-c", cmd])
break
time.sleep(0.5)
t = t+1
sudo apt-get install wmctrl
sudo apt-get install xdotool
Скопируйте сценарий ниже в пустой файл, сохраните его как setwindow (без расширения) в ~/bin; при необходимости создайте каталог. Сделайте скрипт исполняемым (!) Если вы только что создали ~bin, запустите: source ~/.profile. Запустите сценарий с помощью команды like (например) setwindow 0 0 50 100 gedit /path/to/file.txt
. Другими словами: setwindow <horizontal-position> <vertical-position> <horizontal-size (%)> <vertical-size (%)> <application> <file_to_open>
Если
Если вы подключили второй монитор, вы должны подумать о комбинированном экраны как один большой виртуальный рабочий стол, как пример ниже.
В этом примере, чтобы поместить окно на правый экран, вам просто нужно сделать его x-положение большим, чем x-разрешение левого экрана. (> 1680 в этом случае).
Чтобы открыть файл с вашим приложением максимально эффективным образом, установите для параметра <horizontal-size (%)> и <vertical-size (%)> значение 100.
В Unity, когда вы (повторно) позиционируете и (повторно) меняете окно с помощью wmctrl или xdotool, окно всегда будет держать маленькую маржу до границ вашего экрана, если вы не установите его на 100%. Вы можете видеть это на изображении (3) выше; в то время как окно inkscape было помещено в позицию x 0, вы все равно можете видеть незначительную границу между Unity Launcher и inkscape.
Я беру абсолютный выстрел в темноте, здесь, но обходным решением для этого может быть этот скрипт:
#!/bin/bash
# Author: Andrew Martin
# Credit: http://ubuntuforums.org/showthread.php?t=1309247
echo "Enter the primary display from the following:" # prompt for the display
xrandr --prop | grep "[^dis]connected" | cut --delimiter=" " -f1 # query connected monitors
read choice # read the users's choice of monitor
xrandr --output $choice --primary # set the primary monitor
Я считаю, что это сработало для меня, чтобы установить мои средний монитор вместо моего монитора ноутбука на «главный монитор». Это, теоретически, откроет вашу программу на главном мониторе? - Я знаю, что вы сказали, что он открывается, где вы на мыши, но это выстрел ...
Надеюсь, вы его решите: )