Расположение окна в wmctrl [dубликат]

Грубый, минималистский, способ командной строки:

sleep 1500; gnome-screensaver-command -l; sleep 300; killall gnome-screensaver

Это также можно превратить в ярлык на рабочем столе или превратить в функцию в .bashrc

Почему 1500 и 300 ? потому что это секунды, 1500 секунд / 60 секунд в минуту = 25 минут.

Ниже приведен скрипт для таймера, который позволяет установить время сеанса и время перерыва, а также методы сигнализируя о разрыве.

Помните, что любой скрипт в linux должен быть сохранен как файл и иметь исполняемые разрешения, установленные с помощью chmod +x /path/to/script.sh. Как только это будет сделано, вы можете привязать скрипт к ярлыку, как показано в разделе «Как привязать файлы .sh к комбинации клавиш? или создать ярлык на рабочем столе, как показано на рисунке Как я могу создать пусковые установки на моем рабочем столе?

Когда вы запускаете скрипт, вы должны увидеть следующее меню:

Как сделать привязать файлы .sh к комбинации клавиш?

#!/bin/bash

# Author: Serg Kolo
# Date : Nov 17th, 2015
# Purpose: pomodoro timer script,
# with bunch of options
# Written for: https://askubuntu.com/q/696620/295286

#####################################################
# screenSaver function
# this one uses gnome-screensaver-command for locking
# and killall for unlocking the screen;
# $1 is provided from chooseBreakMethod function
#####################################################

function screenSaver
{
  gnome-screensaver-command -l; sleep $1 ; killall gnome-screensaver 
}


##############################################
# dialogBreak function
# this serves as "screensaver". The screen is never 
# actually locked but rather we open terminal window 
# with a simple command line dialog
# in full sccrean mode
# $1 provided in chooseBreakMethod function
##################################################
function dialogBreak
{
 gnome-terminal --full-screen  -e  "bash -c 'sleep $1 | dialog --progressbox \"TAKE A BREAK\" 100 100 ' "
}

#################################################################
# dimScreen function 
# dims the screen using xrandr; the --brightness 
# can be configured
# for full or partial dimming using decimal values
# from 1 to 0
# $1 is provided from chooseBreakMethod function
################################################################

function dimScreen
{
  xrandr  | awk '$2 == "connected" {print $1}' | xargs -I % xrandr --output % --brightness 0.5
  notify-send 'Take a Break'
  sleep $1
  xrandr  | awk '$2 == "connected" {print $1}' | xargs -I % xrandr --output % --brightness 1
}

##############################
# getSettings function
# This is where the user enters 
# the settings they want
# All the values must be integers
#############################
function getSettings
{
  FORM=$(zenity --forms \ --title="Sergiy's Tomato Script" --text="Choose this session options" \
   --add-entry="Number of Sessions (how many loops)" \
   --add-entry="Session time (minutes)" \
   --add-entry="Break time (minutes)" \
   --add-entry="Dim,dialog,or screensaver? (1,2,3)" \
   --separator=" " )  

  [ $? -eq 0 ] || exit 1

   echo $FORM
}

################################
# chooseBreakMethod function
# A helper function that calls appropriate
# break method, based on the value we got
# from getSettings function
# Because dialogBreak calls gnome-terminal
# this function exits, so it doesn't wait
# Therefore we need to add additional sleep
# command
###############################

function chooseBreakMethod
{

 # $1 is method passed from  ${SETS[3]}
 # $2 is break time passed from ${SETS[2]}
  case $1 in
    1) dimScreen $2 ;;
        2) dialogBreak $2 ; sleep $2 ;;
    3) screenSaver $2 ;;
  esac

}


function minutesToSeconds
{
  echo $(($1*60))
}

#################
# MAIN
#################

# get user settings and store them into array
# Item 0 : num sessions
# Item 1 : session duration
# Item 2 : break duration
# Item 3 : break method - lockscreen, dialog, or just
# turn off the screen 
# SETS == settings
SETS=( $(getSettings) )

COUNTER=${SETS[0]}

#######################################
# This is where most of the job is done
# we loop according to number of session
# specified in the  getSettings function
#########################################

notify-send 'Session started'
while [ $COUNTER -ne 0  ]; do

  sleep $( minutesToSeconds ${SETS[1]} ) # session timer
  chooseBreakMethod ${SETS[3]} $( minutesToSeconds ${SETS[2]} )
  COUNTER=$(($COUNTER-1))
done

notify-send "tomatoScript is done"
####### END OF SCRIT ###########

