Перейти к содержимому
  • 0
Appo

Переопределение главного монитора

Вопрос

Помогите разобраться..

Программа работает так:
   -> вы запускаете эту программу -> нажимаете на другой монитор -> теперь это главный монитор

Но при перезапуске компьютера, запускается autorun.lua с запомненным адресом монитора, монитор подключается, но не система..
То есть для примера я добавил:
 

os.execute("lua") -- Для теста

Интерпретатор запускается на новом мониторе, можно в ней работать, но если выйти из lua, то в OpenOS не получится работать

Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится

Проблема в том, что как запустить OpenOS после перепривязки мониторов не создавая "такие" ивенты?
 

local component = require("component")
local _,add = require("event").pull("touch")

local ff=io.open("//autorun.lua","w")
ff:write([[
	local component = require("component")
	local add = "]]..add..[["
	if not(add == component.gpu.getScreen()) then 
		if not pcall(function() component.setPrimary("screen",add) end) then 
			component.setPrimary("screen",component.list("screen")) 
		end 
		component.gpu.bind(add)
		os.sleep(1) 
		component.setPrimary("keyboard",component.screen.getKeyboards()[1]) 
		require("term").clear()

                print('Проверка подключения') -- Для теста
		os.execute("lua") -- Для теста
	end
]])
ff:close()
os.execute("//autorun.lua")

P.S. Пока что не учитывается несколько видеокарт

Изменено пользователем Appo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Такой вариант:

local component = require("component")
local _,address = require("event").pull("touch")
  
local ff=io.open("/boot/98_connectScreen.lua","w")
ff:write([[
local component = require("component")
local address = "]]..address..[["

if component.screen.address ~= address then
  if pcall(function() component.setPrimary("screen", address) end) then
    component.setPrimary("keyboard", component.invoke(address, 'getKeyboards')[1])
  end
end
]])
ff:close()

if component.screen.address ~= address then
  require("term").clear()
  component.setPrimary("screen", address)
  component.setPrimary("keyboard", component.invoke(address, 'getKeyboards')[1])
  os.sleep(0.1)
  component.gpu.bind(component.screen.address)
  require("term").clear()
end

Вроде бы делает то, что нужно. (OpenOS 1.6)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Но при перезапуске компьютера, запускается autorun.lua с запомненным адресом монитора, но монитор подключается только если в момент запуска системы на (другом) мониторе создавать ивенты (клацать мышкой на мониторе например) Проблема в том, что как запустить систему после перепривязки мониторов не создавая ивенты?

.

 

видимо, просто нужно, чтобы программа создавала конфиг-файл, если есть есть необходимость, чтобы после выключения и снова включения компа основным становился монитор, который был проивенчен перед этим обрядом. И там хранить адрес основного монитора, и считывать его при запуске компа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Тебе нужны id мониторов? Используй component.list("screen")

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

 

видимо, просто нужно создать конфиг-файл, если есть есть необходимость, чтобы после выключения и снова включения компа основным становился монитор, который был проивенчен перед этим обрядом. И там хранить адрес основного монитора, и считывать его при запуске компа.

Я используюсь как конфиг autorun.lua, в нем уже сохранена информация о подключаемом мониторе. Он конечно подключается вместе с клавой, но OpenOS не запускается после этого.. У вас есть иной способ запуска конфига?

Изменено пользователем Appo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
У вас есть иной способ запуска конфига?

 

зачем конфиг запускать. Нужно запускать программу, а уже она при запуске считывает адрес монитора из файла и линкуется к нему как-то, то есть основным монитором становиться тот, который последним был прилинкован при ПКМкликах. Так же при линковке изменения нужно сразу перезаписать в файл конфига, чтобы после перезапуска компа изменения сохранились. Ну а как еще? Ну нет больше другого способа, наверно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

зачем конфиг запускать. Нужно запускать программу, а уже она при запуске считывает адрес монитора из файла и линкуется к нему как-то, то есть основным монитором становиться тот, который последним был прилинкован при ПКМкликах. Так же при линковке изменения нужно сразу перезаписать в файл конфига, чтобы после перезапуска компа изменения сохранились. Ну а как еще? Ну нет больше другого способа, наверно.

 

Сделал как вы сказали

( усложнив путём создания другого файла, и его запуском в autorun.lua )

 

 

 

 

local component = require("component")
local _,add = require("event").pull("touch")

local ff=io.open("//connectScreen.lua","w")
ff:write([[
	local component = require("component")
	local add = "]]..add..[["
	if not(add == component.gpu.getScreen()) then 
		if not pcall(function() component.setPrimary("screen",add) end) then 
			component.setPrimary("screen",component.list("screen")) 
		end 
		component.gpu.bind(add)
		os.sleep(1) 
		component.setPrimary("keyboard",component.screen.getKeyboards()[1]) 
		require("term").clear()
		os.execute("/boot/00_base.lua")
		print("test")
	end
]])
ff:close()

local ff=io.open("//autorun.lua","w")
ff:write([[
	os.execute("//connectScreen.lua")
]])
ff:close()

os.execute("//autorun.lua")

 

 

 

Проблема осталась так же, не запускается MineOS, только если не воспользоваться этим

 

Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится

Попробую объяснить что происходит при запуске программы (которая в начале поста, или в этом):

- запускаю эту программу в папке /home/

- клацаю на другой монитор

- монитор и клава подключается, я могу работать в ново выбранном мониторе

 

как бы на этом этапе успех, окда, но при перезапуске системы

- комп запускает OpenOS на случайном мониторе (еще не запустилась консоль)

- комп запускает autorun.lua

- монитор и клава подлючены

- если взять второй код, то пишется слово "test", а если в первом коде запускается интерпретатор lua

 

Ну типо и всё,

консоль не запускается, кроме слова "test" ничего нету, ну или если взять первый код, то запускается lua и там можно писать, но если выйти (ctrl + d или ctrl + alt + c) то консоль всё равно не запустится!

 

НО еще раз повторюсь, если при запуске компа попробывать сделать ЭТО:

 

Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

что там происходит в минеОсь, я вообще не в курсе. 

 

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

 

Не очень понятно, что ты вообще там делаешь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Если нужно назначить компонент ДО запуска системы, то надо писать установку примари-компонента в EEPROM, а не в системный автозапуск, все просто.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

...

Я имел ввиду OpenOS, а не MineOS.. Перепутал.

 

Я уже описал что происходит при запуске

 

Попробую объяснить что происходит при запуске программы (которая в начале поста, или в этом): - запускаю эту программу в папке /home/ - клацаю на другой монитор - монитор и клава подключается, я могу работать в ново выбранном мониторе как бы на этом этапе успех, окда, но при перезапуске системы - комп запускает OpenOS на случайном мониторе (еще не запустилась консоль) - комп запускает autorun.lua - монитор и клава подлючены - если взять второй код, то пишется слово "test", а если в первом коде запускается интерпретатор lua Ну типо и всё, консоль не запускается, кроме слова "test" ничего нету, ну или если взять первый код, то запускается lua и там можно писать, но если выйти (ctrl + d или ctrl + alt + c) то консоль всё равно не запустится!

Я не знаю какими словами обьяснять еще, просто запустите на чистом компе этот код, вы поймете о чём я говорю и в чём проблема..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

...

Спасибо за новые знания)

 

local ff=io.open("/boot/98_connectScreen.lua","w")

Это именно то, чего не хватало)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...