Programas de instalação cruzada

4

O computador que estou configurando tem três partições. Um para windows10, um para linux e um para arquivos e programas compartilhados entre eles. Existe uma maneira de instalar programas na terceira partição (como python, pycharm, matlab, etc) para trabalhar em ambos os sistemas operacionais ou eu tenho que instalar em cada sistema operacional a própria versão do python, c ++, etc? A terceira partição é limitada ao compartilhamento de arquivos ou pode ser usada para compartilhar IDEs, aplicativos, compiladores e intérpretes?

Muito obrigado

    
por Ben Rei 15.03.2018 / 20:17

3 respostas

3

Você não conseguirá instalar programas na terceira partição para que eles possam ser executados em ambos os sistemas operacionais. Há uma razão pela qual você precisa ter downloads diferentes, dependendo do seu sistema operacional, cada sistema operacional tem muitos requisitos diferentes para o software.

Você deve ser capaz de nos definir para que as licenças sejam compartilhadas, se você precisar delas, e você possa configurá-las de modo que os arquivos produzidos sejam compartilhados automaticamente e talvez até mesmo a configuração do IDE, mas os próprios programas terá que ser instalado em cada sistema.

Uma solução alternativa pode ser configurar o encaminhamento de x11 de um sistema operacional para outro, mas isso exigiria que você tivesse ambos os sistemas operacionais rodando ao mesmo tempo, o que seria bastante complicado.

Como uma nota lateral, se você tivesse 2 partições com o Ubuntu em vez do Ubuntu e do Windows, isso provavelmente seria possível.

    
por Jeff 15.03.2018 / 20:28
1

Você pode fazer isso no Ubuntu Bash no Windows

Aqui está a configuração da minha partição:

$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL
NAME        FSTYPE LABEL            MOUNTPOINT   SIZE MODEL
sda                                            931.5G HGST HTS721010A9
├─sda4      ntfs   WINRETOOLS                    450M 
├─sda2                                           128M 
├─sda5      ntfs   Image                        11.4G 
├─sda3      ntfs   HGST_Win10       /mnt/d       919G 
└─sda1      vfat   ESP                           500M 
nvme0n1                                          477G Samsung SSD 960 PRO 512GB           
├─nvme0n1p5 ext4   NVMe_Ubuntu_16.0 /           44.6G 
├─nvme0n1p3                                       16M 
├─nvme0n1p1 ntfs                                 450M 
├─nvme0n1p6 swap   Linux Swap       [SWAP]       7.9G 
├─nvme0n1p4 ntfs   NVMe_Win10       /mnt/c     414.9G 
├─nvme0n1p2 vfat                    /boot/efi     99M 
└─nvme0n1p7 ntfs   Shared_WSL+Linux /mnt/e         9G 

nvme0n1p7 é compartilhado entre o Windows e o Ubuntu

Eu configurei uma partição de 9 GB que tanto o WSL (Windows Subsystem para Linux) quanto o Ubuntu podem ter em seus caminhos e executar programas. Aqui está a árvore para isso:

$ sudo tree /mnt/e -d 
/mnt/e
├── bin
├── boot
│   └── grub
│       ├── fonts
│       ├── i386-pc
│       └── locale
├── Desktop
├── Documents
├── Downloads
│   └── WinScreeny-master
├── etc
│   ├── apt
│   │   ├── sources.list.d
│   │   └── trusted.gpg.d
│   ├── cron.d
│   │   └── test-directory
│   ├── cron.daily
│   ├── cron.hourly
│   ├── cron.monthly
│   ├── cron.weekly
│   ├── default
│   ├── ssmtp
│   └── systemd
│       ├── network
│       ├── system
│       │   ├── bluetooth.target.wants
│       │   ├── default.target.wants
│       │   ├── display-manager.service.wants
│       │   ├── final.target.wants
│       │   ├── getty.target.wants
│       │   ├── graphical.target.wants
│       │   ├── hibernate.target.wants
│       │   ├── hybrid-sleep.target.wants
│       │   ├── multi-user.target.wants
│       │   ├── network-online.target.wants
│       │   ├── paths.target.wants
│       │   ├── printer.target.wants
│       │   ├── sleep.target.wants
│       │   ├── sockets.target.wants
│       │   ├── suspend.target.wants
│       │   ├── sysinit.target.wants
│       │   └── timers.target.wants
│       └── user
├── lib
│   └── systemd
│       └── system-sleep
├── $RECYCLE.BIN
│   └── S-1-5-21-1568003092-1971238075-3041751339-1001
├── System Volume Information
├── Temporary Work
├── usr
│   ├── local
│   │   └── bin
│   │       ├── bell
│   │       │   └── sounds
│   │       ├── startup-scripts
│   │       └── zap
│   │           └── Assembly-Intro-hello
│   │               ├── BeOS
│   │               ├── FreeBSD
│   │               └── Linux
│   └── share
│       └── plymouth
│           └── themes
│               ├── details
│               ├── earth-sunrise
│               ├── text
│               ├── tribar
│               ├── ubuntu-logo
│               └── ubuntu-text
└── wsl-linux-tmp

71 directories

Criando um programa híbrido

Eu peguei um dos meus programas: Aplicativo que bloqueará a tela após um determinado período de tempo para o Ubuntu e a modificou para reconhecer quando executado no Windows 10 e emitir os comandos powershell em vez dos comandos do Ubuntu para bolhas de mensagem e sons do sistema.

Por exemplo, aqui está um trecho de código para verificar se o ambiente é Windows e usa um comando diferente do que no Ubuntu:

if [[ $WSL_running == true ]]; then  
    powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
else
    ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
fi

Aqui está o código bash completo depois que o aplicativo foi criado em um híbrido Windows / Ubuntu:

$ cat /mnt/e/bin/lock-screen-timer
#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Nov 12, 2017.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               ogg123 '/usr/share/sounds/ubuntu/stereo/phone-outgoing-calling.ogg' ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Unbuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

    # Reset sound to Laptop or HDMI TV - Uncomment to fix sound device changing
    #    sleep 5 # HDMI deactivates when screen turned off. Give 5 seconds for TV to resync screen.
    #    hotplugtv

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.
    
por WinEunuuchs2Unix 16.03.2018 / 00:28
0

Para quase todos os programas, não. Isso ocorre porque o Windows e o Linux possuem diferentes chamadas de API (Application Programming Interface) e chamadas do sistema. As APIs são funções e definem como os programas se comunicam entre si. Normalmente, eles são incluídos em bibliotecas ou podem fazer parte do sistema operacional. As chamadas do sistema definem como os programas solicitam suporte / atividade de hardware do kernel. É possível traduzir chamadas de API e chamadas de sistema de um sistema operacional para outro, mas isso requer um tremendo esforço. O WINE é, na verdade, um excelente exemplo de tradução das APIs do Windows para as POSIX (por exemplo, Linux). Isso cria uma camada de compatibilidade entre o Windows e o Linux, permitindo que algum software do Windows seja executado no Linux. Além disso, o Windows e o Linux possuem formatos executáveis binários diferentes. O Windows tem o formato Portable Executable (PE) e o Linux tem o ELF (Executable Linkable Format).

Tudo isso dito, não acho que o que você está tentando alcançar seja possível sem um esforço significativo. Talvez (grande talvez) você possa instalar o WINE e configurá-lo em sua partição compartilhada para que ele possa conter programas para Windows e Linux. Mas essa é uma teoria maluca. O que o colega Jeff disse sobre licenças e outros arquivos é mais provável de ser possível e muito mais fácil de realizar.

    
por Saul Kapruac 15.03.2018 / 22:06