7
задан 26 February 2016 в 12:19

2 ответа

Вероятно, это не тот ответ, который вы искали:

Проблемы с комбинацией Unity и wmctrl

К сожалению, сочетание Unity и wmctrl имеет несколько особенностей, из которых описывается поведение.

Глядя на ваш выход

Вы отмечаете 65,24: ширина Unity Launcher и высота вашей панели. В строке: 0x03400005 0 0 24 65 1111 janw_VirtualBox unity-launcher на выходе wmctrl -lG вы можете видеть, что Launcher находится в x=0, y=24, а размер пусковой установки - 65 x 1111. (1111 - высота вашего экрана за вычетом высоты вашей панели)

Строго говоря, команда размещения активного окна в верхнем левом углу должна быть:

wmctrl -r :ACTIVE: -e 0,65,24,1500,550

, а не:

wmctrl -r :ACTIVE: -e 0,0,0,1500,550

Однако это не решит проблему, это просто ошибка. Там еще будет описанная вами манга. То же самое произойдет и при использовании xdotool (не установлен по умолчанию):

xdotool windowmove "$(xdotool getactivewindow)" 65 24

или

xdotool windowmove "$(xdotool getactivewindow)" 0 0

Чтение вывода wmctrl -dG

Глядя на 1792x1111 в WA: 65,24 1792x1111, вы можете видеть, что у вас есть разрешение монитора 1857 (65 + 1792) x 1135 (1111 + 24) , Вероятно, не тот ответ, который вы искали: , он точно соответствует значениям в DG: 1857x1135, так как у вас есть только один просмотр (рабочее пространство): DG обозначает общий размер вашего рабочего стола (все вики).

Подведение итогов

Оба wmctrl и xdotool работают нормально, если вы установили окно total . Эффект, который вы описываете, не произойдет. Однако перемещение или изменение размеров окон оставляют несколько пикселей как с панели запуска, так и с панели, как описано в этом ответе .: «Окно, которое нужно переместить / изменить, должно быть как минимум несколько пикселей из «Unity launcher» и «top panel».

Помимо того, что вы описали, еще одна проблема, с которой вы столкнетесь, если вы начнете играть с wmctrl и Unity, это Перемещение [ ! d25], как описано в , этот ответ. .

4
ответ дан 18 July 2018 в 11:43

Вероятно, это не тот ответ, который вы искали:

Проблемы с комбинацией Unity и wmctrl

К сожалению, сочетание Unity и wmctrl имеет несколько особенностей, из которых описывается поведение.

Глядя на ваш выход

Вы отмечаете 65,24: ширина Unity Launcher и высота вашей панели. В строке: 0x03400005 0 0 24 65 1111 janw_VirtualBox unity-launcher на выходе wmctrl -lG вы можете видеть, что Launcher находится в x=0, y=24, а размер пусковой установки - 65 x 1111. (1111 - высота вашего экрана за вычетом высоты вашей панели)

Строго говоря, команда размещения активного окна в верхнем левом углу должна быть:

wmctrl -r :ACTIVE: -e 0,65,24,1500,550

, а не:

wmctrl -r :ACTIVE: -e 0,0,0,1500,550

Однако это не решит проблему, это просто ошибка. Там еще будет описанная вами манга. То же самое произойдет и при использовании xdotool (не установлен по умолчанию):

xdotool windowmove "$(xdotool getactivewindow)" 65 24

или

xdotool windowmove "$(xdotool getactivewindow)" 0 0

Чтение вывода wmctrl -dG

Глядя на 1792x1111 в WA: 65,24 1792x1111, вы можете видеть, что у вас есть разрешение монитора 1857 (65 + 1792) x 1135 (1111 + 24) , Вероятно, не тот ответ, который вы искали: , он точно соответствует значениям в DG: 1857x1135, так как у вас есть только один просмотр (рабочее пространство): DG обозначает общий размер вашего рабочего стола (все вики).

Подведение итогов

Оба wmctrl и xdotool работают нормально, если вы установили окно total . Эффект, который вы описываете, не произойдет. Однако перемещение или изменение размеров окон оставляют несколько пикселей как с панели запуска, так и с панели, как описано в этом ответе .: «Окно, которое нужно переместить / изменить, должно быть как минимум несколько пикселей из «Unity launcher» и «top panel».

Помимо того, что вы описали, еще одна проблема, с которой вы столкнетесь, если вы начнете играть с wmctrl и Unity, это Перемещение [ ! d25], как описано в , этот ответ. .

4
ответ дан 24 July 2018 в 19:50

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

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