У меня может быть окно, показывающее маленький предпросмотр в реальном времени другой рабочей области?

Действительно ли возможно зеркально отразить живой раздел одной рабочей области так, чтобы это было видимо в текущей рабочей области как окно, которое может быть перемещено?

На днях у меня был Windows 10 VM, работающий на моем хосте Ubuntu 16.04, который действительно занял много времени для завершения обновления. Я продолжал проверять его прогресс через Экспо (Super+S) на Ubuntu. Это получило меня думающий, что эта проблема уже была, скорее всего, решена, так как инструменты, такие как simplescreenrecorder могут быть настроены для записи просто части экрана. Однако я не знаю, что надлежащая терминология использует для моего поиска Google.

Я хотел бы видеть 300x150 снимок экрана ниже в форме плавающего окна (с живыми обновлениями) в правом верхнем углу того, какой бы ни рабочая область, оказывается, является текущей.

enter image description here

30
задан 12 July 2016 в 01:09

2 ответа

РЕДАКТИРОВАТЬ

(Новый ответ)

ГОТОВО.
Приведенный ниже ответ теперь доступен в отшлифованной форме, как индикатор, как ppa для Trusty, Xenial, Yakkety и Zesty:

sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy

Индикатор (включая окно предварительного просмотра) теперь имеет низкий уровень сока. Опции включают окно настроек, размер / цвет границы окна, размер окна.

enter image description here

Тем временем, я счел полезным следить за окном AU; посмотрим, есть ли какие-нибудь сообщения :)


СТАРЫЙ ОТВЕТ

( первая вторая приблизительная концепция)

Уменьшить представление окна в другом рабочем пространстве

На мой собственный (большой) сюрприз, это можно эффективно сделать, будь то с обман и обман; иметь обновленное представление окна в другом рабочем пространстве. Не подходит для просмотра фильма, определенно достаточно хорошо, чтобы смотреть в окно в другом месте (пример: окно моей ТВ-карты):

Как это работает на практике

  1. С окном впереди , нажмите сочетание клавиш:

    enter image description here

    (окно будет свернуто)

  2. Перейдите в другое рабочее пространство, снова нажмите сочетание клавиш, появится небольшое представление окна, обновляющееся каждые 4 секунды:

    enter image description here

    Окно всегда отображается поверх других окон. Как бы то ни было, размер окна составляет 300 пикселей (ширина), но может быть установлен любой размер.

  3. Чтобы закрыть окно, нажмите (еще раз) горячую клавишу. Маленькое окно закроется, вы переместитесь в область просмотра исходного окна, которое снова появится без минимального размера.

