Перейти к содержимому
  • 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

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


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

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

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

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)

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


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

.

 

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

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


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

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

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

 

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

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

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

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


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

 

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

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


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

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

 

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

( усложнив путём создания другого файла, и его запуском в 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 запустится

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

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


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

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

 

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

 

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

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


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

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

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

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


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

...

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

 

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

 

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

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

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


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

...

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

 

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

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

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


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

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

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

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

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

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

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

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

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


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