Скрипты

  1. Управляющий скрипт

     #! / Usr / bin / env python3
    подпроцесс импорта
    импорт ОС
    import sys
    время импорта
    
     # пути
    imagepath = os.path.join (os.environ ["ГЛАВНАЯ"], ".showcase")
    wfile = os.path.join (путь к изображению, "текущее окно")
    vpfile = os.path.join (путь к изображению, "last_vp")
     # путь установки
    если не os.path.exists (путь к изображению):
      os.mkdir (путь к изображению)
    
    def get (команда):
      пытаться:
      return subprocess.check_output (команда) .decode ("utf-8"). strip ()
      кроме subprocess.CalledProcessError:
      проходить
    
    def get_vp ():
      open (vpfile, "wt"). write (get (["wmctrl", "-d"]). split () [5])
    
    def run (команда):
      subprocess.Popen (команда)
    
    def convert_tohex (widxd):
      return widxd [: 2] + ((10-len (widxd)) * "0") + widxd [2:]
    
    def check_windowtype (wid):
      check = get (["xprop", "-id", wid])
      не вернуть ни одного ([s в проверке s в [
      "_NET_WM_WINDOW_TYPE_DOCK",
      "_NET_WM_WINDOW_TYPE_DESKTOP"]])
    
    def edit_winprops (wid, convert = True):
      run (["xdotool", "windowminimize", wid])
      если преобразовать:
      widxd = convert_tohex (шестнадцатеричный (int (wid)))
      еще:
      widxd = wid
      run ([«wmctrl», «-i», «-r», widxd, «-b», «добавить, липкий»])
      get_vp ()
      open (os.path.join (путь к изображению, "текущее окно"), "wt"). write (widxd)
    
    def initiate_min ():
      # если нет, уменьшить окно, записать файл
      wid = get (["xdotool", "getactivewindow"])
      если check_windowtype (wid):
      edit_winprops (wid)
      еще:
      pidinfo = [l.split () для l в wlist.splitlines ()]
      match = [l вместо l в pidinfo, если все ([
      get (["ps", "-p", l [2], "-o", "comm ="]) == "VirtualBox",
      не "Менеджер" в l])]
      если совпадение:
      edit_winprops (совпадение [0] [0], convert = False)
    
     # список окон
    wlist = get (["wmctrl", "-lp"])
    
    если "Предварительный просмотр окна" в списке:
      # убиваем миниокно
      pid = get (["pgrep", "-f", "showmin"])
      run (["убить", pid])
      окно = открыть (wfile) .read (). strip ()
      viewport = open (vpfile) .read (). strip ()
      run (["wmctrl", "-o", область просмотра])
      time.sleep (0,3)
      run (["wmctrl", "-i", "-r", window, "-b", "remove, sticky"])
      запустить (["wmctrl", "-ia", окно])
      os.remove (wfile)
    
    еще:
      # проверяем, существует ли оконный файл
      wfileexists = os.path.exists (wfile)
      если wfileexists:
      # если файл существует, попробуйте запустить miniwindow
      окно = открыть (wfile) .read (). strip ()
      если окно в списке:
      # если окно существует, запускаем!
      run (["showmin", окно])
      еще:
      # если нет, уменьшить окно, записать файл
      initiate_min ()
      еще:
      # если нет, уменьшить окно, записать файл
      initiate_min ()
     
  2. Представление окна

     #! / Usr / bin / env python3
    импорт gi
    gi.require_version ('Gtk', '3.0')
    из gi.repository import Gtk,GObject
    из PIL импорта изображения
    импорт ОС
    подпроцесс импорта
    время импорта
    from threading import Thread
    import sys
    
    wid = sys.argv [1]
    xsize = 300
    
    imagepath = os.path.join (os.environ ["ГЛАВНАЯ"], ".showcase")
    если не os.path.exists (путь к изображению):
      os.mkdir (путь к изображению)
    img_in = os.path.join (путь к изображению, "изображение.png")
    resized = os.path.join (путь к изображению, "resized.png")
    
    def get_img ():
      subprocess.Popen ([
      "import", "-window", wid, "-resize", str (xsize), размер изменен
      ])
    
    get_img ()
    
    класс Splash (Gtk.Window):
    
      def __init __ (сам):
      Gtk.Window .__ init __ (self, title = "Предварительный просмотр окна")
      maingrid = Gtk.Grid ()
      self.add (maingrid)
      self.image = Gtk.Image ()
      # задаем путь к изображению ниже
      self.resized = размер изменен
      self.image.set_from_file (с измененным размером)
      maingrid.attach (self.image, 0, 0, 1, 1)
      maingrid.set_border_width (3)
      self.update = Тема (цель = self.update_preview)
      self.update.setDaemon (Истина)
      self.update.start ()
    
      def update_preview (самостоятельно):
      в то время как True:
      get_img ()
      время сна (3)
      GObject.idle_add (
      self.image.set_from_file, self.resized,
      priority = GObject.PRIORITY_DEFAULT
      )
    
    def miniwindow ():
      window = Всплеск ()
      window.set_decorated (Ложь)
      window.set_resizable (Ложь)
      window.set_keep_above (Истина)
      window.set_wmclass ("Витрина", "витрина")
      window.connect ("уничтожить", Gtk.main_quit)
      GObject.threads_init ()
      window.show_all ()
      window.move (70, 50)
      Gtk.main ()
    
    miniwindow ()
     

Как использовать

  1. Установить python3-pil , xdotool и wmctrl

     sudo apt-get install xdotool wmctrl python3-pil
     
  2. Создайте, если он еще не существует, каталог ~ / bin .

  3. Скопируйте сценарий 1, он управляет сценарием, как (точно) showcase_control (без расширения ) в ~ / bin и сделать его исполняемым .
  4. Скопируйте сценарий 2, сценарий мини-окна, как (точно) showmin (без расширения ) в ~ / bin , и сделать его исполняемым .
  5. Выйдите из системы и снова войдите, а затем добавьте следующую команду к выбранному вами ярлыку:

     showcase_control
     

    Выберите: Системные настройки> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите "+" и добавьте команду:

     showcase_control
     

    и он должен работать!

    • Нажмите кнопку один раз, чтобы захватить текущее окно
    • переместиться в другое рабочее пространство, где вы хотите создать мини-окно
    • Нажмите еще раз, чтобы отобразить мини-окно
    • Нажмите еще раз, чтобы вернуться в исходное рабочее пространство , (автоматически) отменить сворачивание исходного окна и закрыть мини-окно.

Недостатки?

  • Текущая настройка добавляет некоторую работу для вашего процессора. Однако в моей (очень) старой системе он добавляет (в среднем) ок. 4-5% Я полагаю, что я не заметил каким-либо способом.

    Обновление: Оказывается, import может изменить размер изображения за один шаг вместе с получение изображения окна. Это означает существенное снижение нагрузки на процессор. В то же время время обновления короче (теперь 3 секунды), но по-прежнему с меньшими «затратами».

Объяснение

  • Моей отправной точкой было то, как OP упомянул, что он хотел использовать возможность следить за окном в другом рабочем пространстве, ожидая завершения какого-либо процесса.
  • Хотя буквально иметь точную (мини) копию окна в другом рабочем пространстве кажется невозможным, мы можем создать изображение существующее окно с помощью команды import , если у нас есть идентификатор окна. Хотя и то, и другое работает для свернутых окон или окон без фокуса, однако есть одна проблема: окно должно быть в текущей рабочей области .
  • Уловка заключается в том, чтобы временно (пока мини-окно находится в used) сделать окно «липким» (быть практически доступным во всех рабочих областях) с помощью wmctrl , но в то же время свернуть его.
  • Поскольку все выполняется автоматически, разница по сути отсутствует, так как возврат к исходному окну просмотра, «открепление» исходного окна и его сворачивание выполняется автоматически.

Вкратце:

  1. Однократное нажатие на ярлык: целевое окно становится липким, но сворачивается
  2. Повторное нажатие (предположительно в другом рабочем пространстве): в верхнем левом углу появляется небольшая мини-версия окна, обновляемая один раз за четыре секунды.
  3. Повторное нажатие: мини-окно закрывается, рабочий стол перемещается в исходную рабочую область окна, окно восстанавливается незакрепленным и не свернутым.

Специально для VirtualBox

Когда Окно VBox находится впереди, оказывается, что горячие клавиши Ubuntu отключены (!), Поэтому скрипт управления нужно запускать другим способом. Ниже несколько кратких.

Вариант 1

Я редактировал управляющий скрипт. Теперь только в случае VirtualBox:

  • Щелкните в любом месте на рабочем столе, Затем нажмите комбинацию клавиш. После этого,просто воспользуйтесь сочетанием клавиш, чтобы открыть окно и выйти.

    Объяснение: Сценарий управления был настроен на выход, если окно было типа "рабочий стол", поскольку вы не хотели бы сворачивать рабочий стол. Теперь сценарий сначала ищет, возможно, существующие окна VirtualBox, если текущим активным окном является рабочий стол.

Вариант 2

  • Скопируйте значок ниже (щелкните правой кнопкой мыши -> сохранить как), сохраните его как minwinicon.png

    enter image description here

  • Скопируйте приведенные ниже строки в пустой файл, сохраните его как minwin.desktop в ~ / .local / share / applications :

      [Desktop Entry]
    Тип = Приложение
    Name = Window Spy
    Exec = showcase_control
    Значок = / путь / к / minwinicon.png
    StartupNotify = false
     

    Вам нужно будет выйти и снова войти в программу запуска, чтобы «найти» локальный путь ~ / bin !
    Перетащите значок на панель запуска, чтобы использовать его.

У второго решения есть важный недостаток: после использования из панели запуска он будет продолжать мигать в течение нескольких секунд, ожидая появления окна. Во время этого повторное нажатие не будет иметь никакого эффекта. Это может быть решено, как описано здесь , но включение этого в этот ответ действительно сделало бы его слишком длинным. Если вы хотите использовать второй вариант, перейдите по ссылке.

27
ответ дан 23 November 2019 в 00:53

Что-то, что кажется излишним, но полностью подходит для этой цели, - это Open Broadcaster . В списке «Источники» щелкните значок «плюс», выберите «Захват окон», затем следуйте инструкциям по выбору интересующего вас окна. Нет смысла выбирать запись; просто воспользуйтесь предварительным просмотром. Он доступен для практически любой ОС , с инструкциями для Ubuntu здесь , которые я скопировал ниже.

sudo apt-get install ffmpeg
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update
sudo apt-get install obs-studio

Если вам это нравится, вы можете перейти в «Просмотр» "меню и скрыть все элементы пользовательского интерфейса.

1
ответ дан 23 November 2019 в 00:53

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

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